第二个ConversationUpdate事件将在用户第一次输入后面跟随?

时间:2018-05-16 05:28:56

标签: azure botframework

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

click StartOver ant Azure Portal WebChat The second ConversationUpdate event will follow at the back of user first input? Azure的网络聊天步骤如下,

  1. 点击“开始”
  2. bot首先获得ConversationUpdate,memberAdd bot
  3. 用户输入文字
  4. bot获取用户输入文本
  5. bot获得第二个ConversationUpdate,memberAdd用户
  6. 但是模拟器工作正常,2个ConversationUpdate事件并等待用户输入。 botframework-emulator步骤如下,

    1. 点击开始新对话
    2. bot首先获得ConversationUpdate,memberAdd bot
    3. bot获得第二个ConversationUpdate,memberAdd用户
    4. 用户输入文字
    5. bot获取用户输入文本
    6. 我希望在第二次ConversationUpdate到来时向用户发送欢迎消息(包括用户名,如hi,rainmaker welcome ...)。 用户在azure网络聊天中输入后将发送欢迎消息。 我该如何解决这个问题?

      感谢。

1 个答案:

答案 0 :(得分:1)

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

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

  

我想发送欢迎信息(包括用户名,喜欢你,雨衣   欢迎...)第二次ConversationUpdate即将到来的用户。该   用户在azure网页聊天中输入后会发送欢迎消息。我怎么能够   解决这个问题?

如果您需要在此用户开始讲话之前发送欢迎消息以及有关用户的某些信息,您可以使用网络聊天的backchannel功能传递这些信息,然后收到消息并发送欢迎信息。

正面需要几行代码,因此无法用于Azure网络聊天测试人员。但它在网络聊天实施方面运作良好,请参见下面的示例。

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

样品

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

要点:

1。从前面发送的Backchannel消息 here

在示例中,我传递了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...

    }
}