我正在使用Microsoft Bot Framework v4
的NodeJs API。而且我的对话框没有硬编码在ActivityHandler
中,我只是从那里调用。我正在使用瀑布对话框。因此,当我尝试在Messenger(在Microsoft Bot框架上为Carousel card
)上显示HeroCard
时,它会成功显示,但是当我单击卡片上的任何按钮时,下一个对话框都没有响应。>
我试图处理onMessage
钩子,但是,它只是试图验证响应并抛出错误。
....
ListItems extends ComponentDialog {
constructor(userProfileState, conversionStateAccessor) {
super(LIST_ITEMS);
this.userState = userProfileState;
this.conversionState = conversionStateAccessor;
this.addDialog(new WaterfallDialog(LIST_ITEMS_DIALOG, [
this.sendItems.bind(this),
this.handleItems.bind(this)
]
));
this.initialDialogId = LIST_ITEMS_DIALOG;
}
async sendItems(step) {
.......
await step.context.sendActivity({ attachments: cards }); // this line is working
}
async handleItems(step) {
console.log(step.result) // the response is not in 'step.result.value' if i click a button on cards
}
感谢您的帮助
---- 我添加了更多详细信息 -----
我正在使用此模板来创建卡片
const card = CardFactory.heroCard('title', 'subtitle', ['imagelink'], [
{ type: ActionTypes.PostBack,
title: 'product 1',
value: 'product_1'
},
{ type: ActionTypes.PostBack,
title: 'product 1',
value: 'product_1'
},
]);
await context.sendActivity({ attachments: [card] });
可以成功创建汽车,但是问题是,在那之后,如果用户需要,我会发送提示让用户打开主菜单。
所以我这样寄给他们
await context.sendActivity({ attachments: [card] });
await step.prompt(LIST_ITEMS_MENU_PROMPT, menuPromptPayload);
如果用户单击卡片上的按钮,则会引发错误,因为我认为框架等待提示的答案。无法捕获卡按钮的有效载荷/
答案 0 :(得分:0)
您需要指示漫游器在sendActivity
中的sendItems
之后等待并返回响应。同样,如果您不告诉机器人继续运行,那么您将在handleItems
中遇到错误,因为除了控制台日志记录之外没有其他事情发生。
async sendItems(step) {
.......
await step.context.sendActivity({ attachments: cards });
// Tells the bot to wait. Normally, on `sendActivity`, it continues on to the next step.
// "DialogTurnStatus" can be found in the `botbuilder-dialogs` package.
return { status: DialogTurnStatus.waiting };
}
async handleItems(step) {
console.log(step.result);
return step.next(); // Tells the bot to continue to the next step.
}
希望有帮助!