在 Bot Framework 中恢复对话会抛出 TypeError:无法在已撤销的代理上执行“设置”

问题描述 投票:0回答:1

我正在使用 Microsoft Teams Bot Framework 示例,特别是

bot-conversation

我想通过 websocket 将用户消息发布到后端,然后在收到回复时发布消息进行聊天。

我目前正在按如下方式连接机器人

class TeamsConversationBot extends TeamsActivityHandler {
    ws = null;

    constructor(adapter) {
        super();
        this.adapter = adapter;

        this.onMessage(async (context, next) => {
            //Outbound messages from user to back-end. Works fine.
            TurnContext.removeRecipientMention(context.activity);
            await context.sendActivity({ type: 'typing' });
            const text = context.activity.text.trim();

            await this.handleUserPrompt(context, text);
            await next();
        });


        this.ws = new WebSocket('wss://.../dev');
        this.ws.on('message', async (data) => {
            // Inbound message from back-end to user
            console.log('\nKhydra->Teams: ', data.toString('utf8'));
            const messageData = JSON.parse(data);
            await this.handleKhydraFragment(messageData);
        });
    }

这就是当我显示文本块时我试图重新补充对话的方式。

    async handleKhydraFragment(messageData) {
        const fragment = messageData.fragment;
        if ('textBlock' in fragment) {
            const claimsIdentity = await this.adapter.createClaimsIdentity(process.env.MicrosoftAppId);
            await this.adapter.continueConversationAsync(claimsIdentity, messageData.conversationReference, async (context) => {
                context.sendActivity(fragment.textBlock);
            });
        } else {
            console.log(fragment);
        }
    }

有趣的是,当带有 textBlock 的片段到达时,正确的文本

is
会发布到聊天中,但是,在那之后我立即得到

E:\Source\Microsoft-Teams-Samples\samples\bot-conversation\nodejs\node_modules\botbuilder-core\lib\turnContext.js:392
                    this.responded = true;
                                   ^

TypeError: Cannot perform 'set' on a proxy that has been revoked
    at Proxy.<anonymous> (E:\Robora\Source\Microsoft-Teams-Samples\samples\bot-conversation\nodejs\node_modules\botbuilder-core\lib\turnContext.js:392:36)
    at Generator.next (<anonymous>)
    at fulfilled (E:\Robora\Source\Microsoft-Teams-Samples\samples\bot-conversation\nodejs\node_modules\botbuilder-core\lib\turnContext.js:9:58)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

Node.js v18.15.0

我错过了什么?

javascript node.js botframework typeerror proactive-message
1个回答
0
投票

您似乎忘记等待

context.sendActivity()
来电。添加等待应该可以解决问题。

async handleKhydraFragment(messageData) {
        const fragment = messageData.fragment;
        if ('textBlock' in fragment) {
            const claimsIdentity = await this.adapter.createClaimsIdentity(process.env.MicrosoftAppId);
            await this.adapter.continueConversationAsync(claimsIdentity, messageData.conversationReference, async (context) => {
                // ADD AWAIT TO THE FOLLOWING LINE, LIKE SO
                await context.sendActivity(fragment.textBlock);
            });
        } else {
            console.log(fragment);
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.