Pra*_*hur 2 javascript node.js botframework
我有一个使用 NodeJS 使用 Bot Framework v4 开发的机器人,并部署在 Teams 中的多个渠道上。有没有办法更新机器人发送的消息?我尝试在 BotFrameworkAdapter 中实现 updateActivity() 函数。但是,它不会更新活动。
我已将这张卡从机器人发送到 Teams 频道。当有人点击按钮时,有没有办法更新卡片或消息(禁用按钮)?
关键是确保在使用 时updateActivity(),使用由 Teams 频道创建的正确活动 ID。您还需要确保更新的活动获取所有 Teams 数据集。
在 中onTurn,捕获传出活动,以便您可以轻松保存所有必要的 Teams 渠道数据:
public onTurn = async (turnContext: TurnContext) => {
turnContext.onSendActivities(async (ctx, activities, nextSend) => {
activities.forEach(async (activity) => {
if (activity.channelData.saveMe) {
this.savedActivity = activity;
}
});
return await nextSend();
});
Run Code Online (Sandbox Code Playgroud)
channelData、conversation信息和,activity.id实例化一些关键变量:
const teamsChannel = '19:8d60061c3d10xxxxxxxxxxxxxxxx@thread.skype';
const serviceUrl = 'https://smba.trafficmanager.net/amer/';
Run Code Online (Sandbox Code Playgroud)
activityserviceUrl可能因地理区域而异发送第一个活动并存储 ID:
// This ensures that your bot can send to Teams
turnContext.activity.conversation.id = teamsChannel;
turnContext.activity.serviceUrl = serviceUrl;
MicrosoftAppCredentials.trustServiceUrl(serviceUrl);
// Add the saveMe flag
yourActivity.channelData = { saveMe: true };
const response = await turnContext.sendActivity(yourActivity);
this.activityToUpdateId = response.id;
Run Code Online (Sandbox Code Playgroud)
更新您保存的活动:
// New data
const card2 = CardFactory.adaptiveCard(adaptiveCard2);
// Set the saved activity.id and new activity data (an adaptiveCard, in this example)
this.savedActivity.id = this.activityToUpdateId;
this.savedActivity.attachments = [card2];
Run Code Online (Sandbox Code Playgroud)
发送更新:
await turnContext.updateActivity(this.savedActivity);
Run Code Online (Sandbox Code Playgroud)
前:
后: