node.js - Bot Framework Emulator 处理新成员的方式是否与 Bot Framework Webchat 不同?
问题描述
根据这个官方示例项目(https://github.com/microsoft/BotBuilder-Samples/blob/master/samples/typescript_nodejs/13.core-bot/src/bots/dialogAndWelcomeBot.ts)我可以识别新成员并发送使用此(我的代码)向他们发送欢迎信息:
this.onMembersAdded(async (context) => {
const welcomeCardTemplate = require("../lib/data/resources/cards/welcomeCard.json");
const membersAdded = context.activity.membersAdded;
for (const member of membersAdded) {
if (member.id !== context.activity.recipient.id) {
const welcomeCard = CardFactory.adaptiveCard(welcomeCardTemplate );
await context.sendActivity({ attachments: [welcomeCard] });
}
}
});
使用模拟器时效果很好。一旦我连接到聊天,我就会收到我的欢迎消息,但是当使用 Azure 上的聊天或 WebChat 时,直到我第一次在聊天中输入某种文本输入时才会触发它。
我注意到的一件事是,当我使用模拟器时,一旦我连接到聊天,两个活动就会发送到机器人,一个包含机器人的 ID,另一个包含用户的 ID,但是在使用其他聊天选项(Azure Chat 和 WebChat)只发送一个活动(其中 memberId 与 recipientId 相同),因此它永远不会超过 if 语句。
我在这里缺少什么,为什么 Azure 聊天和 WebChat 只发送一个活动?
解决方案
此时,WebChat 和 DirectLine 在某些场景(如您描述的场景)中的行为与模拟器不同。对于这种特殊情况,有一个未解决的问题,您可以在其中找到更多信息。
如问题中所述,有一种解决方法可以强制 ConversationUpdate 事件,您可以尝试测试它是否适合您的需求(我自己没有尝试过)。
推荐阅读
- java - 如何更改 JScrollPane 拇指颜色?
- c# - 如何使用 Lerp 根据鼠标单击位置移动对象?
- java - 使用 slick 和 lwjgl (JAVA) 将纹理裁剪为更小的纹理
- java - 如何将 Java 原始浮点数转换为 Kotlin 浮点数?
- c - c中函数调用中指向数组的指针
- c - 按 ID 在文本文件中搜索名称
- php - 如何检查在 PHP 中提交的表单
- c++ - C++ If/Else 语句被跳过
- python - 当映射不是一对一时,ctypes 如何将 C 结构成员映射到 Python 类_fields_?
- reactjs - 似乎无法使用 Expo 的 Font.loadAsync 加载自定义字体