首页 > 解决方案 > 第二个 ConversationUpdate 事件将跟随在用户第一次输入的后面?

问题描述

我在 Azure 门户上测试我的机器人(机器人频道注册/机器人管理/网络聊天中的测试)。第二个 ConversationUpdate 事件将跟随在用户第一次输入的后面,如下所示,

单击 StartOver ant Azure 门户 WebChat 第二个 ConversationUpdate 事件将跟随在用户第一次输入的后面? Azure 的网络聊天步骤如下所示,

  1. 点击重新开始
  2. bot 获取第一个 ConversationUpdate,memberAdd bot
  3. 用户输入文本
  4. bot获取用户输入文本
  5. bot 获取第二个 ConversationUpdate,memberAdd 用户

但模拟器工作正常,2 个 ConversationUpdate 事件并等待用户输入。botframework-emulator 步骤如下,

  1. 单击开始新对话
  2. bot 获取第一个 ConversationUpdate,memberAdd bot
  3. bot 获取第二个 ConversationUpdate,memberAdd 用户
  4. 用户输入文本
  5. bot获取用户输入文本

我想在第二次 ConversationUpdate 到来时向用户发送欢迎消息(包括用户名,如 hi,rainmaker 欢迎......)。欢迎消息将在用户在 azure webchat 中输入后发送。我该如何解决这个问题?

谢谢。

标签: azurebotframework

解决方案


这是这里发布的一个常见问题;是的,conversationUpdate 事件在模拟器和网络聊天之间的抛出方式不同,这很令人不安。

在网络聊天中向您的用户发送欢迎

我想在第二次 ConversationUpdate 到来时向用户发送欢迎消息(包括用户名,如 hi,rainmaker 欢迎......)。欢迎消息将在用户在 azure webchat 中输入后发送。我该如何解决这个问题?

如果您需要在该用户开始交谈之前发送包含有关该用户的一些信息backchannel的欢迎消息,您可以使用网络聊天的功能来传递这些信息,然后捕获该消息并发送您的欢迎消息。

它在前端需要几行代码,因此不能用于 Azure 网络聊天测试器。但它在网络聊天实现中运行良好,请参见下面的示例。

旁注:如果您不需要有关用户的信息,您仍然可以使用conversationUpdate您收到的第一个。

样本

示例代码:我做了一个演示,你可以在那里得到它:https ://github.com/nrobert/Bot-Language-Demo

要点:

1.这里从前面发送的反向通道消息

在示例中,我传递了一个locale信息:

botConnectionSettings.postActivity({
    type: 'event',
    from: { id: 'userid' },
    locale: chatLocale,
    name: 'localeSelectionEvent',
    value: chatLocale
}).subscribe(function (id) { console.log('event language "' + chatLocale + '" selection sent'); });

2. 在机器人级别收到的消息here

else if (activity.Type == ActivityTypes.Event && activity.ChannelId == "webchat")
{
    var receivedEvent = activity.AsEventActivity();

    if ("localeSelectionEvent".Equals(receivedEvent.Name, StringComparison.InvariantCultureIgnoreCase))
    {
        // Send your welcome message here, using the special information you would have put in the event message...

    }
}

推荐阅读