Delen via


Richtlijnen voor foutopsporing

VAN TOEPASSING OP: SDK v4

Bots zijn complexe apps, waarbij veel onderdelen samenwerken. Net als elke andere complexe app kan dit leiden tot een aantal interessante bugs of ervoor zorgen dat uw bot zich anders gedraagt dan verwacht.

Bij foutopsporing kan uw bot soms een moeilijke taak zijn. Elke ontwikkelaar heeft zijn eigen voorkeurswijze om die taak uit te voeren. De onderstaande richtlijnen zijn suggesties die van toepassing zijn op de meeste bots.

Nadat u hebt gecontroleerd of uw bot werkt, is de volgende stap het verbinden met een kanaal. Hiervoor kunt u uw bot implementeren op een faseringsserver en uw eigen direct line-client maken waarmee uw bot verbinding kan maken. Zie Een bot verbinden met een Direct Line voor meer informatie.

Door uw eigen client te maken, kunt u de interne werking van het kanaal definiëren en testen hoe uw bot reageert op bepaalde activiteitsuitwisselingen. Zodra u verbinding hebt gemaakt met uw client, voert u uw tests uit om de status van uw bot in te stellen en uw functies te verifiëren. Als uw bot gebruikmaakt van een functie zoals spraak, kan het gebruik van deze kanalen een manier bieden om die functionaliteit te controleren.

Notitie

Bij het implementeren van een bot in Azure wordt het Webchat-kanaal standaard ingericht.

Het gebruik van zowel de Bot Framework Emulator als de Webchat via Azure Portal hier kan meer inzicht geven in hoe uw bot presteert tijdens interactie met verschillende kanalen.

Foutopsporing in uw bot werkt op dezelfde manier als andere apps met meerdere threads, met de mogelijkheid om onderbrekingspunten in te stellen of functies zoals het directe venster te gebruiken.

Bots volgen een gebeurtenisgestuurd programmeerparadigma, dat moeilijk te rationaliseren kan zijn als u er niet bekend mee bent. Het idee dat uw bot staatloos, multithreaded is en te maken krijgt met asynchrone/wacht-aanroepen, kan leiden tot onverwachte fouten. Hoewel het opsporen van fouten in uw bot op dezelfde manier werkt als andere apps met meerdere threads, behandelen we enkele suggesties, hulpprogramma's en bronnen om u te helpen.

Informatie over botactiviteiten met de emulator

Uw bot behandelt verschillende soorten activiteiten naast de normale berichtactiviteit . Als u deze activiteiten begrijpt, kunt u uw bot efficiënt coden en kunt u controleren of de activiteiten die uw bot verzendt en ontvangt, zijn wat u verwacht. Als u de emulator gebruikt, ziet u wat deze activiteiten zijn, wanneer ze plaatsvinden en welke informatie ze bevatten. Zie Fouten opsporen met de emulator voor meer informatie.

Gebruikersinteracties met transcripten opslaan en ophalen

Azure Blob Transcript Storage biedt een gespecialiseerde resource waar u transcripties met interacties tussen uw gebruikers en uw bot kunt opslaan en ophalen .

Bovendien kunt u, zodra gebruikersinvoerinteracties zijn opgeslagen, de 'storage explorer' van Azure gebruiken om handmatig gegevens weer te geven die zijn opgenomen in transcripties die zijn opgeslagen in uw blobtranscriptiearchief. In het volgende voorbeeld wordt 'storage explorer' geopend vanuit de instellingen voor 'mynewtestblobstorage'. Als u een opgeslagen gebruikersinvoer wilt openen, selecteert u: Blob Container > ChannelId > TranscriptId > ConversationId

Voorbeeld van een transcriptievermelding die is opgeslagen in een blobtranscriptiearchief.

Hiermee opent u de invoer van het opgeslagen gebruikersgesprek in JSON-indeling. Gebruikersinvoer blijft behouden samen met de sleutel 'text:'. Zie Fouten opsporen in uw bot met behulp van transcriptbestanden voor meer informatie over het maken en gebruiken van een bottranscriptiebestand.

Hoe middleware werkt

Middleware is mogelijk niet intuïtief bij de eerste poging om deze te gebruiken, met name met betrekking tot de voortzetting of kortsluiting van de uitvoering. Middleware kan worden uitgevoerd op de voorloop- of volgrand van een beurt, waarbij de next() gemachtigde wordt aangeroepen om te dicteren wanneer de uitvoering wordt doorgegeven aan de botlogica.

