使用Slack时,Microsoft Bot Framework IDialogContext.Call()无法正常工作

时间:2017-09-11 03:50:03

标签: c# botframework skype slack

我使用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以及用户输入的项目名称,机器人确认新项目创建来请求新项目。

enter image description here

但是当我从Slack调用同样的内容时,当用户通过键入“new project”请求新项目时,文本“new project”将传递给NewProjectDialog。它询问项目名称,但没有等待它进一步传递“新项目”并将其保存为项目的名称。

enter image description here

不确定我错过了什么。 iDialogContext.Wait()与Slack的工作方式不同,或者Call()函数似乎将消息发布到子对话框,如Forward()应该。

1 个答案:

答案 0 :(得分:1)

感谢一些Howdy developers我发现了这个问题。

当机器人已经获得团队授权,然后其他人进来并再次授权机器人时,就会发生这种情况。当发生这种情况时,似乎有两个机器人运行,然后使用相同的RTM连接发布到通道两次。

我不知道我是如何在同一个Slack客户端中获得2个机器人的。但是一旦我移除并重新安装我的机器人,它就开始按预期工作了。

同样的问题导致了这个其他症状:Microsoft Bot Framework Bot duplicate responses in Slack