Node.js 错误:活动在ActivityPrompt中的updateactivity上导致多个skype活动

Node.js 错误:活动在ActivityPrompt中的updateactivity上导致多个skype活动,node.js,botframework,microsoft-teams,adaptive-cards,Node.js,Botframework,Microsoft Teams,Adaptive Cards,Iam正在msteams频道上开发Bot框架chatbot。 在瀑布对话框中, 作为自适应卡中的一项要求,单击提交按钮后,我需要在MSTeam中保留其值(在INPUT.text中)。 但微软团队并没有保留这些价值观。作为一种解决方法,我尝试在ActivityPrompt中添加自适应卡,当用户单击提交按钮时,ActivityPrompt验证确保新值作为更新活动发送到旧卡中 下面的代码解释了我如何在瀑布步骤中使用ActivityPrompt async W2_showCard(step) {

Iam正在msteams频道上开发Bot框架chatbot。 在瀑布对话框中, 作为自适应卡中的一项要求,单击提交按钮后,我需要在MSTeam中保留其值(在INPUT.text中)。 但微软团队并没有保留这些价值观。作为一种解决方法,我尝试在ActivityPrompt中添加自适应卡,当用户单击提交按钮时,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(新的ActivityPrompt('formPrompt',async prompt=>{//ActivityPrompt中涉及的验证
const recognizedValue=prompt.recognized.value;
console.log(prompt.recognized.value)
if(recognizedValue.type=='message'){
如果(识别值.value){
const replyToId=recognizedValue.replyToId;
var oldCard=prompt.options.prompt.attachments[0];
控制台日志(旧卡)
var=true;

对于(假设i=0;i您的想法基本正确,但是您不应该将传入活动用作传出活动。
prompt.context
将是turn上下文,因此
prompt.context.activity
将是bot活动的传入用户,而不是bot在提示符中发送的活动。而不是尝试更新提示符ac。)对于传入活动,您应该直接修改提示活动。似乎您已经知道如何使用
prompt.options.prompt
在代码的另一部分中访问该活动,因此不清楚您为什么不一致地这样做

我还想指出的是,您可能希望设置文本输入的值,而不是它们的占位符,但是占位符是可以的,如果这是您的意图的话


您可能对即将推出的名为“卡片库”的软件包感兴趣。您可以在此处表达您对该软件包的支持,以便尽快发布:

感谢您联系我们,我们将进行调查,如果我们需要更多信息,我们将联系您。向您致意,团队平台您能看看我的回答吗?(由于此线程中有多个其他人,如果您想让我看到您的答复,您需要@提及我。)我无法使用prompt.options.prompt,我需要将自适应卡中的用户传入活动值替换为前一张传出卡中的占位符值。(prompt.options.prompt)在执行此操作时,我收到多个skype活动错误,我知道这是因为传入的活动没有附件类型。我将仔细看看,您不能使用
prompt.options.prompt是什么意思?您已经在使用
prompt.options.prompt
,我是说您应该更一致地使用它因此,您应该使用
const activity=prompt.context.activity;
而不是
const activity=prompt.options.prompt;
创建一个全新的活动可能更好,因为您正在重新分配整个
附件
属性。关键是,您不应该像使用你能澄清一下我的回答中你不明白的部分吗?
.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;

        }))