azure - 第二个 ConversationUpdate 事件将跟随在用户第一次输入的后面?
问题描述
我在 Azure 门户上测试我的机器人(机器人频道注册/机器人管理/网络聊天中的测试)。第二个 ConversationUpdate 事件将跟随在用户第一次输入的后面,如下所示,
- 点击重新开始
- bot 获取第一个 ConversationUpdate,memberAdd bot
- 用户输入文本
- bot获取用户输入文本
- bot 获取第二个 ConversationUpdate,memberAdd 用户
但模拟器工作正常,2 个 ConversationUpdate 事件并等待用户输入。botframework-emulator 步骤如下,
- 单击开始新对话
- bot 获取第一个 ConversationUpdate,memberAdd bot
- bot 获取第二个 ConversationUpdate,memberAdd 用户
- 用户输入文本
- bot获取用户输入文本
我想在第二次 ConversationUpdate 到来时向用户发送欢迎消息(包括用户名,如 hi,rainmaker 欢迎......)。欢迎消息将在用户在 azure webchat 中输入后发送。我该如何解决这个问题?
谢谢。
解决方案
这是这里发布的一个常见问题;是的,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...
}
}
推荐阅读
- three.js - three.js 用球体连接两个运动部件
- python - 当我调用 list.count() 函数时出现 AttributeError
- rust - 在 Substrate 的 decl_storage 宏中 impl trait X for Y as Z 是什么意思?
- mysql - SQL - 拥有 COUNT() 不能按预期工作
- python - 从 __init__.py 中的子模块导入函数而不暴露子模块
- python - 模型关系 - ForeignKey 或 OneToMany?
- c - 信用卡号码验证
- scala - 如何在不使用 UDF 的情况下将字符串列附加到 Scala Spark 中的数组字符串列?
- java - 将多个类写入一个 CSV 文件
- java - 覆盖方法和`List时的协变返回类型
'与'列表'