Közbenső szoftver
A KÖVETKEZŐKRE VONATKOZIK: SDK v4
A Middleware egyszerűen egy olyan osztály, amely az adapter és a robot logikája között helyezkedik el, és az inicializálás során kell hozzáadni az adapter közbensőszoftver-gyűjteményéhez Az SDK lehetővé teszi saját közbenső szoftver írását vagy mások által létrehozott közbenső szoftver hozzáadását. A robotba érkező vagy az onnan eredő tevékenységek áthaladnak a közbenső szoftveren.
Az adapter feldolgozza és átirányítja a bejövő tevékenységeket a robot köztes szoftver folyamatán keresztül a robot logikájához, majd visszafelé. Ahogy az egyes tevékenységek átáramlanak a roboton, minden egyes közbenső szoftver megvizsgálhatja a tevékenységet, vagy végrehajthat egy műveletet a robot logikájának lefutása előtt vagy után.
Mielőtt belevág a köztes szoftverbe, fontos megérteni a robotok általános működését és a tevékenységek feldolgozásának módját.
Köztes szoftver használata
Gyakran felmerül a kérdés: "Mikor kell köztes szoftverként implementálni a műveleteket, és mikor használjam a normál robotlogikámat?" A köztes szoftver további lehetőségeket kínál a felhasználók beszélgetési folyamatának a beszélgetés minden egyes feldolgozása előtt és után történő feldolgozására. A köztes szoftver lehetővé teszi a beszélgetéssel kapcsolatos információk tárolását és lekérését, valamint szükség esetén további feldolgozási logikák meghívását is. Az alábbiakban néhány gyakori forgatókönyvet mutatunk be, amelyek azt mutatják be, hogy hol lehetnek hasznosak a köztes szoftverek.
Minden tevékenység megtekintése vagy eljátszása
Számos olyan helyzet van, amely megköveteli, hogy a robot tegyen valamit minden tevékenységen, vagy egy bizonyos típusú minden tevékenységnél. Előfordulhat például, hogy naplózni szeretné a robot által kapott összes üzenettevékenységet, vagy tartalék választ szeretne adni, ha a robot más módon nem hozott létre választ ebben a turnben. A köztes szoftver nagyszerű hely az ilyen folyamatokhoz, és képes a robotlogika többi részének végrehajtása előtt és után is eljárni.
A turn környezet módosítása vagy továbbfejlesztése
Bizonyos beszélgetések sokkal gyümölcsözőbbek lehetnek, ha a robot több információval rendelkezik, mint amennyit a tevékenység tartalmaz. Ebben az esetben a köztes szoftver megvizsgálhatja az eddigi beszélgetési állapotinformációkat, lekérdezhet egy külső adatforrást, és hozzáfűzheti azt a turn környezeti objektumhoz, mielőtt továbbadná a végrehajtást a robotlogikának.
Az SDK definiálja a naplózási köztes szoftvereket, amelyek képesek a bejövő és kimenő tevékenységek rögzítésére, de a saját köztes szoftverét is meghatározhatja.
A robot köztes szoftverfolyamata
Az adapter minden tevékenységhez meghívja a köztes szoftvereket abban a sorrendben, amelyben hozzáadta. Az adapter a sor környezeti objektumában és egy következő delegáltban halad át, a köztes szoftver pedig meghívja a meghatalmazottat, hogy adja át a vezérlést a folyamat következő köztes szoftverének. A middleware-nek lehetősége van arra is, hogy a következő meghatalmazott visszatérése után is elvégezhesse a műveleteket a metódus befejezése előtt. Úgy gondolhatja, hogy minden köztes szoftverobjektumnak megvan az első és az utolsó lehetősége arra, hogy a folyamaton belül követő köztes szoftverobjektumok tekintetében cselekedjen.
Például:
- Az első köztesszoftver-objektum forgatókezelője végrehajtja a kódot, mielőtt meghívja a következőt.
- A második köztes szoftverobjektum forgatókezelője a következő hívás előtt végrehajtja a kódot.
- A robot forduláskezelője végrehajtja és visszaadja a hibát.
- A második köztesszoftver-objektum forgatókezelője végrehajtja a fennmaradó kódot a visszatérés előtt.
- A második köztes szoftverobjektum forgatókezelője a következő hívás előtt végrehajtja a kódot.
- Az első köztesszoftver-objektum forgatókezelője végrehajtja a fennmaradó kódot a visszatérés előtt.
Ha a köztes szoftver nem hívja meg a következő delegáltat, az adapter nem hívja meg a következő köztes szoftver vagy robotfordulási kezelőket, valamint a folyamat rövidzárlatait.
Ha a robot köztesszoftver-folyamata befejeződött, a fordulás véget ér, és a fordulókörnyezet kiesik a hatókörből.
A köztes szoftver vagy a robot képes válaszokat generálni, és regisztrálni a válaszesemény-kezelőket, de ne feledje, hogy a válaszokat külön folyamatok kezelik.
Köztes szoftver sorrendje
Mivel a köztes szoftver hozzáadásának sorrendje határozza meg, hogy a köztes szoftver milyen sorrendben dolgozza fel a tevékenységeket, fontos eldönteni, hogy a köztes szoftver milyen sorrendben legyen hozzáadva.
Megjegyzés
Ennek az a célja, hogy a legtöbb robot számára használható általános mintát biztosítson, de mindenképpen gondolja át, hogy a köztes szoftver egyes részei hogyan kommunikálnak a többiekkel az Ön helyzetében.
A köztes szoftvereket, amelyek az összes robothoz tartozó legalacsonyabb szintű feladatokat kezelik, először hozzá kell adni a köztes szoftver folyamatához. Ilyen például a naplózás, a kivételkezelés és a fordítás. Rendelje meg ezeket az igényeitől függően, például azt, hogy a bejövő üzeneteket először szeretné-e lefordítani, mielőtt az üzeneteket tárolná, vagy ha az üzenettárolásra először kerül sor, ami azt jelentheti, hogy a tárolt üzenetek nem lesznek lefordítva.
A robotspecifikus köztes szoftvereket utoljára hozzá kell adni a köztes szoftver folyamatához, a implementálandó köztes szoftvereket pedig a robotnak küldött összes üzenet feldolgozása céljából kell elvégezni. Ha a köztes szoftver állapotinformációkat vagy más, a robotkörnyezetben beállított információkat használ, adja hozzá a köztes szoftver folyamatához az állapotot vagy környezetet módosító köztes szoftver után.
Rövidzárolás
A köztes szoftverek és a válaszkezelők fontos fogalma a rövidzárolás. Ha a végrehajtást az azt követő rétegeken kell folytatni, a közbenső szoftvernek (vagy egy válaszkezelőnek) kell átadnia a végrehajtást a következő meghatalmazott meghívásával. Ha a köztes szoftver (vagy válaszkezelő) nem hívja meg a következő delegáltat, a kapcsolódó folyamat rövidzárlatai és az azt követő rétegek nem lesznek végrehajtva. Ez azt jelenti, hogy a program kihagyja az összes robotlogikát, és a folyamat bármely további köztes szoftverét. Van egy kis különbség a köztes szoftver és a válaszkezelő rövidzárolása között.
Ha a köztes szoftver rövidzárlatai fordulnak, a robotforduló kezelője nem lesz meghívva, de a folyamat ezen pontja előtt végrehajtott összes köztes szoftverkód továbbra is a befejezésig fut.
Az eseménykezelők esetében a következő hívás mellőzése azt jelenti, hogy az esemény megszakad, ami nagyon különbözik a köztes szoftver kihagyási logikájánál. Ha nem dolgozza fel az esemény többi részét, az adapter soha nem küldi el.
Tipp
Ha rövidzárlatot végez egy válaszeseményen, például SendActivities
, győződjön meg arról, hogy ez a kívánt viselkedés. Ellenkező esetben nehéz lehet kijavítani a hibákat.
Válaszesemény-kezelők
Az alkalmazás- és köztesszoftver-logika mellett válaszkezelők (más néven eseménykezelők vagy tevékenységesemény-kezelők) is hozzáadhatók a környezeti objektumhoz. Ezek a kezelők akkor lesznek meghívva, amikor a társított válasz az aktuális környezeti objektumon történik, mielőtt végrehajtja a tényleges választ. Ezek a kezelők akkor hasznosak, ha tudja, hogy a tényleges esemény előtt vagy után szeretne tenni valamit az adott típusú minden tevékenységhez az aktuális válasz többi részében.
Figyelmeztetés
Ügyeljen arra, hogy ne hívja meg a tevékenységválasz-metódust a megfelelő válaszesemény-kezelőből, például hívja meg a küldési tevékenység metódusát egy küldési tevékenységkezelőből. Ezzel végtelen hurkot hozhat létre.
Ne feledje, hogy minden új tevékenység egy új szálat kap, amelyen végre kell hajtani. A tevékenység feldolgozására szolgáló szál létrehozásakor a program az adott tevékenység kezelőinek listáját az új szálra másolja. Az adott tevékenységeseményhez az adott pont után hozzáadott kezelők nem lesznek végrehajtva. A környezeti objektumon regisztrált kezelők kezelése a köztes szoftveres folyamat adapterének módjához hasonlóan lesz kezelve. A kezelők a hozzáadásuk sorrendjében lesznek meghívva, és a következő meghatalmazott meghívása átadja a vezérlést a következő regisztrált eseménykezelőnek. Ha egy kezelő nem hívja meg a következő delegáltat, a rendszer nem hívja meg a következő eseménykezelőket, az esemény rövidzárlatait, és az adapter nem küldi el a választ a csatornának.
Állapot kezelése köztes szoftverben
Az állapot mentésének gyakori módszere a mentési módosítások metódusának meghívása a turn kezelő végén. Íme egy diagram, amely a hívásra összpontosít.
Ezzel a megközelítéssel az a probléma, hogy az egyes egyéni köztes szoftverekből származó állapotfrissítések, amelyek a robot visszatérése után történnek, nem lesznek mentve a tartós tárolóba. A megoldás az, hogy az egyéni köztes szoftver befejezését követően áthelyezi a hívásokat a mentési módosítási metódusba úgy, hogy hozzáadja az automatikus mentési módosítások köztes szoftverének egy példányát a köztes szoftververem elejéhez, vagy legalább a köztes szoftverhez, amely frissítheti az állapotot. A végrehajtás alább látható.
Adja hozzá azokat az állapotkezelési objektumokat, amelyeket frissítenie kell egy robotállapot-beállított objektumra, majd ezt használja a módosítások köztes szoftverének automatikus mentésekor.
További források
A Bot Framework SDK [C# | JS] által implementált átirat-naplózó köztes szoftverét is megtekintheti.