Eseményvezérelt beszélgetések tevékenységkezelő használatával

A KÖVETKEZŐKRE VONATKOZIK: SDK v4

A tevékenységkezelő egy eseményvezérelt módszer a robot beszélgetési logikájának rendszerezésére. Minden különböző típusú vagy altevékenység más típusú beszélgetési eseményt jelöl. A háttérben a robot sorkezelője meghívja az egyes tevékenységkezelőt a kapott tevékenységtípushoz.

Ha például a robot üzenetet kap, a turn kezelője látni fogja a bejövő tevékenységet, és elküldi azt az üzenettevékenység-kezelőnek . A robot létrehozásakor az üzenetek kezelésére és megválaszolására szolgáló robotlogika ebben az üzenettevékenység-kezelőben jelenik meg. Hasonlóképpen, a beszélgetéshez hozzáadott tagok kezelésének logikája a taghoz hozzáadott kezelőben fog szerepelni, amelyet a rendszer akkor hív meg, amikor egy tagot hozzáadnak a beszélgetéshez.

A robotlogika rendszerezésének egyéb módjaiért tekintse meg a robotlogika szakaszt a robotok működéséről.

A kezelők logikájának implementálásához felül kell bírálnia ezeket a metódusokat a robotban, például az alábbi mintatevékenység-kezelő szakaszban. Ezen kezelők mindegyikéhez nincs alapimplementáció, ezért egyszerűen adja hozzá a felülbíráláshoz használni kívánt logikát.

Vannak olyan helyzetek, amikor felül szeretné bírálni az alapkörkezelőt, például menteni szeretné az állapotot a fordulás végén. Ebben az esetben először hívja await base.OnTurnAsync(turnContext, cancellationToken); meg, hogy a további kód előtt fusson az alapimplementáció OnTurnAsync . Ez az alapimplementáció többek között a többi tevékenységkezelő, például OnMessageActivityAsynca .

Tevékenységkezelés

A robotlogika feldolgozza egy vagy több csatorna bejövő tevékenységeit, és válaszként kimenő tevékenységeket hoz létre.

A robot fő logikája a robot kódjában van definiálva. A robot tevékenységkezelőként való implementálásához származtathatja a robotosztályt ActivityHandler, amely megvalósítja a IBot felületet. ActivityHandlerA különböző kezelőket határoz meg a különböző típusú tevékenységekhez, például OnMessageActivityAsynca .OnMembersAddedAsync Ezek a metódusok védettek, de felül is bírálhatók, mivel a ActivityHandlerforrásból származunk.

A következőkben definiált ActivityHandler kezelők:

Esemény Kezelő Leírás
Minden fogadott tevékenységtípus OnTurnAsync Meghívja a többi kezelő egyikét a fogadott tevékenység típusa alapján.
Fogadott üzenettevékenység OnMessageActivityAsync Felülbírálja ezt egy message tevékenység kezeléséhez.
Beszélgetésfrissítési tevékenység érkezett OnConversationUpdateActivityAsync Egy conversationUpdate tevékenység során meghív egy kezelőt, ha a roboton kívül más tagok is csatlakoztak a beszélgetéshez, vagy kilépnek a beszélgetésből.
Nem robottagok csatlakoztak a beszélgetéshez OnMembersAddedAsync Ezt felülbírálva kezelheti a beszélgetésbe bekapcsolódó tagokat.
Nem robottagok hagyták el a beszélgetést OnMembersRemovedAsync Felülbírálja ezt a beállítást a beszélgetésből kilépő tagok kezeléséhez.
Fogadott eseménytevékenység OnEventActivityAsync Egy event tevékenységen meghív egy eseménytípusra jellemző kezelőt.
Jogkivonat-válasz eseménytevékenység érkezett OnTokenResponseEventAsync Felülbírálja ezt a jogkivonat-válaszesemények kezeléséhez.
Nem jogkivonat-válasz eseménytevékenység érkezett OnEventAsync Ezt felülbírálhatja más típusú események kezeléséhez.
Üzenetválasz-tevékenység érkezett OnMessageReactionActivityAsync Egy messageReaction tevékenységen meghív egy kezelőt, ha egy vagy több reakciót adott hozzá vagy távolított el egy üzenetből.
Üzenethez adott reakciók OnReactionsAddedAsync Ezt felülbírálva kezelheti az üzenethez adott reakciókat.
Üzenetből eltávolított üzenetválaszok OnReactionsRemovedAsync Ezt felülbírálva kezelheti az üzenetből eltávolított reakciókat.
Telepítési frissítési tevékenység érkezett OnInstallationUpdateActivityAsync Egy installationUpdate tevékenység során meghív egy kezelőt attól függően, hogy a robot telepítve vagy eltávolítva lett-e.
Telepített robot OnInstallationUpdateAddAsync Ezt felülbírálva logikát adhat hozzá a robot szervezeti egységen belüli telepítésének időpontjához.
A robot el van távolítva OnInstallationUpdateRemoveAsync Ezt felülbírálva logikát adhat hozzá a robot szervezeti egységen belüli eltávolításának időpontjához.
Egyéb fogadott tevékenységtípus OnUnrecognizedActivityTypeAsync Ezt felülbírálva kezelhet minden más módon nem kezelt tevékenységtípust.

