【问题标题】:ms bot framework onMembersAddedActivity does not get invoked using nodejs没有使用 nodejs 调用 ms bot 框架 onMembersAddedActivity
【发布时间】:2020-10-15 18:33:01
【问题描述】:

我正在使用带有 ms bot 框架的 nodejs 谷歌云功能。我的调用代码如下所示:

const BotFrameworkAdapter = require('botbuilder').BotFrameworkAdapter
const { TeamsConversationBot } = require('./flashmsteamsbot');

const msadapter = new BotFrameworkAdapter({
    appId: 'XXX',
    appPassword: 'XXX'
});

const msteamsbot = new TeamsConversationBot()

const app = express();
app.post('/api/messages', (req:any, res:any) => {
    msadapter.processActivity(req, res, async (context:any) => {
        // Route to main dialog.
       await msteamsbot.run(context)
    });
});

团队类如下所示:

const {
    TurnContext,
    TeamsActivityHandler,
    CardFactory,
    AttachmentLayoutTypes,
    ActionTypes
} = require('botbuilder');

class TeamsConversationBot extends TeamsActivityHandler {
    constructor() {
        super();

        this.onMessage(async (context:any, next:any) => {
            TurnContext.removeRecipientMention(context.activity);
            
            let msg = context.activity.text
            const senderId = context.activity.from.aadObjectId 
           
            switch (msg) {
                case 'don1': 
                        await this.don1(context, keyword.trim(), userKey)
                        break;
                default:
                            await this.help(context)
                            break;
            }
            await next();
        });

        this.onMembersAddedActivity(async (context:any, next:any) => {
            functions.logger.log("start of onMembersAddedActivity", context)
            context.activity.membersAdded.forEach(async (teamMember:any) => {
                if (teamMember.id !== context.activity.recipient.id) {
                    await context.sendActivity(`Welcome to the team ${ teamMember.givenName } ${ teamMember.surname }`);
                }
            });
            await next();
        });
    }

每当我向机器人发送消息时,都会调用 this.onMessage。但是,当我将新成员添加到我的机器人已经存在的组时,不会调用 onMembersAddedActivity。我在这里缺少什么?

【问题讨论】:

    标签: node.js botframework microsoft-teams


    【解决方案1】:

    这部分是我们的文档和代码 cmets 中的 an issue,我分别提到了 herehere。另一个问题是您使用的是<method>Activity() 而不是<method>Event()

    最新的说明在code comments,刚刚合并,但基本上,

    开发人员可以通过两种方法处理从 Microsoft Teams 发送的对话更新活动:

    1. 覆盖以on.. 开头且..Event() 结尾的方法(例如onTeamsMembersAdded()),或者改为
    2. 将回调传递给以on.. 开头的方法...Event() 结尾的方法(例如onTeamsMembersAddedEvent()), 与旧的 {@link ActivityHandler} 实现保持一致。

    开发人员应该对所有对话更新活动使用上述#1 或#2,而不是同时#2 和#3 用于同一活动。意义, 开发者应该覆盖onTeamsMembersAdded(),而不是同时使用onTeamsMembersAdded()onTeamsMembersAddedEvent()

    想要处理 Invoke 活动的开发人员必须覆盖以 handle...() 开头的方法(例如 handleTeamsTaskModuleFetch())。

    所以,对你来说,你可以:

    constructor() {
        [...]
        // This is passing in a callback
        this.onTeamsMembersAddedEvent(async (
                membersAdded: TeamsChannelAccount[],
                teamInfo: TeamInfo,
                context: TurnContext,
                next: () => Promise<void>) => {
            functions.logger.log("start of onMembersAddedActivity", context)
            context.activity.membersAdded.forEach(async (teamMember:any) => {
                if (teamMember.id !== context.activity.recipient.id) {
                    await context.sendActivity(`Welcome to the team ${ teamMember.givenName } ${ teamMember.surname }`);
                }
            });
            await next();
        });
    }
    

    constructor() {
        [...]
    }
    
    [...]
    
    // This is an override
    async onTeamsMembersAdded(context: TurnContext): Promise<void> {
        functions.logger.log("start of onMembersAddedActivity", context)
        context.activity.membersAdded.forEach(async (teamMember:any) => {
            if (teamMember.id !== context.activity.recipient.id) {
                await context.sendActivity(`Welcome to the team ${ teamMember.givenName } ${ teamMember.surname }`);
            }
        });
    }
    

    【讨论】:

    • 我现在收到 TypeError: Cannot read property 'membersAdded' of undefined
    • 我的错误。我有 onTeamsMembersAddedEvent() 的方法签名错误。查看更新的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 2017-12-07
    相关资源
    最近更新 更多