A tevékenységkezelő eseményvezérelt módszer a robot beszélgetési logikájának rendszerezésére.
A tevékenység minden különböző típusa vagy altípusa más típusú beszélgetési eseményt jelöl.
A borítók alatt a robot turn handlerje meghívja az egyes tevékenységkezelőt bármilyen típusú tevékenységhez, amelyet kapott.
Ha például a robot üzenettevékenységet kap, a turn handler 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 tagok által hozzáadott kezelőben jelenik meg, amelyet a rendszer akkor hív meg, amikor hozzáad egy tagot 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.
Feljegyzés
A Bot Framework JavaScript, C# és Python SDK-k továbbra is támogatottak lesznek, a Java SDK-t azonban 2023 novemberében végső hosszú távú támogatással kivonják.
A Java SDK-val létrehozott meglévő robotok továbbra is működni fognak.
Új robotépítéshez fontolja meg a Power Virtual Agents használatát, és olvassa el a megfelelő csevegőrobot-megoldás kiválasztását.
Ezeknek a kezelőknek a logikájának implementálásához felül kell bírálnia ezeket a módszereket a robotban, például az alábbi mintatevékenység-kezelő szakaszban. Mindegyik kezelő esetében nincs alap implementá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 alapfordulat kezelőt, például az állapot mentését egy forduló végén. Ha így tesz, mindenképpen először hívja await base.OnTurnAsync(turnContext, cancellationToken); meg, hogy a további kód előtt fut-e az alap implementáció OnTurnAsync . Ez az alap implementá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 üzenettevékenységet kap, a tevékenységkezelő látni fogja a bejövő tevékenységet, é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 figyelőkben onMembersAdded is megjelenik, amelyeket a rendszer meghív, amikor hozzáad egy tagot 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 adja meg a robotlogikát, majd a végén mindenképpen hívjonnext(). A hívással next()győződjön meg arról, hogy a következő figyelő fut.
A forduló vége előtt mindenképpen mentse az állapotot . Ehhez felül kell bírálni a tevékenységkezelő run metódust és menteni az állapotot a szülő metódusának run befejezése után.
Nincsenek olyan gyakori helyzetek, amikor felül szeretné bírálni az alap turn kezelőt, ezért legyen óvatos, ha megpróbálja.
Van egy speciális kezelő, a neve onDialog. A onDialog kezelő a végén fut, a többi kezelő futtatása után, é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 csomagolva.
Ezeknek a kezelőknek a logikájának implementálásához felül kell bírálnia ezeket a módszereket a robotban, például az alábbi mintatevékenység-kezelő szakaszban. Ezeknek a kezelőknek nincs alap implementá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 alapfordulat kezelőt, például az állapot mentését egy forduló végén. Ha így tesz, először hívja super.onTurn(turnContext); meg, hogy a további kód előtt fut-e az alap implementáció onTurn . Ez az alap implementá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ére vonatkozó logikája a kezelőben on_members_added lesz, amelyet a rendszer meghív, amikor hozzáad egy tagot a beszélgetéshez.
Ha például a robot üzenetet kap, a turn handler látni fogja a bejövő tevékenységet, és elküldi azt a on_message_activity tevékenységkezelőnek.
Ezeknek a kezelőknek a logikájának implementálásához felül kell bírálnia ezeket a módszereket a robotban, például az alábbi mintatevékenység-kezelő szakaszban. Mindegyik kezelő esetében nincs alap implementá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 alapfordulat kezelőt, például az állapot mentését egy forduló végén. Ha így tesz, mindenképpen először hívja await super().on_turn(turnContext); meg, hogy a további kód előtt fut-e az alap implementáció on_turn . Ez az alap implementáció többek között a többi tevékenységkezelő, például on_message_activitya .
Tevékenységkezelés
A robotlogika egy vagy több csatornáról dolgozza fel a bejövő tevékenységeket, és válaszként kimenő tevékenységeket hoz létre.
A fő robotlogika a robotkódban 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. ActivityHandlerkü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 következőből ActivityHandlerszármazunk: .
A definiált ActivityHandler kezelők a következő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.
Üzenettevékenység érkezett
OnMessageActivityAsync
Ezt felülbírálhatja 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 robottól eltérő tagok csatlakoztak vagy kiléptek a beszélgetésből.
Nem robot tagok csatlakoztak a beszélgetéshez
OnMembersAddedAsync
Ezt felülbírálhatja a beszélgetésbe bekapcsolódó tagok kezeléséhez.
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.
Eseménytevékenység érkezett
OnEventActivityAsync
Egy event tevékenységen az eseménytípusra jellemző kezelőt hív meg.
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
Felülbírálhatja ezt más típusú események kezelésére.
Üzenetreakció-tevékenység érkezett
OnMessageReactionActivityAsync
Egy messageReaction tevékenységen meghív egy kezelőt, ha egy vagy több reakciót adtak hozzá vagy távolítottak el egy üzenetből.
Üzenethez hozzáadott üzenetválaszok
OnReactionsAddedAsync
Felülbírálja ezt az üzenethez hozzáadott reakciók kezeléséhez.
Üzenetből eltávolított üzenetválaszok
OnReactionsRemovedAsync
Felülbírálhatja ezt az üzenetből eltávolított reakciók kezeléséhez.
Telepítésfrissítési tevékenység érkezett
OnInstallationUpdateActivityAsync
Egy installationUpdate tevékenységen egy kezelőt hív meg attól függően, hogy a robot telepítve vagy eltávolítva lett-e.
Robot telepítve
OnInstallationUpdateAddAsync
Felülbírálhatja ezt a logikát, ha a robot egy szervezeti egységen belül van telepítve.
Robot eltávolítása
OnInstallationUpdateRemoveAsync
Ezt felülbírálva logikát adhat hozzá, ha a robotot eltávolítják egy szervezeti egységen belül.
Egyéb fogadott tevékenységtípus
OnUnrecognizedActivityTypeAsync
A művelet felülbírálása az egyébként kezeletlen tevékenységtípusok kezeléséhez.
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 környezet paraméterében; a legtöbb esetben OnMessageActivityAsync mindig kezelik, és általában a leggyakoribb.
A keretrendszer korábbi 4.x verzióihoz hasonlóan lehetőség van a nyilvános metódus OnTurnAsyncimplementálására is. A metódus alap implementációja jelenleg a hibaellenőrzést kezeli, 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 egyedül hagyhatja ezt a metódust, é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 OnTurnAsync metódust, az alap implementáció lekéréséhez meg kell hívnia base.OnTurnAsync az összes többi On<activity>Async kezelőt, vagy magát a kezelőket. Ellenkező esetben ezek a kezelők nem lesznek meghívva, és a kód nem lesz futtatva.
A fő robotlogika a robotkódban van definiálva. A robot tevékenységkezelőként való implementálásához bővítse ki ActivityHandler. ActivityHandler Különböző eseményeket határoz meg a különböző típusú tevékenységekhez, és módosíthatja a robot viselkedését az eseményfigyelők regisztrálásával, például a következőkkel onMessage és onConversationUpdatea .
Az alábbi módszerekkel 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.
Üzenettevékenység érkezett
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.
Tagok csatlakoztak a beszélgetéshez
onMembersAdded
Regisztrál egy figyelőt, amikor a tagok csatlakoztak a beszélgetéshez, beleértve a robotot is.
A tagok kilépnek a beszélgetésből
onMembersRemoved
Regisztrál egy figyelőt, amikor a tagok kiléptek a beszélgetésből, beleértve a robotot is.
Üzenetreakció-tevékenység érkezett
onMessageReaction
Regisztrál egy figyelőt, amikor bármilyen messageReaction tevékenység érkezik.
Üzenethez hozzáadott üzenetválaszok
onReactionsAdded
Regisztrálja a figyelőt, hogy mikor adnak hozzá reakciókat egy üzenethez.
Üzenetből eltávolított üzenetválaszok
onReactionsRemoved
Regisztrálja a figyelőt arra az állapotra, amikor a rendszer eltávolítja a reakciókat egy üzenetből.
Eseménytevékenység érkezett
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, ha egy tokens/response esemény érkezik.
Telepítésfrissítési tevékenység érkezett
onInstallationUpdate
Regisztrál egy figyelőt, amikor bármilyen installationUpdate tevékenység érkezik.
Robot telepítve
onInstallationUpdateAdd
Regisztrál egy figyelőt arra az állapotra, amikor a robot telepítve van egy szervezeti egységen belül.
Robot eltávolítása
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 nincs meghatározva egy kezelő az adott tevékenységtípushoz.
A tevékenységkezelők befejeződtek
onDialog
A megfelelő kezelők befejezése után hívható meg.
A feldolgozás folytatásának engedélyezéséhez hívja meg az next egyes kezelők folytatási függvényét. Ha next nincs meghívva, a tevékenység feldolgozása véget ér.
A fő robotlogika a robotkódban 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. ActivityHandlerkü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 következőből ActivityHandlerszármazunk: .
A definiált ActivityHandler kezelők a következő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.
Üzenettevékenység érkezett
onMessageActivity
Ezt felülbírálhatja 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 robottól eltérő tagok csatlakoztak vagy kiléptek a beszélgetésből.
Nem robot tagok csatlakoztak a beszélgetéshez
onMembersAdded
Ezt felülbírálhatja a beszélgetésbe bekapcsolódó tagok kezeléséhez.
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.
Eseménytevékenység érkezett
onEventActivity
Egy event tevékenységen az eseménytípusra jellemző kezelőt hív meg.
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
Felülbírálhatja ezt más típusú események kezelésére.
Üzenetreakció-tevékenység érkezett
onMessageReactionActivity
Egy messageReaction tevékenységen meghív egy kezelőt, ha egy vagy több reakciót adtak hozzá vagy távolítottak el egy üzenetből.
Üzenethez hozzáadott üzenetválaszok
onReactionsAdded
Felülbírálja ezt az üzenethez hozzáadott reakciók kezeléséhez.
Üzenetből eltávolított üzenetválaszok
onReactionsRemoved
Felülbírálhatja ezt az üzenetből eltávolított reakciók kezeléséhez.
Telepítésfrissítési tevékenység érkezett
onInstallationUpdate
Egy installationUpdate tevékenységen egy kezelőt hív meg attól függően, hogy a robot telepítve vagy eltávolítva lett-e.
Robot telepítve
onInstallationUpdateAdd
Felülbírálhatja ezt a logikát, ha a robot egy szervezeti egységen belül van telepítve.
Robot eltávolítása
onInstallationUpdateRemove
Ezt felülbírálva logikát adhat hozzá, ha a robotot eltávolítják egy szervezeti egységen belül.
Egyéb fogadott tevékenységtípus
onUnrecognizedActivityType
A művelet felülbírálása az egyébként kezeletlen tevékenységtípusok kezeléséhez.
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 környezet paraméterében; a legtöbb esetben onMessageActivity mindig kezelik, és általában a leggyakoribb.
Lehetőség van a nyilvános metódus onTurnimplementálására is. A metódus alap implementációja jelenleg a hibaellenőrzést kezeli, 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 egyedül hagyhatja ezt a metódust, é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 onTurn metódust, az alap implementáció lekéréséhez meg kell hívnia super.onTurn az összes többi on<activity> kezelőt, vagy magát a kezelőket. Ellenkező esetben ezek a kezelők nem lesznek meghívva, és a kód nem lesz futtatva.
A fő robotlogika a robotkódban van definiálva. A robot tevékenységkezelőként való implementálásához származtathatja a robotosztályt ActivityHandler, amely viszont az absztrakt Bot osztályból származik. ActivityHandler különböző kezelőket határoz meg 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 következőből ActivityHandlerszármazunk: .
A definiált ActivityHandler kezelők a következő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.
Üzenettevékenység érkezett
on_message_activity
Ezt felülbírálhatja 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 robottól eltérő tagok csatlakoztak vagy kiléptek a beszélgetésből.
Nem robot tagok csatlakoztak a beszélgetéshez
on_members_added_activity
Ezt felülbírálhatja a beszélgetésbe bekapcsolódó tagok kezeléséhez.
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.
Eseménytevékenység érkezett
on_event_activity
Egy event tevékenységen az eseménytípusra jellemző kezelőt hív meg.
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
Felülbírálhatja ezt más típusú események kezelésére.
Üzenetreakció-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 adtak hozzá vagy távolítottak el egy üzenetből.
Üzenethez hozzáadott üzenetválaszok
on_reactions_added
Felülbírálja ezt az üzenethez hozzáadott reakciók kezeléséhez.
Üzenetből eltávolított üzenetválaszok
on_reactions_removed
Felülbírálhatja ezt az üzenetből eltávolított reakciók kezeléséhez.
Telepítésfrissítési tevékenység érkezett
on_installation_update
Egy installationUpdate tevékenységen egy kezelőt hív meg attól függően, hogy a robot telepítve vagy eltávolítva lett-e.
Robot telepítve
on_installation_update_add
Felülbírálhatja ezt a logikát, ha a robot egy szervezeti egységen belül van telepítve.
Robot eltávolítása
on_installation_update_remove
Ezt felülbírálva logikát adhat hozzá, ha a robotot eltávolítják egy szervezeti egységen belül.
Egyéb fogadott tevékenységtípus
on_unrecognized_activity_type
A művelet felülbírálása az egyébként kezeletlen tevékenységtípusok kezeléséhez.
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 környezet paraméterében; a legtöbb esetben on_message_activity mindig kezelik, és általában a leggyakoribb.
A keretrendszer korábbi 4.x verzióihoz hasonlóan lehetőség van a nyilvános metódus on_turnimplementálására is. A metódus alap implementációja jelenleg a hibaellenőrzést kezeli, 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 egyedül hagyhatja ezt a metódust, é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 on_turn metódust, az alap implementáció lekéréséhez meg kell hívnia super().on_turn az összes többi on_<activity> kezelőt, vagy magát 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 meghívják a felhasználókat egy beszélgetésbe, és az üzeneteket a robotnak küldött üzenetek visszacsatolásához kezeli.
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 olyan Teams-specifikus tevékenységeket vezet be, amelyeket a robotnak támogatnia kell a Teams megfelelő működéséhez. A Microsoft Teams-robotok fejlesztésének főbb fogalmait a Microsoft Teams-robotok működése című témakörben tekintheti meg.
A tevékenységkezelővel olyan robotot tervezhet, amely nem követi a beszélgetési állapotot a kanyarok között. A párbeszédpanel-kódtár lehetővé teszi a felhasználóval folytatott hosszú ideig futó beszélgetések kezelését.