当前位置: 首页 > 知识库问答 >
问题:

第二个ConversationUpdate事件将出现在用户第一次输入的后面?

闻人鸿飞
2023-03-14

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

  1. 单击开始浏览

但是模拟器工作正常,2对话更新事件并等待用户输入。

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

我想发送欢迎信息(包括用户名,如hi,rainmaker welcome…)当第二次会话更新即将到来时发送给用户。欢迎消息将在用户输入azure webchat后发送。我如何解决这个问题?

谢谢

共有1个答案

漆雕兴平
2023-03-14

这是一个常见的问题张贴在这里;是的,conversationUpdate事件在emulator和webchat之间不是以相同的方式抛出的,这非常令人不安。

我想发送欢迎信息(包括用户名,如hi,rainmaker welcome…)当第二次会话更新即将到来时发送给用户。欢迎消息将在用户输入azure webchat后发送。我如何解决这个问题?

如果您需要在该用户开始讲话之前发送包含该用户某些信息的欢迎信息,您可以使用webchat的反向频道功能传递这些信息,然后捕获该信息并发送欢迎信息。

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

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

示例代码:我做了一个演示,您可以在那里看到:html" target="_blank">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.在机器人级别收到的消息,这里

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...

    }
}
 类似资料:
  • 问题内容: 给定一个具有两列的文件,以标准空白隔开 我如何输出第二列 问题答案: 由于示例数据的最后一行没有第一列,因此您必须将其解析为固定宽度的列:

  • 问题内容: 我需要在第二次出现“-”字符之前拆分文本。我现在所产生的结果不一致。我尝试了SO的各种组合并通读并尝试了SO上的其他解决方案,但没有结果。 要分割的样本文件名:在中返回。在这种情况下,我只想回来。 问题答案: 您可以执行以下操作: 将字符串拆分为的第二次出现。 将给出列表中的前2个元素。然后只需加入前2个元素。 要么 您可以使用正则表达式: 编辑: 如评论中所讨论,这是您需要的:

  • 一、题目 在字符串中找出第一个只出现一次的字符。 二、解题思路 第一种:直接求解: 从头开始扫描这个字符串中的每个字符。当访问到某字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字符,则该字符就是只出现一次的字符。如果字符串有n个字符,每个字符可能与后面的O(n)个字符相比较,因此这种思路的时间复杂度是O(n^2)。 第二种:记录法 由于题目与字符出现的次数相关, 我们是不是可以统

  • 我的屏幕上有两个组件,第一个是图像,第二个是下面的网格和图表。我想使图像居中,使其水平地位于中心,并且在第二个组件之上。第二个组件应该在图像的下方,而不是它的右边。我该怎么做呢? 我试过衬垫和对齐,但这些似乎对我不起作用。

  • 一般的,计算机程序是:输入 (Input) 经过算法处理产生输出 (Output)。各种语言一般都会提供IO库供开发者使用。Go语言也不例外。 Go 语言中,为了方便开发者使用,将 IO 操作封装在了如下几个包中: io 为 IO 原语(I/O primitives)提供基本的接口 io/ioutil 封装一些实用的 I/O 函数 fmt 实现格式化 I/O,类似 C 语言中的 printf 和