根据此官方示例项目(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聊天和WebChat)时,仅发送一个活动(memberId与收件人ID相同),因此它永远不会超出if语句。
我在这里缺少什么,为什么从Azure聊天和WebChat仅发送一项活动?
答案 0 :(得分:2)
这时,在某些情况下,例如您描述的情况,WebChat和DirectLine的行为与模拟器不同。在这种特殊情况下,您可以找到open issue来找到更多信息。
如问题中所述,there is a workaround强制执行ConversationUpdate事件,您可以尝试测试该事件是否符合您的需求(我自己没有尝试过)。