【问题标题】:Microsoft Bot Framework IDialogContext.Call() not working when using Slack使用 Slack 时,Microsoft Bot Framework IDialogContext.Call() 不起作用
【发布时间】: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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 2017-12-31
    相关资源
    最近更新 更多