A Bot framework chatboton dolgozom az msteams csatornán. A vízesés párbeszédablakban az Adaptív kártyák követelményeként meg kell őriznem értékeit (az INPUT.textben) az msteamsben, miután a küldés gombra kattintott. De az msteams nem tartja meg az értékeket. Megkerülő megoldásként megpróbáltam hozzáadni az adaptív kártyát az ActivityPrompthoz, és amikor a felhasználó rákattint a küldés gombra, a tevékenységprompt érvényesítése biztosítja, hogy az új értékek frissítési tevékenységként kerüljenek elküldésre a régi kártyán.
Az alábbi kód elmagyarázza, hogyan használtam az ActivityPromptot a vízesés lépésben.
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;
}))
A problémám az, hogy a frissítési tevékenység a HIBA üzenetet adja: A tevékenység több skype-tevékenységet eredményezett. Az elemzés során sikerült meghatároznom a hibát az activity.attachment=[régi kártya] helyen.
Van-e mód a szöveges tevékenységhez mellékletet hozzáadni anélkül, hogy ez a hiba előfordulna? Vagy miért van a prompt.context.activity szöveges tevékenység melléklet helyett,egyértelmű, hogy mellékletet küldök az actionpromptban a waterfallstepben
Bármilyen segítséget nagyra értékelnénk.
prompt.options.prompt
-t? Ön már használja aprompt.options.prompt
-t, és azt mondom, hogy következetesebben kell használnia. Tehát aconst activity = prompt.context.activity;
helyett aconst activity = prompt.options.prompt;
értéket kellene használnia. Lehet, hogy még jobb lenne egy teljesen új tevékenység létrehozása, mivel úgyis át kell rendelni az egészattachments
tulajdonságot. A lényeg az, hogy a bejövő tevékenységet ne így használd. Tisztáznád, hogy a válaszom melyik részét nem érted? 14.07.2020