Я работаю над чат-ботом Bot framework на канале msteams. В диалоговых окнах водопада, как требование для адаптивных карточек, мне нужно сохранить его значения (в INPUT.text) в msteams после нажатия кнопки отправки. Но msteams не сохраняет значения. В качестве обходного пути я попытался добавить адаптивную карточку в ActivityPrompt, и когда пользователь нажимает кнопку отправки, проверка активности подсказки гарантирует, что новые значения отправляются как действие обновления в старой карточке.
Код ниже объясняет, как я использовал ActivityPrompt в шаг водопада.
async W2_showCard(step) { //in the waterfall step
const card = CardFactory.adaptiveCard(Json_adaptivecard);
return await step.prompt('formPrompt', { prompt: MessageFactory.attachment(card) });
}
.addDialog(new ActivityPrompt('formPrompt', async prompt => { // validation involved in activityprompt
const recognizedValue = prompt.recognized.value;
console.log(prompt.recognized.value)
if (recognizedValue.type =='message') {
if (recognizedValue.value) {
const replyToId = recognizedValue.replyToId;
var oldCard = prompt.options.prompt.attachments[0];
console.log(oldCard)
var validated = true;
for(let i=0;i<oldCard.content.body[0].columns[0].items.length;++i){// replace values
if(oldCard.content.body[0].columns[0].items[i].type=="Input.Text"){
// preserve the user input
const newValue =
recognizedValue.value[oldCard.content.body[0].columns[0].items[i].id];
oldCard.content.body[0].columns[0].items[i].placeholder = newValue;
}
}
// update the card
const activity = prompt.context.activity;
activity.attachments = [oldCard];// issue due to attachment Multiple skyp act error.
activity.id = replyToId;
await prompt.context.updateActivity(activity); // issue is here
if (validated) {
// this is to make input available in next waterfall step
prompt.recognized.value = recognizedValue.value;
return true;
} else {
await prompt.context.sendActivity(`Please check the form. Some values are missing`);
}
} else {
await prompt.context.sendActivity(`Please fill out form and press *"submit"* button or type *"cancel"* to stop.`);
}
}
return false;
}))
Моя проблема в том, что при обновлении выдается ОШИБКА: Действие привело к нескольким действиям в Skype. При анализе мне удалось определить ошибку в activity.attachment = [oldcard].
Есть ли способ добавить вложение к текстовой активности без этой ошибки? Или почему prompt.context.activity - это текстовое действие, а не вложение, очевидно, я отправляю вложение в Activityprompt на этапе водопада
Любая помощь будет очень признательна.