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 .
A JavaScript ActivityHandler eseményemittert és figyelőmintát használ.
A metódus használatával onMessage például regisztrálhat egy eseményfigyelőt az üzenettevékenységekhez. Több figyelőt is regisztrálhat. Amikor a robot üzenetet kap, a tevékenységkezelő azt a bejövő tevékenységet látja, és elküldi az onMessage egyes tevékenységfigyelőknek a regisztrálásuk sorrendjében.
A robot létrehozásakor az üzenetek kezelésére és megválaszolására szolgáló robotlogika a onMessage figyelőkbe kerül. Hasonlóképpen, a beszélgetéshez hozzáadott tagok kezelésének logikája a onMembersAdded figyelőkben fog szerepelni, amelyeket a rendszer minden alkalommal meghív, amikor tagot adnak hozzá a beszélgetéshez.
A figyelők hozzáadásához regisztrálnia kell őket a robotban az alábbi Robotlogika szakaszban látható módon. Minden figyelőhöz mellékelje a robotlogikát, majd a végén mindenképpen hívja next() meg. A hívással next() meggyőződhet arról, hogy a következő figyelő fut.
A sor vége előtt mentse az állapotot . Ehhez felül kell bírálni a tevékenységkezelő run metódust, és menteni kell az állapotot a szülőmetódus run befejezése után.
Nincsenek olyan gyakori helyzetek, amikor felül szeretné bírálni az alapkörkezelőt, ezért legyen óvatos, ha ezt megkísérli.
Van egy speciális kezelő neve onDialog. A onDialog kezelő a végén, a többi kezelő futtatása után fut, és nincs egy bizonyos tevékenységtípushoz kötve. A fenti kezelőkhöz hasonlóan mindenképpen hívja next() meg, hogy a folyamat többi része be legyen fejezve.
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. Ezeknek a kezelőknek nincs alapimplementációja, ezért 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 super.onTurn(turnContext); meg, hogy a további kód előtt fusson az alapimplementáció onTurn . Ez az alapimplementáció többek között a többi tevékenységkezelő, például onMessageActivitya .
A robot létrehozásakor az üzenetek kezelésére és megválaszolására szolgáló robotlogika ebben a on_message_activity kezelőben lesz. Hasonlóképpen, a beszélgetéshez hozzáadott tagok kezelésének logikája a kezelőben on_members_added fog szerepelni, amelyet a rendszer akkor hív meg, amikor tagot adnak hozzá a beszélgetéshez.
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 a on_message_activity tevékenységkezelőnek.
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 super().on_turn(turnContext); meg, hogy a további kód előtt fusson az alapimplementáció on_turn . Ez az alapimplementáció többek között a többi tevékenységkezelő, például on_message_activitya .
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.
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 bővítse ki ActivityHandlera robotot. ActivityHandler A különböző eseményeket határoz meg a különböző típusú tevékenységekhez, és az eseményfigyelők regisztrálásával módosíthatja a robot viselkedését, például a következővel onMessage : és onConversationUpdate.
Ezekkel a metódusokkal regisztrálhat figyelőket az egyes eseménytípusokhoz:
Esemény
Regisztrációs módszer
Leírás
Minden fogadott tevékenységtípus
onTurn
Regisztrál egy figyelőt, amikor bármilyen tevékenység érkezik.
Fogadott üzenettevékenység
onMessage
Regisztrál egy figyelőt, amikor egy message tevékenység érkezik.
Beszélgetésfrissítési tevékenység érkezett
onConversationUpdate
Regisztrál egy figyelőt, amikor bármilyen conversationUpdate tevékenység érkezik.
A beszélgetésbe bekapcsolódott tagok
onMembersAdded
Regisztrál egy figyelőt arra vonatkozóan, hogy a tagok mikor csatlakoztak a beszélgetéshez, beleértve a robotot is.
A tagok kihagyták a beszélgetést
onMembersRemoved
Regisztrál egy figyelőt arra vonatkozóan, hogy a tagok mikor távoztak a beszélgetésből, beleértve a robotot is.
Üzenetválasz-tevékenység érkezett
onMessageReaction
Regisztrál egy figyelőt, amikor bármilyen messageReaction tevékenység érkezik.
Üzenethez adott reakciók
onReactionsAdded
Figyelőt regisztrál arra vonatkozóan, hogy mikor adnak hozzá reakciókat egy üzenethez.
Üzenetből eltávolított üzenetválaszok
onReactionsRemoved
Regisztrálja a figyelőt, hogy mikor távolítja el a rendszer a reakciókat egy üzenetből.
Fogadott eseménytevékenység
onEvent
Regisztrál egy figyelőt, amikor bármilyen event tevékenység érkezik.
Jogkivonat-válasz eseménytevékenység érkezett
onTokenResponseEvent
Regisztrál egy figyelőt arra az esetre, amikor egy tokens/response esemény érkezik.
Telepítési frissítési tevékenység érkezett
onInstallationUpdate
Regisztrál egy figyelőt, amikor bármilyen installationUpdate tevékenység érkezik.
Telepített robot
onInstallationUpdateAdd
Regisztrál egy figyelőt, amikor a robot telepítve van egy szervezeti egységben.
A robot el van távolítva
onInstallationUpdateRemove
Regisztrál egy figyelőt, amikor a robotot eltávolítják egy szervezeti egységen belül.
Egyéb fogadott tevékenységtípus
onUnrecognizedActivityType
Regisztrál egy figyelőt, ha az adott tevékenységtípus kezelője nincs definiálva.
A tevékenységkezelők befejeződtek
onDialog
A megfelelő kezelők befejezése után hívható meg.
Hívja meg a next folytatási függvényt az egyes kezelőktől a feldolgozás folytatásának engedélyezéséhez. Ha next nincs meghívva, a tevékenység feldolgozása véget ér.
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 Bot 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 onMessageActivitya .onMembersAdded 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
onTurn
Meghívja a többi kezelő egyikét a fogadott tevékenység típusa alapján.
Fogadott üzenettevékenység
onMessageActivity
Felülbírálja ezt egy message tevékenység kezeléséhez.
Beszélgetésfrissítési tevékenység érkezett
onConversationUpdateActivity
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
onMembersAdded
Ezt felülbírálva kezelheti a beszélgetésbe bekapcsolódó tagokat.
Nem robottagok hagyták el a beszélgetést
onMembersRemoved
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
onEventActivity
Egy event tevékenységen meghív egy eseménytípusra jellemző kezelőt.
Jogkivonat-válasz eseménytevékenység érkezett
onTokenResponseEvent
Felülbírálja ezt a jogkivonat-válaszesemények kezeléséhez.
Nem jogkivonat-válasz eseménytevékenység érkezett
onEvent
Ezt felülbírálhatja más típusú események kezeléséhez.
Üzenetválasz-tevékenység érkezett
onMessageReactionActivity
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
onReactionsAdded
Ezt felülbírálva kezelheti az üzenethez adott reakciókat.
Üzenetből eltávolított üzenetválaszok
onReactionsRemoved
Ezt felülbírálva kezelheti az üzenetből eltávolított reakciókat.
Telepítési frissítési tevékenység érkezett
onInstallationUpdate
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
onInstallationUpdateAdd
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
onInstallationUpdateRemove
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
onUnrecognizedActivityType
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 onMessageActivity mindig a rendszer kezeli, és általában a leggyakoribb.
Lehetőség van a nyilvános módszer onTurnimplementálására is. 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 onTurnvan szükség, ez továbbra is lehetőség.
Fontos
Ha felülbírálja a metódust onTurn , az alapimplementáció lekéréséhez meg kell hívnia super.onTurn az összes többi on<activity> 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.
A robot fő logikája a robot kódjában van definiálva. Ha egy robotot tevékenységkezelőként szeretne megvalósítani, származtathatja a robotosztályt ActivityHandler, amely pedig az absztrakt Bot osztályból származik. ActivityHandler A különböző kezelőket határoz meg a különböző típusú tevékenységekhez, például on_message_activity és on_members_added. 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
on_turn
Meghívja a többi kezelő egyikét a fogadott tevékenység típusa alapján.
Fogadott üzenettevékenység
on_message_activity
Felülbírálja ezt egy message tevékenység kezeléséhez.
Beszélgetésfrissítési tevékenység érkezett
on_conversation_update_activity
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
on_members_added_activity
Ezt felülbírálva kezelheti a beszélgetésbe bekapcsolódó tagokat.
Nem robottagok hagyták el a beszélgetést
on_members_removed_activity
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
on_event_activity
Egy event tevékenységen meghív egy eseménytípusra jellemző kezelőt.
Jogkivonat-válasz eseménytevékenység érkezett
on_token_response_event
Felülbírálja ezt a jogkivonat-válaszesemények kezeléséhez.
Nem jogkivonat-válasz eseménytevékenység érkezett
on_event_activity
Ezt felülbírálhatja más típusú események kezeléséhez.
Üzenetválasz-tevékenység érkezett
on_message_reaction_activity
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
on_reactions_added
Ezt felülbírálva kezelheti az üzenethez adott reakciókat.
Üzenetből eltávolított üzenetválaszok
on_reactions_removed
Ezt felülbírálva kezelheti az üzenetből eltávolított reakciókat.
Telepítési frissítési tevékenység érkezett
on_installation_update
Egy installationUpdate tevékenység során meghív egy kezelőt attól függően, hogy a robot telepítve van-e, vagy nincs-e használva.
Telepített robot
on_installation_update_add
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
on_installation_update_remove
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
on_unrecognized_activity_type
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 turn_context 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 on_message_activity mindig a rendszer kezeli, és általában a leggyakoribb.
A keretrendszer korábbi 4.x verzióihoz hasonlóan a nyilvános metódus on_turnimplementá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 on_turnvan szükség, ez továbbra is lehetőség.
Fontos
Ha felülbírálja a metódust on_turn , az alapimplementáció lekéréséhez meg kell hívnia super().on_turn az összes többi on_<activity> 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);
}
}
}
}
class EchoBot extends ActivityHandler {
constructor() {
super();
// See https://aka.ms/about-bot-activity-message to learn more about the message and other activity types.
this.onMessage(async (context, next) => {
const replyText = `Echo: ${ context.activity.text }`;
await context.sendActivity(MessageFactory.text(replyText, replyText));
// By calling next() you ensure that the next BotHandler is run.
await next();
});
this.onMembersAdded(async (context, next) => {
const membersAdded = context.activity.membersAdded;
const welcomeText = 'Hello and welcome!';
for (let cnt = 0; cnt < membersAdded.length; ++cnt) {
if (membersAdded[cnt].id !== context.activity.recipient.id) {
await context.sendActivity(MessageFactory.text(welcomeText, welcomeText));
}
}
// By calling next() you ensure that the next BotHandler is run.
await next();
});
}
}
class EchoBot(ActivityHandler):
async def on_members_added_activity(
self, members_added: [ChannelAccount], turn_context: TurnContext
):
for member in members_added:
if member.id != turn_context.activity.recipient.id:
await turn_context.send_activity("Hello and welcome!")
async def on_message_activity(self, turn_context: TurnContext):
return await turn_context.send_activity(
MessageFactory.text(f"Echo: {turn_context.activity.text}")
)
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.