Als u meerdere middleware-onderdelen gebruikt en dit is hoe uw pijplijn is georiënteerd, kan de gemachtigde de uitvoering doorgeven aan een ander middleware-onderdeel. Details over de middleware-pijplijn van de bot kunnen helpen dat idee duidelijker te maken.

Als de next() gemachtigde niet wordt aangeroepen, wordt dat kortsluitingsroutering genoemd. Dit gebeurt wanneer de middleware voldoet aan de huidige activiteit en bepaalt dat het niet nodig is om de uitvoering door te geven.

Als u weet wanneer en waarom, kunt u aangeven welk onderdeel van middleware het eerst in uw pijplijn moet komen. Daarnaast is het belangrijk dat u begrijpt wat u kunt verwachten voor ingebouwde middleware die wordt geleverd door de SDK of andere ontwikkelaars. Sommigen vinden het handig om eerst uw eigen middleware te maken om wat te experimenteren voordat u in de ingebouwde middleware duikt.

Zie Fouten opsporen in een bot met inspectie-middleware voor meer informatie over het opsporen van fouten in een bot met behulp van inspectie-middleware.

Status begrijpen

Het bijhouden van de status is een belangrijk onderdeel van uw bot, met name voor complexe taken. Over het algemeen wordt aanbevolen activiteiten zo snel mogelijk te verwerken en de verwerking te laten voltooien, zodat de status behouden blijft. Activiteiten kunnen bijna tegelijkertijd naar uw bot worden verzonden en dat kan leiden tot verwarrende fouten vanwege de asynchrone architectuur.

Het belangrijkste is dat u ervoor zorgt dat de status blijft bestaan op een manier die overeenkomt met uw verwachtingen. Afhankelijk van waar uw persistente status zich bevindt, kunnen opslagemulators voor Cosmos DB en Azure Table Storage u helpen die status te controleren voordat u productieopslag gebruikt.

Belangrijk

De Cosmos DB-opslagklasse is afgeschaft. Containers die oorspronkelijk zijn gemaakt met CosmosDbStorage, hadden geen partitiesleutel ingesteld en kregen de standaardpartitiesleutel _/partitionKey.

Containers die zijn gemaakt met Cosmos DB-opslag , kunnen worden gebruikt met gepartitioneerde Cosmos DB-opslag. Lees Partitionering in Azure Cosmos DB voor meer informatie.

Houd er ook rekening mee dat, in tegenstelling tot de verouderde Cosmos DB-opslag, de gepartitioneerde Cosmos DB-opslag niet automatisch een database binnen uw Cosmos DB-account maakt. U moet handmatig een nieuwe database maken, maar het handmatig maken van een container overslaan, omdat CosmosDbPartitionedStorage de container voor u maakt.

Activiteitshandlers gebruiken

Activiteitshandlers kunnen een andere complexiteitslaag introduceren, met name omdat elke activiteit wordt uitgevoerd op een onafhankelijke thread (of webwerkrollen, afhankelijk van uw taal). Afhankelijk van wat uw handlers doen, kan dit problemen veroorzaken waarbij de huidige status niet is wat u verwacht.

De ingebouwde status wordt aan het einde van een beurt geschreven, maar alle activiteiten die door die beurt worden gegenereerd, worden onafhankelijk van de turn-pijplijn uitgevoerd. Dit heeft vaak geen invloed op ons, maar als de status van een activiteitshandler verandert, hebben we de geschreven status nodig om die wijziging te bevatten. In dat geval kan de turn-pijplijn wachten op de activiteit om de verwerking te voltooien voordat deze wordt voltooid om ervoor te zorgen dat de juiste status voor die beurt wordt vastgelegd.

De verzendactiviteitsmethode en de handlers vormen een uniek probleem. Het aanroepen van verzendactiviteit vanuit de handler on send activities veroorzaakt een oneindige forking van threads. Er zijn manieren waarop u dit probleem kunt omzeilen, bijvoorbeeld door extra berichten toe te voegen aan de uitgaande informatie of uit te schrijven naar een andere locatie, zoals de console of een bestand, om te voorkomen dat uw bot vastloopt.

Foutopsporing in een productiebot

Wanneer uw bot in productie is, kunt u fouten in uw bot opsporen vanuit elk kanaal met behulp van ngrok. De naadloze verbinding van uw bot met meerdere kanalen is een belangrijke functie die beschikbaar is in Bot Framework. Zie Fouten opsporen in een bot vanuit een kanaal met behulp van ngrok en Fouten opsporen in een vaardigheid of vaardigheidsgebruiker voor meer informatie.

Volgende stappen

Aanvullende resources