使用 NodeJS 的团队的 Microsoft 机器人在更新同一活动时失败,缺少 ActivityID



我的代码有一个简单的卡片轮播,它有如下所示的操作按钮:


actions = [
{
"type": "Action.Submit",
"title": "Qualify",
"data": { "action" : "qualify_lead" }
},
{
"type": "Action.OpenUrl",
"title": "Retire",
"url": "{viewUrl}"
},
{
"type": "Action.ShowCard",
"title": "Add Note",
"card":   this.noteCard(item.LeadId, "leads")
}
]

我有一种方法来处理如下所示qualify_lead操作

async qualifyLead(context:any){
console.log("in qualifyLead:" + JSON.stringify(context.activity))
await context.updateActivity(this.successCard('Lead is qualified'))
}

我故意做的只是用简单的短信替换整个轮播。但它失败并显示错误:

错误:BotFrameworkAdapter.updateActivity((:缺少 activity.id

我从哪里得到这个?

我为此使用谷歌火力基地,包装器代码如下所示

const {
TurnContext,
TeamsActivityHandler,
CardFactory,
AttachmentLayoutTypes,
ActionTypes
} = require('botbuilder');
class TeamsConversationBot extends TeamsActivityHandler {
constructor() {
super();
this.leadState = 
this.conversationState.createProperty('leadCarouselState');
this.onMessage(async (context:any, next:any) => {
TurnContext.removeRecipientMention(context.activity);
let msg = context.activity.text
const action = context.activity.value
let objNum = ''
let keyword = ''

if(msg === undefined && action === undefined)
msg  = 'help'
else if(msg !== undefined){
msg = msg.trim().toLowerCase()
if(msg.indexOf("help") > -1)
msg = 'help'
else{
if(msg.startsWith('lead')){
msg = 'lead'
} 
}
}
switch (msg) {
case 'lead':
await this.lead(context, userKey, platform)
break;
case 'qualify_lead':
await this.qualifyLead(context)
break;
}
await next();
});
}

我不确定this.successCard('Lead is qualified')到底是做什么的,但大概它返回了一个活动。据我所知,为了使此活动替换另一个活动,您需要设置其 Id 属性以匹配上一条消息。这意味着,当您发送上一条消息(即卡片(时,您需要捕获从上下文上的 send 方法返回的引用(例如进入机器人状态(,然后将其用于此新活动。

正如我在回答您的另一个问题时所解释的那样,您需要将活动 ID 保存在机器人状态中,然后将其应用于要发送的更新。机器人框架无法更新活动,除非你告诉它要更新哪个活动,并且你使用活动 ID 执行此操作。

这是保存 ID 的部分:

const dict = await this.carouselState.get(turnContext, {});
dict[batchId] = {
[KEYACTIVITYID]: response.id,
[KEYLEADS]: leads
};

这是将其应用于更新活动的部分:

const update = this.createCarousel(batchId, leads);
update.id = info[KEYACTIVITYID];

最新更新