根据此官方示例项目(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仅发送一个活动?

最佳答案

目前,在某些情况下,如您描述的情况,WebChat和DirectLine的行为与模拟器不同。对于这种特殊情况,有一个open issue可以在其中找到更多信息。

如问题中所述,there is a workaround强制执行ConversationUpdate事件,您可以尝试测试该事件是否符合您的需求(我自己还没有尝试过)。

关于node.js - Bot Framework Emulator处理新成员与Bot Framework Webchat是否有所不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56056885/

10-11 04:39