Megosztás a következőn keresztül:


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.
  • 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.

Robotfordulás sorrenddiagramja a robot fordulási kezelője által mentett állapottal.

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ó.

Robotfordulás szekvenciadiagramja köztes szoftverből mentett állapottal.

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.