我想在机器人框架下禁用网络聊天中的卡片按钮。例如,在一张卡片中,我有多个按钮,我想根据一些数据值禁用一些按钮。我怎样才能做到这一点?
问问题
2007 次
2 回答
5
将来,我会建议缩小您的要求,使其不那么广泛,并包括与您要实现的目标相关的细节。尽管如此,我还是填补了一些空白,并做了一些我希望对您有所帮助的事情。:)
我有一个工作示例机器人,它执行以下操作:
- 为每个响应显示一张英雄卡
- 如果用户说“嗨”或“你好”,卡片上会显示两个按钮
- 如果用户不问候机器人,则只会显示一个按钮。
- 告诉用户他们是否与机器人打招呼(SendGreeting,真或假)
我在 UserData 中保存了一个布尔值 SendGreeting,以通知机器人是否显示第二个按钮。在控制器中,我有以下代码:
- 实例化 UserData,
- 确定 SentGreeting 是真还是假
然后将该布尔值保存到 UserData.SentGreeting。
// create connector service ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl)); // get state client object StateClient stateClient = activity.GetStateClient(); // retrieve user data BotData userData = await stateClient.BotState.GetUserDataAsync(activity.ChannelId, activity.From.Id); bool SentGreeting; if (activity.Text == "hello" || activity.Text == "hi") { SentGreeting = true; } else { SentGreeting = false; } userData.SetProperty<bool>("SentGreeting", SentGreeting); // save state await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData); // initiate CardDialog await Conversation.SendAsync(activity, () => new CardDialog());
在对话框中,有以下代码:
- 从 UserData 中检索 SentGreeting
- 创建英雄卡
仅当 SentGreeting 为 true 时才创建秘密按钮并将其添加到按钮列表中
// create sentGreeting bool sentGreeting; // assign value from UserData.SentGreeting context.UserData.TryGetValue<bool>("SentGreeting", out sentGreeting); // create standard button list (for those who do not greet the bot) var GenericButtonList = new List<CardAction> { new CardAction(ActionTypes.OpenUrl, "Bot Framework", value: "https://docs.botframework.com/en-us/"), }; // create the hero card var Card = new HeroCard() { Title = "Select an Action", Subtitle = "Choose from available actions", Text = "If you were polite and said \'hi\' or \'hello\' to this bot, you will see two buttons below.", Images = new List<CardImage> { new CardImage("https://cloud.githubusercontent.com/assets/14900841/23733811/c618e402-042f-11e7-9b8e-6262d9f2d898.JPG") }, Buttons = GenericButtonList }; // create secret button that only users who said hi can see CardAction secretButton = new CardAction(); secretButton.Title = "Very Polite"; secretButton.Type = "openUrl"; secretButton.Value = "https://github.com/Microsoft/BotBuilder-Samples/tree/master/CSharp/demo-ContosoFlowers/ContosoFlowers.Services"; if (sentGreeting) { Card.Buttons.Add(secretButton); }
链接到此机器人的GitHub 存储库
于 2017-03-10T00:27:09.343 回答
3
您无法使用开箱即用的 WebChat 启用/禁用。不过,您也许可以构建您的自定义 WebChat 并添加该功能。
所有的魔法都发生在Attachment.tsx文件上。例如,在渲染HeroCard时会调用一个按钮函数。该函数创建一个按钮并应用一个 CSS 类。您可以根据按钮的某些值动态更改类。
顺便说一句,如果你能做到这一点,IMO,它可能会对 WebChat 组件做出很好的贡献。
于 2017-03-13T17:54:52.710 回答