.net core 将HeroCard中的CardActions作为欢迎信息发送,并指向相应的对话框
我正在使用Dialogs和Waterwallstep来组织对话框逻辑 我想要一张带有.net core 将HeroCard中的CardActions作为欢迎信息发送,并指向相应的对话框,.net-core,botframework,.net Core,Botframework,我正在使用Dialogs和Waterwallstep来组织对话框逻辑 我想要一张带有CardActions的HeroCard作为欢迎信息。只需将HeroCard作为欢迎信息发送即可,但我的问题是,当用户单击CardAction中的一个选项时,使用turnContext指向右侧对话框 这是我在Bots.WelcomeBot.cs中遇到的代码。这两种方法都是在OnMembersAddedAsync之后使用的,效果很好 private static async Task MainMenuAsync(I
CardActions
的HeroCard
作为欢迎信息。只需将HeroCard
作为欢迎信息发送即可,但我的问题是,当用户单击CardAction
中的一个选项时,使用turnContext
指向右侧对话框
这是我在Bots.WelcomeBot.cs
中遇到的代码。这两种方法都是在OnMembersAddedAsync之后使用的,效果很好
private static async Task MainMenuAsync(ITurnContext turnContext, CancellationToken cancellationToken)
{
var card = new HeroCard
{
Text = "Welcome! What can I help you with?",
Buttons = new List<CardAction>
{
new CardAction() { Title = "Contact", Type = ActionTypes.ImBack, Value = "Contact" },
new CardAction() { Title = "Newsletter", Type = ActionTypes.ImBack, Value = "Newsletter" },
new CardAction() { Title = "Products", Type = ActionTypes.ImBack, Value = "Products" },
},
};
var reply = MessageFactory.Attachment(card.ToAttachment());
await turnContext.SendActivityAsync(reply, cancellationToken);
await MainMenuChoisesAsync(turnContext, reply, cancellationToken);
}
private static async Task MainMenuChoisesAsync(ITurnContext turnContext, IMessageActivity reply, CancellationToken cancellationToken) {
string choice = reply.ToString().ToLowerInvariant();
switch (choice) {
case "contact":
{
//Direct to ContactDialog.cs
}
}
}
专用静态异步任务MainMenuAsync(iTurContext turnContext,CancellationToken CancellationToken)
{
var卡=新卡
{
Text=“欢迎!有什么可以帮您的吗?”,
按钮=新列表
{
new CardAction(){Title=“Contact”,Type=ActionTypes.ImBack,Value=“Contact”},
new CardAction(){Title=“Newsletter”,Type=ActionTypes.ImBack,Value=“Newsletter”},
new CardAction(){Title=“Products”,Type=ActionTypes.ImBack,Value=“Products”},
},
};
var reply=MessageFactory.Attachment(card.ToAttachment());
等待turnContext.SendActivityAsync(回复、取消令牌);
等待MainMenuchoiseAsync(turnContext、reply、cancellationToken);
}
专用静态异步任务MainMenuChoiseAsync(iTurContext turnContext、IMessageActivity reply、CancellationToken CancellationToken){
字符串选择=reply.ToString().ToLowerInvariant();
开关(选择){
案例“联系人”:
{
//直接到ContactDialog.cs
}
}
}
最初,此选项菜单位于my Main对话框中,当用户在聊天开始时写入任何内容时,会触发该对话框。然后,下一步将重定向到右侧对话框
如果您使用的是WebChat或directline,则在创建对话时会发送bot的ConversationUpdate,在用户端首次发送消息时会发送其ConversationUpdate。最初发送ConversationUpdate时,消息中没有足够的信息来构造对话框堆栈。这在emulator中似乎起作用的原因是emulator模拟了一种伪DirectLine,但两个ConversationUpdate在emulator中同时解析,而实际服务的执行情况并非如此。
(来源:)
目前,无法对您描述的场景使用conversationUpdate
事件。您可以通过在WebChat完全加载时发送自定义事件来解决此问题,但是您不能使用Bot服务提供的默认iframe。
看一看
请看一个示例,该示例演示如何在bot首次启动时实施欢迎活动:
- (推荐)
conversationUpdate
事件还是自定义事件。我将在webchat中使用它。我只是把我的机器人放在一个简单的html网站上,然后我注意到简单的欢迎信息直到用户写了东西才显示出来。我使用的是ConversationUpdate
,这与Microsoft的逻辑相同,它在使用DirectLine的Emulator中运行良好。如果您为Web聊天生成带有用户id的DirectLine令牌,您可以从onMembersAdded
处理程序中的ConversationUpdate
事件发送欢迎消息。