【发布时间】:2018-02-19 05:40:05
【问题描述】:
我使用 IDialogContext.Call() 在我的机器人中有一个简单的子对话框调用。当用户键入“新项目”时,会调用以下代码:
...
context.Call(new NewProjectDialog(), NewProjectConfirmed);
...
NewProjectDialog() 只是询问项目名称,然后在返回 NewProjectConfirmed() 之前保存它
[Serializable]
public class NewProjectDialog : IDialog<Project>
{
public async Task StartAsync(IDialogContext context)
{
await context.PostAsync("What is the name of the project?");
context.Wait(this.MessageReceivedAsync);
}
public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
{
var message = await result;
Project p = new Project();
//Saving project here...
await context.PostAsync($"OK. Your project '{message.Text}' was created.");
context.Done(p);
}
}
当从模拟器、Skype 或 Webchat 调用机器人时,一切都按预期工作。用户通过键入“新项目”来请求新项目,机器人询问名称,它等待,一旦用户输入项目名称,机器人就会确认新项目的创建。
但是当我从 Slack 调用相同的方法时,当用户通过键入“新项目”请求新项目时,文本“新项目”将传递给 NewProjectDialog。它询问项目名称,但无需等待,它会进一步传递“新项目”并将其保存为项目名称。
不太确定我错过了什么。 iDialogContext.Wait() 与 Slack 的工作方式不同,或者 Call() 函数似乎像 Forward() 一样将消息发布到子对话框。
【问题讨论】:
-
我刚刚在 Facebook Messenger 中测试了相同的代码,它像 Skype 和 Emulator 一样运行良好。这是我想知道的 Slack 设置问题吗?
-
你使用的是什么版本的 BotBuilder?
-
使用最新的nuget包Microsoft.Bot.Builder v3.9.0
标签: c# botframework skype slack