【问题标题】:response to conversationUpdate on Skype for Business对 Skype for Business 上的对话更新的响应
【发布时间】:2018-10-30 17:25:06
【问题描述】:

我打算在用户最初打开聊天窗口时从 Skype for Business 上的机器人发送问候消息。为了实现这一点,我试图响应机器人的对话更新事件。当我响应 conversationUpdate 事件时,我收到以下错误,即对话没有退出

{"Error":{"Code":"ServiceError","Message":"对话不 存在"}}

但是当同一个用户发送消息时,我会收到具有相同会话 ID 的消息,并且能够毫无问题地回复。

我可以在网络聊天中毫无问题地执行此操作,但在 SfB 上却没有。我在微软的 GitHub 存储库上查看了一些关于该机器人的问题,这表明该问题可能最好在 SO 上得到回答。

更新

我之前在 SfB 2013 上。我已升级到 SfB 2016,一旦用户发送他的第一条消息,机器人就会响应它收到的 conversationUpdate 事件。通常在网络聊天中,一旦用户打开窗口,就会发送对第一个 conversationUpdate 的响应,而一旦用户发送他的第一条消息,就会发送第二个响应。在 SfB 的情况下,对第二个对话更新的响应有效,但对第一个对话更新无效。

网络聊天

Skype for Business

如上所述,对第一个 conversationUpdate 的响应将导致

对话不存在

错误。用户发送第一条消息时对第二个会话更新的响应有效。

那么现在我们如何使欢迎消息在第一个 conversationUpdate 更新中起作用并在第二个 conversationUpdate 更新中禁用它?

【问题讨论】:

    标签: botframework chatbot skype-for-business azure-bot-service


    【解决方案1】:

    我不确定,为什么 converstaionUpdate 事件没有触发。但正如 BotFramework 文档中所述,并非每个频道都支持该事件。您可以改为添加first run 对话框并检查它是否有效。从docs 页面添加示例:

    // Add first run dialog
    bot.dialog('firstRun', function (session) {    
        session.userData.firstRun = true;
        session.send("Hello...").endDialog();
    }).triggerAction({
        onFindAction: function (context, callback) {
            // Only trigger if we've never seen user before
            if (!context.userData.firstRun) {
                // Return a score of 1.1 to ensure the first run dialog wins
                callback(null, 1.1);
            } else {
                callback(null, 0.0);
            }
        }
    });
    

    【讨论】:

    • 我使用的是 REST api,但我认为不支持对话框
    • 即使在这种情况下,请确认您使用的频道支持conversationUpdate事件。如果不是,您可能需要做一些不同的事情。此外,尽管您没有使用 Node API,但逻辑仍然适用。当firstrun 标志为第一个用户关闭时,该对话框被激活。当它运行时,它会打开标志。所以现在对话框不会为该用户运行。您可以使用相同的逻辑。该标志值在用户的userData 中设置。
    猜你喜欢
    • 1970-01-01
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 2017-07-05
    相关资源
    最近更新 更多