我使用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调用机器人时,一切都按预期工作。用户通过键入“新项目”,机器人要求输入名称,WAITS以及用户输入的项目名称,机器人确认新项目创建来请求新项目。
但是当我从Slack调用同样的内容时,当用户通过键入“new project”请求新项目时,文本“new project”将传递给NewProjectDialog。它询问项目名称,但没有等待它进一步传递“新项目”并将其保存为项目的名称。
不确定我错过了什么。 iDialogContext.Wait()与Slack的工作方式不同,或者Call()函数似乎将消息发布到子对话框,如Forward()应该。
答案 0 :(得分:1)
感谢一些Howdy developers我发现了这个问题。
当机器人已经获得团队授权,然后其他人进来并再次授权机器人时,就会发生这种情况。当发生这种情况时,似乎有两个机器人运行,然后使用相同的RTM连接发布到通道两次。
我不知道我是如何在同一个Slack客户端中获得2个机器人的。但是一旦我移除并重新安装我的机器人,它就开始按预期工作了。
同样的问题导致了这个其他症状:Microsoft Bot Framework Bot duplicate responses in Slack