Sdílet prostřednictvím


Konverzace řízené událostmi pomocí obslužné rutiny aktivity

PLATÍ PRO: SDK v4

Obslužná rutina aktivity je způsob uspořádání konverzační logiky robota řízený událostmi. Každý jiný typ nebo podtyp aktivity představuje jiný typ konverzační události. V rámci krytu obslužná rutina otáčení robota volá obslužnou rutinu jednotlivých aktivit pro jakýkoli typ aktivity, kterou přijal.

Pokud například robot obdrží aktivitu zprávy, obslužná rutina otáčení uvidí, že příchozí aktivita a odešle ji obslužné rutině aktivity zprávy. Při sestavování robota bude logika robota pro zpracování zpráv a odpovídání na zprávy v této obslužné rutině aktivity zprávy. Logika pro zpracování členů přidaných do konverzace bude ve vaší obslužné rutině přidané členy, která se volá při každém přidání člena do konverzace.

Další způsoby uspořádání logiky robota najdete v části logiky robota v tom, jak roboti fungují.

Poznámka:

Sady SDK služby Bot Framework JavaScript, C# a Python budou nadále podporovány, ale sada Java SDK se vyřazuje s konečnou dlouhodobou podporou končící v listopadu 2023.

Stávající roboti sestavení pomocí sady Java SDK budou i nadále fungovat.

Při vytváření nových robotů zvažte použití aplikace Microsoft Copilot Studio a přečtěte si o výběru správného řešení copilotu.

Další informace najdete v tématu Budoucnost vytváření robotů.

Pokud chcete implementovat logiku pro tyto obslužné rutiny, přepíšete tyto metody v robotovi, například v části obslužné rutiny ukázkové aktivity níže. Pro každý z těchto obslužných rutin neexistuje žádná základní implementace, takže stačí do přepsání přidat logiku, kterou chcete použít.

Existují určité situace, kdy budete chtít přepsat obslužnou rutinu základního turnu, například uložit stav na konci turnu. Při tom nezapomeňte nejprve zavolat await base.OnTurnAsync(turnContext, cancellationToken); , aby se před dalším kódem spustila základní implementace OnTurnAsync . Tato základní implementace je mimo jiné zodpovědná za volání ostatních obslužných rutin aktivit, jako OnMessageActivityAsyncje .

Zpracování aktivit

Logika robota zpracovává příchozí aktivity z jednoho nebo více kanálů a generuje odchozí aktivity v reakci.

Hlavní logika robota je definovaná v kódu robota. Chcete-li implementovat robota jako obslužnou rutinu aktivity, odvodit třídu robota z ActivityHandler, která implementuje IBot rozhraní. ActivityHandler definuje různé obslužné rutiny pro různé typy aktivit, například OnMessageActivityAsync, a OnMembersAddedAsync. Tyto metody jsou chráněné, ale lze je přepsat, protože pocházíme z ActivityHandler.

Obslužné rutiny definované v ActivityHandler :

Událost Obslužná rutina Popis
Všechny přijaté typy aktivit OnTurnAsync Zavolá jeden z dalších obslužných rutin na základě typu přijaté aktivity.
Přijatá aktivita zprávy OnMessageActivityAsync Tuto možnost přepište, aby se zpracovávala message aktivita.
Přijatá aktivita aktualizace konverzace OnConversationUpdateActivityAsync Při aktivitě conversationUpdate volá obslužnou rutinu, pokud se členové kromě robota připojili nebo opustili konverzaci.
Členové, kteří nejsou roboti, se připojili ke konverzaci OnMembersAddedAsync Přepište ho, aby se členové připojili ke konverzaci.
Členové, kteří nejsou roboti, opustili konverzaci. OnMembersRemovedAsync Přepište to tak, aby členové opustili konverzaci.
Přijatá aktivita události OnEventActivityAsync Při aktivitě event volá obslužnou rutinu specifickou pro typ události.
Přijatá aktivita události odpovědi tokenu OnTokenResponseEventAsync Přepište ho, aby se zpracovávaly události odezvy tokenu.
Přijatá aktivita události bez tokenu odpovědi OnEventAsync Přepište ho tak, aby zpracovával jiné typy událostí.
Přijatá aktivita reakce na zprávu OnMessageReactionActivityAsync Při aktivitě messageReaction volá obslužnou rutinu, pokud byla přidána nebo odebrána jedna nebo více reakcí ze zprávy.
Reakce na zprávu přidané do zprávy OnReactionsAddedAsync Přepište ho tak, aby zpracovával reakce přidané do zprávy.
Reakce na zprávy odebrané ze zprávy OnReactionsRemovedAsync Přepište ho tak, aby zpracovával reakce odebrané ze zprávy.
Přijatá aktivita aktualizace instalace OnInstallationUpdateActivityAsync Při aktivitě installationUpdate volá obslužnou rutinu na základě toho, jestli byl robot nainstalován nebo odinstalován.
Nainstalovaný robot OnInstallationUpdateAddAsync Tuto možnost přepište, pokud chcete přidat logiku, když je robot nainstalovaný v organizační jednotce.
Odinstalovaný robot OnInstallationUpdateRemoveAsync Tuto možnost přepište, pokud chcete přidat logiku, když je robot odinstalován v rámci organizační jednotky.
Byl přijat jiný typ aktivity. OnUnrecognizedActivityTypeAsync Přepište ho tak, aby zpracovával jakýkoli typ aktivity, jinak neošetřený.

Tyto různé obslužné rutiny mají turnContext informace o příchozí aktivitě, která odpovídá příchozímu požadavku HTTP. Aktivity mohou být různých typů, takže každá obslužná rutina poskytuje aktivitu silného typu v kontextu parametru. ve většině případů OnMessageActivityAsync se bude vždy zpracovávat a obvykle se jedná o nejběžnější.

Stejně jako v předchozích verzích 4.x této architektury existuje také možnost implementovat veřejnou metodu OnTurnAsync. Základní implementace této metody v současné době zpracovává kontrolu chyb a potom volá všechny konkrétní obslužné rutiny (podobně jako ty dva, které definujeme v této ukázce) v závislosti na typu příchozí aktivity. Ve většině případů můžete tuto metodu ponechat samostatně a používat jednotlivé obslužné rutiny, ale pokud vaše situace vyžaduje vlastní implementaci OnTurnAsync, je to stále možnost.

Důležité

Pokud přepíšete metodu OnTurnAsync , budete muset zavolat base.OnTurnAsync základní implementaci, aby volala všechny ostatní On<activity>Async obslužné rutiny nebo volala tyto obslužné rutiny sami. Jinak se tyto obslužné rutiny nevolají a tento kód se nespustí.

Obslužná rutina ukázkové aktivity

Můžete například zpracovat členy přidané pro vítání uživatelů v konverzaci a zpracovat zprávu , která vrací zprávy, které odesílají robotovi.

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);
            }
        }
    }
}

Další kroky

  • Kanál Microsoft Teams představuje některé aktivity specifické pro Teams, které robot bude muset podporovat, aby správně fungoval s Teams. Vysvětlení klíčových konceptů vývoje robotů pro Microsoft Teams najdete v tématu Jak fungují roboti Microsoft Teams.
  • Obslužná rutina aktivity je dobrým způsobem, jak navrhnout robota, který nemusí sledovat konverzační stav mezi otočeními. Knihovna dialogových oken poskytuje způsoby správy dlouhotrvající konverzace s uživatelem.