WebHU - Programozási kérdések és válaszok

HIBA: A tevékenység több skype-tevékenységet eredményezett az ActivityPrompt frissítési tevékenysége során

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.


  • Köszönjük, hogy megkeresett minket. Kivizsgáljuk, és ha további információra van szükségünk, megkeressük. Üdvözlettel: Teams Platform 11.07.2020
  • Megnéznéd ezt a Github 14.07.2020
  • Elfogadható a válaszom? (Mivel többen is részt vesznek ebben a szálban, @ meg kell említened, ha szeretnéd, hogy lássam a válaszodat.) 18.07.2020

Válaszok:


1

Többnyire jó ötleted van, de soha ne használj egy bejövő tevékenységet kimenő tevékenységként. A prompt.context lesz a turn kontextus, így a prompt.context.activity a bejövő felhasználó-bot tevékenység, nem pedig az a tevékenység, amelyet a bot küldött a promptban. Ahelyett, hogy megpróbálná frissíteni a prompt tevékenységet a bejövő tevékenységgel, közvetlenül módosítania kell a prompt tevékenységet. Úgy tűnik, már rájött, hogyan érheti el ezt a tevékenységet a kód egy másik részében a prompt.options.prompt segítségével, így nem világos, hogy miért nem csinálja ezt következetesen.

Azt is szeretném megjegyezni, hogy érdemes beállítani a szövegbeviteli értékeket a helyőrzőik helyett, de a helyőrzők megfelelőek, ha ez a szándékod.

Érdekelheti egy közelgő csomag, a kártyakönyvtár. Itt fejezheti ki támogatását, hogy mielőbb megjelenjen: https://github.com/BotBuilderCommunity/botbuilder-community-dotnet/issues/137

13.07.2020
  • Nem tudom használni a prompt.options.prompt fájlt, le kell cserélnem a Felhasználók bejövő tevékenységi értékeit az adaptív kártyáról, mint helyőrző értékeket az előző kimenő kártyán. (prompt.options.prompt), miközben ezt teszem, a Több skype tevékenység hibaüzenet jelenik meg, és megérteni, hogy a bejövő tevékenység miatt nem volt a melléklet típusa. Azért megnézem közelebbről 14.07.2020
  • Hogy érted, hogy nem tudod használni a prompt.options.prompt-t? Ön már használja a prompt.options.prompt-t, és azt mondom, hogy következetesebben kell használnia. Tehát a const activity = prompt.context.activity; helyett a const 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ész attachments 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
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..