Overzicht van vaardigheden
VAN TOEPASSING OP: SDK v4
U kunt een bot uitbreiden met behulp van een vaardigheidsbot . Een vaardigheid kan worden gebruikt door verschillende andere bots, het hergebruik vergemakkelijken en op deze manier kunt u een gebruikersgerichte bot maken en uitbreiden door uw eigen vaardigheden of vaardigheden van derden te gebruiken.
- Een vaardigheid is een bot die een set taken voor een andere bot kan uitvoeren. Een bot kan zowel een vaardigheid als een gebruikersgerichte bot zijn.
- Een vaardigheidsconsumer is een bot die een of meer vaardigheden kan aanroepen. Een gebruikergerichte vaardigheidsconsumer wordt ook wel een hoofdbot genoemd.
- Een vaardigheidsmanifest is een JSON-bestand dat de acties beschrijft die de vaardigheid kan uitvoeren, de invoer- en uitvoerparameters en de eindpunten van de vaardigheid.
- Ontwikkelaars die geen toegang hebben tot de broncode van de vaardigheid, kunnen de informatie in het manifest gebruiken om hun vaardigheidsgebruiker te ontwerpen.
- Het manifestschema voor vaardigheden is een JSON-bestand dat het schema van het vaardigheidsmanifest beschrijft.
- Lees hoe u een vaardigheid implementeert en hoe u een vaardigheidsmanifest schrijft voor voorbeeldmanifesten voor vaardigheden.
Met andere woorden, de gebruiker communiceert rechtstreeks met de hoofdbot en de hoofdbot delegeert enkele van de gesprekslogica aan een vaardigheid.
De functie vaardigheden is zo ontworpen dat:
- Vaardigheden en consumenten communiceren via HTTP met behulp van het Bot Framework-protocol.
- Een vaardigheidsconsumer kan meerdere vaardigheden gebruiken.
- Een gebruiker van vaardigheden kan een vaardigheid gebruiken, ongeacht de taal die wordt gebruikt om de vaardigheid te implementeren. Een C#-bot kan bijvoorbeeld een vaardigheid gebruiken die is geïmplementeerd met behulp van JavaScript.
- Een vaardigheid kan ook een vaardigheidsconsumer zijn en andere vaardigheden aanroepen.
- Vaardigheden ondersteunen gebruikersverificatie; Gebruikersverificatie is echter lokaal voor de vaardigheid en kan niet worden overgedragen naar een andere bot.
- Vaardigheden kunnen werken met zowel de Bot Framework-adapter als aangepaste adapters.
In dit diagram ziet u enkele van de mogelijke permutaties.
Conceptuele architectuur
Een vaardigheid en vaardigheidsconsumer zijn afzonderlijke bots en u publiceert ze onafhankelijk.
- Een gebruiker van vaardigheden vereist toegevoegde logica voor het beheren van een vaardigheid, zoals wanneer de vaardigheid moet worden aangeroepen of geannuleerd, enzovoort. Naast de gebruikelijke bot- en adapterobjecten bevat de consument enkele vaardigheidsgerelateerde objecten die worden gebruikt om activiteiten uit te wisselen met de vaardigheid. Een gebruiker van vaardigheden implementeert ten minste twee HTTP-eindpunten:
- Een berichteneindpunt ontvangt activiteiten van de gebruiker of het kanaal. Dit is het gebruikelijke berichteindpunt dat alle bots implementeren.
- Een hosteindpunt voor vaardigheden voor het ontvangen van activiteiten van een vaardigheid. Dit fungeert als een callback-URL, de service-URL waarnaar de vaardigheid reageert. (De gebruiker van de vaardigheid moet code koppelen die de HTTP-methodeaanvraag van de vaardigheid ontvangt met een vaardigheidshandler.)
- Voor een vaardigheid is een toegevoegde logica vereist om een
endOfConversation
activiteit te verzenden wanneer deze is voltooid, zodat de gebruiker weet wanneer de vaardigheid weet wanneer hij moet stoppen met het doorsturen van activiteiten naar de vaardigheid.
Dit diagram geeft een overzicht van de stroom activiteiten van de gebruiker naar de hoofdbot naar een vaardigheid en weer terug.
- De adapter van de hoofdbot ontvangt activiteiten van de gebruiker en stuurt deze door naar de activiteitshandler van de hoofdbot. (Activiteiten van de gebruiker worden ontvangen op het berichteindpunt van de hoofdbot.)
- De hoofdbot maakt gebruik van een HTTP-vaardigheidsclient om een activiteit naar de vaardigheid te verzenden. De client haalt de gespreksinformatie over consumentenvaardigheden op uit een vaardigheidsdefinitie en een gespreks-id-factory voor vaardigheden. Dit omvat de service-URL die door de vaardigheid wordt gebruikt om de activiteit te beantwoorden.
- De adapter van de vaardigheid ontvangt activiteiten van de gebruiker van de vaardigheid en stuurt deze door naar de activiteitshandler van de vaardigheid. (Activiteiten van de consument worden ontvangen op het berichteindpunt van de vaardigheidsbot.)
- Wanneer de vaardigheid reageert, ontvangt de vaardigheidshandler van de hoofdbot de activiteit. Hiermee worden de gespreksgegevens van de hoofdgebruiker opgehaald uit de factory voor gespreks-id's voor vaardigheden. Vervolgens wordt de activiteit doorgestuurd naar de adapter van de hoofdbot. (Activiteiten van de vaardigheid worden ontvangen op het hosteindpunt voor vaardigheden van de hoofdbot.)
- De adapter van de hoofdbot genereert intern een proactief bericht om het gesprek met de gebruiker te hervatten.
- De adapter van de hoofdbot verzendt berichten van de vaardigheid naar de gebruiker.
Deze objecten helpen bij het beheren van vaardigheden en het routeren van vaardigheidsverkeer:
- Een Bot Framework-vaardigheid beschrijft routeringsinformatie voor een vaardigheid en kan worden gelezen uit het configuratiebestand van de gebruiker van de vaardigheid.
- Een HTTP-vaardigheidsclient verzendt activiteiten naar een vaardigheid.
- Een vaardigheidshandler ontvangt activiteiten van een vaardigheid.
- De gespreksfactory voor vaardigheden vertaalt zich tussen de gespreksverwijzing van de gebruiker en de gespreksverwijzing op basis van de basisvaardigheden.
- De Bot Connector-service biedt zowel kanaal- als bot-naar-bot-verificatie. Met behulp van een verificatieconfiguratieobject kunt u claimvalidatie toevoegen aan een vaardigheid of vaardigheidsgebruiker om te beperken welke toepassingen of gebruikers toegang hebben.
De vaardigheidsclient- en vaardigheidshandlerobjecten gebruiken beide de gespreks-id factory om te vertalen tussen het gesprek dat de hoofdbot gebruikt om te communiceren met de gebruiker en het gesprek dat de hoofdbot gebruikt om met de vaardigheid te communiceren.
Vaardigheidsmanifesten
Een vaardigheidsmanifest is een JSON-bestand dat de acties beschrijft die de vaardigheid kan uitvoeren, de invoer- en uitvoerparameters, de eindpunten van de vaardigheid en het verzenden van modellen voor de vaardigheid.
Zie voor meer informatie over het vaardigheidsmanifestschema hoe u een vaardigheidsmanifest schrijft.
Bot-naar-bot-communicatie
Het is belangrijk om bepaalde aspecten van dit ontwerp te begrijpen, onafhankelijk van welke bot u ontwerpt.
Vaardigheidsacties
Sommige vaardigheden kunnen meerdere taken of acties uitvoeren. Een taakvaardigheid kan bijvoorbeeld het maken, bijwerken, weergeven en verwijderen van activiteiten toestaan die kunnen worden geopend als discrete gesprekken.
- Bekijk hoe u een vaardigheid implementeert voor een eenvoudige vaardigheid waarmee één actie wordt geïmplementeerd.
- Zie hoe u dialoogvensters in een vaardigheid kunt gebruiken voor een vaardigheid die dialoogvensters gebruikt om meerdere acties te implementeren.
Gespreksverwijzingen
Het gesprek in de hoofdmap van de gebruiker verschilt van het hoofdvaardighedengesprek.
De gespreks-id factory helpt bij het beheren van verkeer tussen een vaardigheidsconsumer en een vaardigheid. De fabriek vertaalt zich tussen de id van het gesprek dat de hoofdmap heeft met de gebruiker en het gesprek dat het met de vaardigheid heeft. Met andere woorden, het genereert een gespreks-id voor gebruik tussen de hoofdmap en de vaardigheid en herstelt de oorspronkelijke gespreks-id van de hoofdmap van de gespreks-id van de hoofdvaardigheden.
Coördinatie tussen servers
De hoofd- en vaardigheidsbots communiceren via HTTP. Het exemplaar van de hoofdbot die een activiteit van een vaardigheid ontvangt, is dus mogelijk niet hetzelfde exemplaar dat de initiërende activiteit heeft verzonden; met andere woorden, verschillende servers kunnen deze twee aanvragen verwerken.
- Sla de status altijd op in de vaardigheidsconsumer voordat u een activiteit doorstuurt naar een vaardigheid. Dit zorgt ervoor dat het exemplaar dat verkeer van een vaardigheid ontvangt, kan ophalen waar het vorige exemplaar is gebleven voordat het de vaardigheid werd genoemd.
- Wanneer de vaardigheidshandler een activiteit van een vaardigheid ontvangt, wordt deze omgezet in een formulier dat geschikt is voor de vaardigheidsconsumer en doorstuurt naar de adapter van de consument.
Vaardigheidsconsumer en vaardigheidsstatus
De vaardigheid consument en vaardigheid beheren hun eigen staat afzonderlijk. De consument maakt echter de gespreks-id die wordt gebruikt om te communiceren met de vaardigheid. Dit kan een effect hebben op de gespreksstatus in de vaardigheid.
Belangrijk
Zoals eerder is opgemerkt, kan een andere instantie van de consument, wanneer de vaardigheidsgebruiker een gebruikersactiviteit delegeert aan een vaardigheid, de reactie van de vaardigheid ontvangen. De consument moet de gespreksstatus altijd direct opslaan voordat een activiteit naar een vaardigheid wordt doorgestuurd.
Bot-naar-bot-verificatie
U hebt geen app-id en wachtwoord nodig om een gebruiker van vaardigheden en vaardigheden lokaal te testen in de Bot Framework Emulator. Er is nog steeds een Azure-abonnement vereist om uw vaardigheid in Azure te implementeren.
Verificatie op serviceniveau wordt beheerd door de Bot Connector-service. Het framework maakt gebruik van bearer-tokens en bottoepassings-id's om de identiteit van elke bot te verifiëren. (Het Bot Framework maakt gebruik van een verificatieconfiguratieobject om de verificatieheader voor binnenkomende aanvragen te valideren.)
Belangrijk
Hiervoor moeten alle geïmplementeerde bots (de vaardigheidsconsumer en alle vaardigheden die worden gebruikt) geldige toepassingsreferenties hebben.
Validatie van claims
U moet een claimvalidator toevoegen aan de verificatieconfiguratie. De claims worden geëvalueerd na de verificatieheader. Genereert een fout of uitzondering in uw validatiecode om de aanvraag te weigeren.
Notitie
De bot voert claimsvalidatie uit als deze een app-id en wachtwoord heeft; anders wordt claimvalidatie niet uitgevoerd.
Er zijn verschillende redenen waarom u een anderszins geverifieerde aanvraag kunt weigeren:
- Wanneer de consument van vaardigheden alleen verkeer mag accepteren van vaardigheden waarmee hij mogelijk een gesprek heeft gestart.
- Wanneer een vaardigheid deel uitmaakt van een betaalde service en gebruikers die zich niet in de database bevinden, geen toegang mogen hebben.
- Wanneer u de toegang tot de vaardigheid wilt beperken tot specifieke gebruikers van vaardigheden.
Belangrijk
Als u geen claimvalidator opgeeft, genereert uw bot een fout of uitzondering bij het ontvangen van een activiteit van een andere bot, ongeacht of uw bot een vaardigheid of een vaardigheidsgebruiker is.
Foutopsporing van vaardigheidsgesprekken
Omdat verkeer tussen vaardigheden en vaardigheidsgebruikers wordt geverifieerd, zijn er extra stappen bij het opsporen van fouten in dergelijke bots.
- De vaardigheidsconsumer en alle vaardigheden die het verbruikt, moeten direct of indirect worden uitgevoerd.
- Als de bots lokaal worden uitgevoerd en als een van de bots een app-id en wachtwoord heeft, moeten alle bots geldige id's en wachtwoorden hebben.
- Als de bots allemaal zijn geïmplementeerd, raadpleegt u hoe u fouten in een bot kunt opsporen vanuit een kanaal met behulp van devtunnel.
- Als sommige van de bots lokaal worden uitgevoerd en sommige worden geïmplementeerd, raadpleegt u hoe u fouten kunt opsporen in een vaardigheid of vaardigheidsgebruiker.
Anders kunt u fouten opsporen in een vaardigheidsconsumer of vaardigheid, net zoals bij het opsporen van fouten in andere bots. Zie Fouten opsporen in een bot en fouten opsporen met de Bot Framework Emulator voor meer informatie.
Aanvullende informatie
Vanuit het perspectief van de gebruiker werken ze met de hoofdbot. Vanuit het perspectief van de vaardigheid is de vaardigheidsconsumer het kanaal waarover deze communiceert met de gebruiker.