Bot Framework v4 - 启动与用户的聊天(主动信息)。

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

我想和一个用户开始对话,但他已经和机器人聊天了。

我正在进行B获取 conversationId 当用户安装机器人应用为 在此提及

我在这里怎么抓 referenceserviceUrl 借用 processActivity 事件

那我就用 continueConversation + reference

const {
    BotFrameworkAdapter,
} = require('botbuilder');
const adapter = new BotFrameworkAdapter({
    appId: "xxxx",
    appPassword: "xxxxy"
})
module.exports = async function(context, req) {
    console.log(adapter);
    try {

        adapter.processActivity(req, context.res, async (turnContext) => {
            const reference = turnContext.activity.conversation.id
            const serviceUrl = turnContext.activity.serviceUrl

            await adapter.continueConversation(reference, async (turnContext) => {
                try {
                    await turnContext.sendActivity("this is proacive message");

                } catch (e) {
                    console.log(e)
                }
            });

        });
    } catch (e) {
        console.log(e)
    }
    return;
};

我得到了这个错误

Error: BotFrameworkAdapter.sendActivity(): missing serviceUrl.

我已经检查了 turnContext.activity 值。我得到。 {"type":"event","name":"continueConversation"}" 其他所有的值都是未定义的(serviceUrl也是)。

我注意到 turnContext.activity里面 adapter.processActivity 殊途同归 adapter.continueConversation 而拥有 serviceUrlconversationId

我如何编辑这个代码示例,以便能够向用户发送主动消息?

javascript azure botframework azure-bot-service
1个回答
2
投票

如果你是在BotFrameworkAdapter.continueConversation()中使用ConversationReference,那么const引用需要是ConversationReference而不仅仅是Id。

ConversationReference可以通过使用以下方法来检索。

const reference = TurnContext.getConversationReference(turnContext.activity);

https:/docs.microsoft.comen-usjavascriptapibotbuilderbotframeworkadapter?view=botuilder-ts-latest#continueconversation-partial-conversationreference--context--turncontext--promise-void---。

https:/docs.microsoft.comen-usjavascriptapibotbuilder-coreturncontext?view=botuilder-ts-latest#getconversationreference-partial-activity--。

© www.soinside.com 2019 - 2024. All rights reserved.