Ezek a különböző kezelők olyan információkkal rendelkeznek turnContext a bejövő tevékenységről, amely megfelel a bejövő HTTP-kérésnek. A tevékenységek különböző típusúak lehetnek, ezért minden kezelő erős típusú tevékenységet biztosít a saját környezetparaméterében; a legtöbb esetben OnMessageActivityAsync mindig a rendszer kezeli, és általában a leggyakoribb.

A keretrendszer korábbi 4.x verzióihoz hasonlóan a nyilvános metódus OnTurnAsyncimplementálása is lehetséges. Jelenleg ennek a metódusnak az alapimplementációja kezeli a hibaellenőrzést, majd meghívja az egyes kezelőket (például a mintában definiált kettőt) a bejövő tevékenység típusától függően. A legtöbb esetben ezt a módszert egyedül hagyhatja, és használhatja az egyes kezelőket, de ha a helyzethez egyéni implementációra OnTurnAsyncvan szükség, ez továbbra is lehetőség.

Fontos

Ha felülbírálja a metódust OnTurnAsync , az alapimplementáció lekéréséhez meg kell hívnia base.OnTurnAsync az összes többi On<activity>Async kezelőt, vagy saját maga kell meghívnia ezeket a kezelőket. Ellenkező esetben ezek a kezelők nem lesznek meghívva, és a kód nem lesz futtatva.

Mintatevékenység-kezelő

Kezelheti például azokat a tagokat , akik üdvözölhetik a felhasználókat egy beszélgetésben, és kezelheti az üzeneteket , hogy visszaküldje a robotnak küldött üzeneteket.

public class EchoBot : ActivityHandler
{
    protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
    {
        var replyText = $"Echo: {turnContext.Activity.Text}";
        await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken);
    }

    protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
    {
        var welcomeText = "Hello and welcome!";
        foreach (var member in membersAdded)
        {
            if (member.Id != turnContext.Activity.Recipient.Id)
            {
                await turnContext.SendActivityAsync(MessageFactory.Text(welcomeText, welcomeText), cancellationToken);
            }
        }
    }
}

Következő lépések

  • A Microsoft Teams csatorna néhány Teams-specifikus tevékenységet mutat be, amelyeket a robotnak támogatnia kell ahhoz, hogy megfelelően működjön Teams. A Microsoft Teams-robotok fejlesztésének fő fogalmait a robotok működésének Microsoft Teams című témakörben tekintheti meg.
  • A tevékenységkezelők kiválóan alkalmasak olyan robotok tervezésére, amelyeknek nem kell nyomon követnie a beszélgetési állapotot a fordulatok között. A párbeszédpaneltár lehetőséget nyújt a felhasználóval folytatott hosszú ideig tartó beszélgetések kezelésére.