机器人是否有正确的方法在直线通道中与 PromptDialog.Choice
开始对话?
我正在尝试一个丑陋的黑客攻击拳头 ConversationUpdate
活动并从用户创建一个假消息来初始化对话框,如下所示:
IMessageActivity greetingMessage = Activity.CreateMessageActivity();
greetingMessage.From = message.Recipient;//from bot
greetingMessage.Recipient = userAccount;//to user
greetingMessage.Conversation = message.Conversation;
greetingMessage.Text = "Hello, I am a bot";
greetingMessage.Locale = "en-us";
greetingMessage.Id = Guid.NewGuid().ToString();
await connector.Conversations.SendToConversationAsync((Activity)greetingMessage);
IMessageActivity dialogEntryMessage = Activity.CreateMessageActivity();
dialogEntryMessage.Recipient = message.Recipient;//to bot
dialogEntryMessage.From = message.From;//from user
dialogEntryMessage.Conversation = message.Conversation;
dialogEntryMessage.Text = "any text";
dialogEntryMessage.Locale = "en-us";
dialogEntryMessage.ChannelId = message.ChannelId;
dialogEntryMessage.ServiceUrl = message.ServiceUrl;
dialogEntryMessage.Id = Guid.NewGuid().ToString();
dialogEntryMessage.ReplyToId = greetingMessage.Id;
await Conversation.SendAsync(dialogEntryMessage, () => new Dialogs.RootDialog());
message
是来自的 ConversationUpdate
消息 . 在RootDialog中,我以 PromptDialog.Choice
开头 .
它在模拟器中工作,但是在Direct Line通道bot中不记得对话框状态,当用户选择一个对话框选项并发送他的第一个真实消息时,root对话框会再次从 PromptDialog.Choice
开始,因此它会出现两次 .
Update
我找到了一个来自微软的相关博文:https://blog.botframework.com/2018/07/12/how-to-properly-send-a-greeting-message-and-common-issues-from-customers/
1 回答
我可以在我身边重现同样的问题,并且我发现当机器人和用户都被添加到对话中时将执行 ConversationUpdate 处理程序 .
要解决此问题,可以参考以下代码示例 .
In MessagesController:
In RootDialog:
Test result: