Delen via


De telemetriegegevens van uw bot analyseren

VAN TOEPASSING OP: SDK v4

Gedrag van bot analyseren

De volgende verzameling query's kan worden gebruikt om het gedrag van de bot te analyseren. U kunt de verzameling gebruiken om aangepaste query's te maken in Azure Monitor Log Analytics en om bewakings- en Power BI-visualisatiedashboards te maken.

Vereisten

Het is handig om basiskennis te hebben van de volgende concepten:

Tip

Als u uw bot maakt met behulp van hulpprogramma's zoals Copilot Studio of Composer, wilt u de adaptieve dialoogvensterversie van elke query gebruiken wanneer deze beschikbaar is.

Dashboards

Azure Dashboards bieden een uitstekende manier om de gegevens die zijn gegenereerd op basis van uw query's, weer te geven en te delen. U kunt aangepaste dashboards maken om uw botsactiviteiten te bewaken door uw query's te koppelen aan de tegels die u aan uw dashboard toevoegt. Zie Dashboards van Log Analytics-gegevens maken en delen voor meer informatie over dashboards en het koppelen van uw query's. In de rest van dit artikel ziet u voorbeelden van enkele query's die nuttig kunnen zijn bij het bewaken van het gedrag van uw bots.

Voorbeeld van Kusto-query's

Notitie

Het is raadzaam om te draaien op verschillende dimensies, zoals periode, kanaal en landinstelling voor alle query's in dit artikel.

Aantal gebruikers per periode

Dit voorbeeld resulteert in een lijndiagram dat laat zien hoeveel afzonderlijke gebruikers de afgelopen 14 dagen met uw bot hebben gecommuniceerd. De periode kan eenvoudig worden gewijzigd door verschillende waarden toe te wijzen aan de queryStartDateen queryEndDate interval variabelen.

Belangrijk

U krijgt alleen het juiste aantal unieke gebruikers in deze query als ze geverifieerde gebruikers zijn en de resultaten kunnen ook afhankelijk zijn van de kanaalmogelijkheden.

// number of users per period
let queryStartDate = ago(14d);
let queryEndDate = now();
let groupByInterval = 1d;
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| summarize uc=dcount(user_Id) by bin(timestamp, groupByInterval)
| render timechart

Tip

De Kusto-samenvattende operator wordt gebruikt om een tabel te maken waarmee de inhoud van de invoertabel wordt samengevoegd.

De functie Bin is een Scalaire Kusto-functie die, wanneer deze wordt gebruikt in combinatie met de summarize operator functie, de queryresultaten in de opgegeven waarde groepeert. In het bovenstaande voorbeeld wordt dit gegroepeerd op dag, accepteert Kusto ook h=hours, m=minutes, s=seconds, ms=milliseconden, microsecond=microseconds.

Met de renderoperator kunt u eenvoudig grafieken weergeven, zoals het tijddiagram, een lijndiagram waarbij de x-as een datum/tijd is en elke andere numerieke kolom voor de y-as kan worden gebruikt. De x-as wordt automatisch mooi gespoerd, zelfs als uw gegevens niet elke keer zijn opgegeven. Als er geen render-instructie wordt gebruikt, wordt deze standaard ingesteld op table.

Voorbeeld van queryresultaten voor aantal gebruikers per periode

Voorbeelddiagram van het aantal gebruikers per periode.

Activiteit per periode

In dit voorbeeld ziet u hoe u het volume van de activiteit per gewenste dimensie kunt meten, zoals een telling van het aantal gesprekken, dialoogvensters of berichten per dag voor de afgelopen 14 dagen. De periode kan eenvoudig worden gewijzigd door verschillende waarden toe te wijzen aan de querystartdateen queryEndDate interval variabelen. De gewenste dimensie wordt gedefinieerd door de extend component in het volgende voorbeeld, metric kan worden ingesteld op InstanceId, DialogId of ActivityId.

Wijs metrische gegevens toe aan de dimensie die u wilt weergeven:

// Measures the number of activity's (conversations, dialogs, messages) per period.
let queryStartDate = ago(14d);
let queryEndDate = now();
let groupByInterval = 1d;
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| extend InstanceId = tostring(customDimensions['InstanceId'])
| extend DialogId = tostring(customDimensions['DialogId'])
| extend ActivityId = tostring(customDimensions['activityId'])
| where DialogId != '' and  InstanceId != '' and user_Id != ''
| extend metric = InstanceId // DialogId or ActivityId
| summarize Count=dcount(metric) by  bin(timestamp, groupByInterval)
| order by Count desc nulls last
| render timechart

Tip

De Kusto-uitbreidingsoperator wordt gebruikt om berekende kolommen te maken en deze toe te voegen aan de resultatenset.

Voorbeeld van queryresultaten per periode

Voorbeelddiagram van activiteit per periode.

Activiteit per gebruiker per periode

In dit voorbeeld ziet u hoe u het aantal activiteiten per gebruiker per periode kunt tellen. Met deze query wordt ingezoomd op de activiteit per periodequery om u te richten op de activiteit per gebruiker per periode. De activiteiten omvatten dialoogvensters, gesprekken of berichten. Met deze query wordt de interactie van gebruikers met uw bot meten, waardoor potentiële problemen kunnen worden gevonden, zoals:

  • Dagen met veel activiteit door één gebruiker kan een aanval of test betekenen
  • Dagen met weinig interactie kunnen duiden op problemen met de servicestatus

Tip

U kunt verwijderen door user_Id om het algemene volume van de botactiviteit te krijgen dat kan worden gepistemd op tijd en dialoogvensters, berichten of gesprekken.

// number of users per period per dialogs
let queryStartDate = ago(14d);
let queryEndDate = now();
let interval = 6h;
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| extend InstanceId = tostring(customDimensions['InstanceId'])
| extend DialogId = tostring(customDimensions['DialogId'])
| extend ActivityId = tostring(customDimensions['activityId'])
| where DialogId != '' and InstanceId != '' and user_Id != ''
| extend metric = ActivityId // InstanceId // DialogId // or InstanceId for conversation count
| summarize Count=dcount(metric) by user_Id, bin(timestamp, groupByInterval)
| order by Count desc nulls last

Voorbeeld van queryresultaten per gebruiker per gebruiker

user_Id tijdstempel Tellen
User-8107ffd2 2019-09-03T00:00:00Z 14
User-75f2cc8f 2019-08-30T00:00:00Z 13
User-75f2cc8d 2019-09-03T00:00:00Z 13
User-3060aada 2019-09-03T00:00:00Z 10

Dialoogvenstervoltooiing

Zodra u de telemetrieclient voor een dialoogvenster hebt ingesteld, worden in het dialoogvenster (en de onderliggende elementen) enkele standaardtelemetriegegevens verzonden, zoals gestart en voltooid. Dit voorbeeld kan worden gebruikt om de voltooide dialoogvensters te meten ten opzichte van gestarte dialoogvensters. Als het aantal gestarte dialoogvensters groter is dan het aantal voltooide dialoogvensters, voltooien sommige gebruikers de dialoogvensterstroom niet. U kunt deze query gebruiken om mogelijke dialoogvensterlogica te identificeren en op te lossen. Het kan ook worden gebruikt om te bepalen welke dialoogvensters het meest en minst worden gebruikt.

Tip

Als u uw bot maakt met behulp van hulpprogramma's zoals Copilot Studio of Composer, wilt u de adaptieve dialoogvensterversie van elke query gebruiken.

Voltooiing van watervaldialoogvenster

// % Completed Waterfall Dialog: shows completes relative to starts
let queryStartDate = ago(14d);
let queryEndDate = now();
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| where name=="WaterfallStart"
| extend DialogId = customDimensions['DialogId']
| extend InstanceId = tostring(customDimensions['InstanceId'])
| join kind=leftouter (
    customEvents
    | where name=="WaterfallComplete"
    | extend InstanceId = tostring(customDimensions['InstanceId'])
  ) on InstanceId
| summarize started=countif(name=='WaterfallStart'), completed=countif(name1=='WaterfallComplete') by tostring(DialogId)
| where started > 100  // filter for sample
// Show starts vs. completes
| project tostring(DialogId), started, completed
| order by started desc, completed asc  nulls last
| render barchart  with (kind=unstacked, xcolumn=DialogId, ycolumns=completed, started, ysplit=axes)

Tip

De Kusto Join-operator wordt gebruikt om de rijen van twee tabellen samen te voegen om een nieuwe tabel te vormen door overeenkomende waarden van de opgegeven kolommen uit elke tabel te vergelijken.

De projectoperator wordt gebruikt om de velden te selecteren die u in de uitvoer wilt weergeven. Net als bij het extend operator veld dat een nieuw veld toevoegt, kan de project operator gebruiker kiezen uit de bestaande set velden of een nieuw veld toevoegen.

Adaptieve dialoogvensters zijn gestart en voltooid

// % Completed adaptive dialog: shows completes relative to starts. This type is the default dialog type when using Copilot Studio or Composer. 
customEvents
| where name=="AdaptiveDialogStart" or name == "AdaptiveDialogComplete"
| extend DialogId = tostring(customDimensions['DialogId'])
| summarize started=countif(name=='AdaptiveDialogStart'), completed=countif(name=='AdaptiveDialogComplete') by DialogId
| project DialogId, started, completed
| order by started desc, completed asc nulls last
| render barchart with (kind=unstacked, xcolumn=DialogId, ycolumns=completed, started, ysplit=axes)

Voorbeeld van queryresultaten voor voltooiing van dialoogvensters

Voorbeeldgrafiek van dialoogvensters die zijn gestart en dialoogvensters zijn voltooid.

Incompletion van dialoogvenster

Dit voorbeeld kan worden gebruikt om het aantal dialoogvensterstromen te tellen dat is gestart, maar nooit is voltooid vanwege annulering of afgebroken tijdens de opgegeven periode. U kunt het gebruiken om onvolledige dialoogvensters te bekijken en te onderzoeken of ze actief zijn geannuleerd vanwege verwarring van de gebruiker of afgebroken vanwege afleiding of verlies van interesse van de gebruiker.

Watervaldialoogvensters niet voltooid

// Show incomplete dialogs when using waterfall dialogs.
let queryStartDate = ago(14d);
let queryEndDate = now();
customEvents 
| where timestamp > queryStartDate 
| where timestamp < queryEndDate
| where name == "WaterfallStart" 
| extend DialogId = customDimensions['DialogId']
| extend instanceId = tostring(customDimensions['InstanceId'])
| join kind=leftanti (
  customEvents
  | where name == "WaterfallComplete" 
  | extend instanceId = tostring(customDimensions['InstanceId'])
  ) on instanceId
| summarize cnt=count() by  tostring(DialogId)
| order by cnt
| render barchart

Adaptieve dialoogvensters zijn niet voltooid

// Show incomplete dialogs for adaptive dialogs; this type is the default dialog type when using Copilot Studio or Composer.
let queryStartDate = ago(14d);
let queryEndDate = now();
customEvents
| where name == "AdaptiveDialogStart"
| extend DialogId = tostring(customDimensions['DialogId'])
| join kind=rightanti (
customEvents
| where name == "AdaptiveDialogComplete"
| extend DialogId = tostring(customDimensions['DialogId'])
) on name, DialogId
| summarize cnt=count() by DialogId
| order by cnt
| render barchart

Tip

De Kusto-orderoperator (hetzelfde als de sort operator) wordt gebruikt om de rijen van de invoertabel in volgorde te sorteren op een of meer kolommen. Opmerking: Als u null-waarden wilt uitsluiten van de resultaten van een query, kunt u ze filteren in uw where instructie, bijvoorbeeld u kunt 'en isnotnull(Timestamp)' toevoegen of null-waarden aan het begin of einde retourneren, het nulls first of nulls first het einde van de orderinstructie toevoegen.

Voorbeeld van queryresultaten voor incompletion

Voorbeeldsamenvattingsgrafiek voor onvolledige dialoogvensters.

Inzoomen in dialoogvensterreeks

Waterval starten/stap/voltooid voor dialoogvenster in gesprek

In dit voorbeeld ziet u de reeks dialoogvensterstappen, gegroepeerd op gesprek (instanceId), wat handig kan zijn bij het bepalen welke stappen leiden tot onderbreking van dialoogvensters.

Voer deze query uit, voer de waarde in van de gewenste DialogId waarde in plaats van <SampleDialogId>

// Drill down: Show waterfall start/step/complete for specific dialog
let queryStartDate = ago(14d);
let queryEndDate = now();
let DialogActivity=(dlgid:string) {
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| extend DialogId = customDimensions['DialogId']
| extend StepName = customDimensions['StepName']
| extend InstanceId = customDimensions['InstanceId']
| where DialogId == dlgid
| project timestamp, name, StepName, InstanceId
| order by tostring(InstanceId), timestamp asc
};
// For example see SampleDialogId behavior
DialogActivity("<SampleDialogId>")

Tip

Deze query is geschreven met behulp van een door een query gedefinieerde functie, een door de gebruiker gedefinieerde functie die wordt gedefinieerd en gebruikt binnen het bereik van één query en wordt gedefinieerd via een let-instructie. Deze query die is geschreven zonder het gebruik van het query-defined functionvolgende:

let queryStartDate = ago(14d);
let queryEndDate = now();
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| extend DialogId = customDimensions['DialogId']
| extend StepName = customDimensions['StepName']
| extend InstanceId = customDimensions['InstanceId']
| where DialogId == "<SampleDialogId>"
| project timestamp, name, StepName, InstanceId
| order by tostring(InstanceId), timestamp asc
Voorbeeldqueryresultaten
timestamp naam StepName InstanceId
2019-08-23T20:04... WaterfallStart Nul ... 79c0f03d8701
2019-08-23T20:04... WaterfallStep GetPointOfInterestLocations ... 79c0f03d8701
2019-08-23T20:04... WaterfallStep ProcessPointOfInterestSelection ... 79c0f03d8701
2019-08-23T20:04... WaterfallStep GetRoutesToDestination ... 79c0f03d8701
2019-08-23T20:05... WaterfallStep ResponseToStartRoutePrompt ... 79c0f03d8701
2019-08-23T20:05... WaterfallComplete 1 Nul ... 79c0f03d8701
2019-08-28T23:35... WaterfallStart Nul ... 6ac8b3211b99
2019-08-28T23:35... WaterfallStep 2 GetPointOfInterestLocations ... 6ac8b3211b99
2019-08-28T19:41... WaterfallStart Nul ... 8137d76a5cbb
2019-08-28T19:41... WaterfallStep 2 GetPointOfInterestLocations ... 8137d76a5cbb
2019-08-28T19:41... WaterfallStart Nul ... 8137d76a5cbb

1 Voltooid

2 Verlaten

Interpretatie: Gebruikers lijken het gesprek in de stap GetPointOfInterestLocations te verlaten.

Notitie

Watervaldialoogvensters voeren een reeks uit (starten, meerdere stappen, voltooid). Als een reeks het begin zonder voltooid weergeeft, betekent dit dat het dialoogvenster is onderbroken omdat de gebruiker het dialoogvenster afbreekt of annuleert. In deze gedetailleerde analyse ziet u dit gedrag (zie voltooide versus verlaten stappen).

Watervalstart/stap/volledige/annuleren stappen totalen aggregeren

In dit voorbeeld ziet u de geaggregeerde totalen van het totale aantal keren dat een dialoogvensterreeks is gestart, het gecombineerde totale aantal watervalstappen, hoeveel zijn voltooid, hoeveel zijn geannuleerd en het verschil tussen WaterfallStart en het gecombineerde totaal van WaterfallComplete plus WaterfallCancel geeft u het totale aantal verlaten.

// Drill down: Aggregate view of waterfall start/step/complete/cancel steps totals for specific dialog
let queryStartDate = ago(14d);
let queryEndDate = now();
let DialogSteps=(dlgid:string) {
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| extend DialogId = customDimensions['DialogId']
| where DialogId == dlgid
| project name
| summarize count() by name
};
// For example see SampleDialogId behavior
DialogSteps("<SampleDialogId>")
Voorbeelden van statistische queryresultaten voor waterval
name count
WaterfallStart 21
WaterfallStep 47
WaterfallComplete 11
WaterfallCancel 1

Interpretatie: Van 21 aanroepen van een dialoogvensterreeks, is slechts 11 voltooid, zijn 9 afgelaten en is er een geannuleerd door de gebruiker.

Gemiddelde duur in dialoogvenster

In dit voorbeeld wordt de gemiddelde hoeveelheid tijd die gebruikers besteden in een bepaald dialoogvenster meten. Uw bot kan profiteren van het vereenvoudigen van dialoogvensters die lang duren voordat een gebruiker is voltooid.

// Average dialog duration
let queryStartDate = ago(14d);
let queryEndDate = now();
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| where name=="WaterfallStart"
| extend DialogId = customDimensions['DialogId']
| extend instanceId = tostring(customDimensions['InstanceId'])
| join kind=leftouter (customEvents | where name=="WaterfallCancel" | extend instanceId = tostring(customDimensions['InstanceId'])) on instanceId
| join kind=leftouter (customEvents | where name=="WaterfallComplete" | extend instanceId = tostring(customDimensions['InstanceId'])) on instanceId
| extend duration = case(not(isnull(timestamp1)), timestamp1 - timestamp,
not(isnull(timestamp2)), timestamp2 - timestamp, 0s) // Abandoned aren't counted. Alternate: now()-timestamp
| extend seconds = round(duration / 1s)
| summarize AvgSeconds=avg(seconds) by tostring(DialogId)
| order by AvgSeconds desc nulls last
| render barchart with (title="Duration in Dialog")

Voorbeeld van queryresultaten met gemiddelde duur

Voorbeeldgrafiek van dialoogvensterduur.

Gemiddelde stappen in dialoogvenster

In dit voorbeeld ziet u de 'lengte' van elk aangeroepen dialoogvenster, zoals berekend op gemiddelde, minimum, maximum en standaarddeviatie. Dit kan helpen bij het analyseren van de kwaliteit van dialoogvensters. Voorbeeld:

  • Dialoogvensters met te veel stappen moeten worden geëvalueerd voor vereenvoudigingsmogelijkheden.
  • Dialoogvensters met een brede kloof tussen min/max/gemiddelde kunnen betekenen dat gebruikers vastlopen bij het voltooien van de taken. Mogelijk moet u de mogelijkheid evalueren dat er kortere paden zijn om de taken te voltooien of manieren om de complexiteit van het dialoogvenster te verminderen.
  • In dialoogvensters met een grote standaarddeviatie worden complexe paden of verbroken ervaringen voorgesteld (verlaten/annuleren).
  • Dialoogvensters met een paar stappen zijn mogelijk zo omdat ze nooit zijn voltooid. Het analyseren van de voltooiings-/afbrekingspercentages kan helpen om die beslissing te nemen.
// min/max/std/avg steps per dialog
let queryStartDate = ago(14d);
let queryEndDate = now();
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| extend DialogId = tostring(customDimensions['DialogId'])
| extend StepName = tostring(customDimensions['StepName'])
| extend InstanceId = tostring(customDimensions['InstanceId'])
| where name == "WaterfallStart" or  name == "WaterfallStep" or  name == "WaterfallComplete"
| order by InstanceId, timestamp asc
| project timestamp, DialogId, name, InstanceId, StepName
| summarize cnt=count() by InstanceId, DialogId
| summarize avg=avg(cnt), minsteps=min(cnt),maxsteps=max(cnt), std=stdev(cnt) by DialogId
| extend avgsteps = round(avg, 1)
| extend avgshortbysteps=maxsteps-avgsteps
| extend avgshortbypercent=round((1.0 - avgsteps/maxsteps)*100.0, 1)
| project DialogId, avgsteps, minsteps, maxsteps, std, avgshortbysteps, avgshortbypercent
| order by std desc nulls last

Voorbeeld van queryresultaten met gemiddelde stappen

Dialoogvenster-id gemiddelde stappen minimale stappen max. stappen std avg short by steps gemiddelde kort per procent
FindArticlesDialog 6,2 2 7 2.04 0,8 11.4%
CreateTicket 4.3 2 5 1.5 0,7 14%
CheckForCurrentLocation 3.9 2 5 1.41 1.1 22%
BaseAuth 3.3 2 4 1,03 0,7 17.5%
onboarden 2.7 2 4 0.94 1.3 32.5%

__Interpretation: FindArticlesDialog heeft bijvoorbeeld een brede spread tussen min/max en moet worden onderzocht en mogelijk opnieuw ontworpen en geoptimaliseerd.

Metrische gegevens kanaalactiviteit per activiteit

In dit voorbeeld wordt de hoeveelheid activiteit die uw bot ontvangt per kanaal in de opgegeven periode meten. Dit doet u door een van de volgende metrische gegevens te tellen: inkomende berichten, gebruikers, gesprekken of dialoogvensters. Dit kan handig zijn voor servicestatusanalyse of om de populariteit van kanalen te meten.

// number of metric: messages, users, conversations, dialogs by channel
let queryStartDate = ago(14d);
let queryEndDate = now();
let groupByInterval = 1d;
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| extend InstanceId = tostring(customDimensions['InstanceId'])
| extend DialogId = tostring(customDimensions['DialogId'])
| extend ActivityId = tostring(customDimensions['activityId'])
| extend ChannelId = tostring(customDimensions['channelId'])
| where DialogId != '' and  InstanceId != '' and user_Id != ''
| extend metric = user_Id // InstanceId or ActivityId or user_Id
| summarize Count=count(metric) by  ChannelId, bin(timestamp, groupByInterval)
| order by Count desc nulls last
| render barchart with (title="Users", kind=stacked) // or Incoming Messages or Conversations or Users

Tip

U kunt overwegen om deze variaties uit te proberen:

  • Voer de query uit zonder de tijdstempel-bucketing: bin(timestamp, groupByInterval).
  • U kunt ook gebruiken dcount voor afzonderlijke gebruikers en count voor alle activiteiten van gebruikersevenementen. Dit werkt ook voor herhalende gebruikers.

Voorbeeld van queryresultaten van kanaalactiviteit per activiteit

Voorbeelddiagram van kanaalgebruik.

Interpretatie: Emulatortests waren vroeger het populairst, maar zodra we live gingen, is DirectLineSpeech het populairste kanaal.

Totaal aantal intenties op populariteit

Dit voorbeeld is van toepassing op bots met LUIS. Het toont een samenvatting van alle intenties op populariteit en de bijbehorende betrouwbaarheidsscore voor intentiedetectie.

Notitie

Language Understanding (LUIS) wordt op 1 oktober 2025 buiten gebruik gesteld. Vanaf 1 april 2023 kunt u geen nieuwe LUIS-resources maken. Er is nu een nieuwere versie van taalkennis beschikbaar als onderdeel van Azure AI Language.

Conversational Language Understanding (CLU), een functie van Azure AI Language, is de bijgewerkte versie van LUIS. Zie Natuurlijke taalkennis voor meer informatie over ondersteuning voor taalkennis in de Bot Framework SDK.

  • In de praktijk moet de weergave worden gescheiden voor elke metrische waarde.
  • Populaire intentiepaden moeten worden geoptimaliseerd voor gebruikerservaring.
  • Lage gemiddelde scores duiden op slechte herkenning en mogelijke ontbrekende werkelijke intentie van de gebruiker.
// show total intents
let queryStartDate = ago(14d);
let queryEndDate = now();
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| where name startswith "LuisResult"
| extend intentName = tostring(customDimensions['intent'])
| extend intentScore = todouble(customDimensions['intentScore'])
| summarize ic=count(), ac=avg(intentScore)*100 by intentName
| project intentName, ic, ac
| order by ic desc nulls last
| render barchart with (kind=unstacked, xcolumn=intentName, ycolumns=ic,ac, title="Intents Popularity")

Voorbeeld van queryresultaten voor intenties op populariteit

Voorbeeldgrafiek van intentie-populariteit.

Interpretatie: bijvoorbeeld de populairste intentie, bevestigt dat er gemiddeld slechts 23% betrouwbaarheid is gedetecteerd.

Tip

Staafdiagrammen zijn een van meer dan tien opties die beschikbaar zijn met Kusto-query's. Enkele andere opties zijn: anomaliediagram, vlakdiagram, kolomdiagram, lijndiagram, spreidingsdiagram. Zie het onderwerp renderoperator voor meer informatie.

Schema van Bot Analytics Instrumentation

In de volgende tabellen worden de meest voorkomende velden weergegeven waarmee uw bot telemetriegegevens zal registreren.

Algemene envelop

Algemene log analytics-velden in Application Insights-instrumentatie.

Veld Beschrijving Voorbeeldwaarden
naam Berichttype BotMessageSend, BotMessageReceived, LuisResult, WaterfallStep, WaterfallStart, SkillWebSocketProcessRequestLatency, SkillWebSocketOpenCloseLatency, WaterfallComplete, QnaMessage, WaterfallCancel, SkillWebSocketTurnLatency, AuthPromptValidatorAsyncFailure
customDimensions SDK Bot Analytics activityId=<id>, activityType=message, channelId=emulator, fromId=<id>, fromName=User, locale=en-us, recipientId=<id>, recipientName=Bot, text=find a coffee shop
timestamp Tijdstip van gebeurtenis 2019-09-05T18:32:45.287082Z
instance_Id Gespreks-id f7b2c416-a680-4b2c-b4cc-79c0f03d8711
operation_Id Id draaien 084b2856947e3844a5a18a8476d99aaa
user_Id Unieke gebruikers-id van kanaal emulator7c259c8e-2f47...
client_IP Ip-adres van client 127.0.0.1 (mogelijk afwezig vanwege privacyblok)
client_City Clientstad Redmond (indien gedetecteerd, is mogelijk afwezig)

Notitie

Azure AI QnA Maker wordt op 31 maart 2025 buiten gebruik gesteld. Vanaf 1 oktober 2022 kunt u geen nieuwe resources of kennisbanken voor QnA Maker maken. Een nieuwere versie van de vraag- en antwoordmogelijkheid is nu beschikbaar als onderdeel van Azure AI Language.

Aangepaste vraagantwoorden, een functie van Azure AI Language, is de bijgewerkte versie van de QnA Maker-service. Zie Natuurlijke taalbegrip voor meer informatie over vraag- en antwoordondersteuning in de Bot Framework SDK.

Notitie

Language Understanding (LUIS) wordt op 1 oktober 2025 buiten gebruik gesteld. Vanaf 1 april 2023 kunt u geen nieuwe LUIS-resources maken. Er is nu een nieuwere versie van taalkennis beschikbaar als onderdeel van Azure AI Language.

Conversational Language Understanding (CLU), een functie van Azure AI Language, is de bijgewerkte versie van LUIS. Zie Natuurlijke taalkennis voor meer informatie over ondersteuning voor taalkennis in de Bot Framework SDK.

Aangepaste dimensies

De meeste botspecifieke activiteitsgegevens worden opgeslagen in het veld customDimensions .

Veld Beschrijving Voorbeeldwaarden
activityId Bericht-id <id>: 8da6d750-d00b-11e9-80e0-c14234b3bc2a
activityType Type bericht bericht, conversationUpdate, gebeurtenis, aanroepen
channelId Kanaal-id emulator, directline, msteams, webchat
fromId Van-id <id>
fromName Gebruikersnaam van klant John Bonham, Keith Moon, Steve Smith, Steve Gadd
locale Oorspronkelijke landinstelling van klant en-us, zh-cn, en-GB, de-de, zh-CN
recipientId Ud van ontvanger <id>
recipientName Naam van ontvanger John Bonham, Keith Moon, Steve Smith, Steve Gadd
sms verzenden Tekst in bericht een koffiebar zoeken

Aangepaste dimensies: LUIS

Notitie

Language Understanding (LUIS) wordt op 1 oktober 2025 buiten gebruik gesteld. Vanaf 1 april 2023 kunt u geen nieuwe LUIS-resources maken. Er is nu een nieuwere versie van taalkennis beschikbaar als onderdeel van Azure AI Language.

Conversational Language Understanding (CLU), een functie van Azure AI Language, is de bijgewerkte versie van LUIS. Zie Natuurlijke taalkennis voor meer informatie over ondersteuning voor taalkennis in de Bot Framework SDK.

Met LUIS-instrumentatie worden de gegevens opgeslagen in de volgende velden Aangepaste dimensies.

Veld Beschrijving Voorbeeldwaarden
intentie Luis gedetecteerde intentie pointOfInterestSkill
intentScore LUIS-herkenningsscore 0,98
Entiteiten Gedetecteerde LUIS-entiteiten FoodOfGrocery = [["koffie"]], KEYWORD= ["koffiebar"]
Vraag Luis gedetecteerde vraag een koffiebar zoeken
sentimentLabel Gevoel gedetecteerd door LUIS positief

Aangepaste dimensies: QnAMaker

Notitie

Azure AI QnA Maker wordt op 31 maart 2025 buiten gebruik gesteld. Vanaf 1 oktober 2022 kunt u geen nieuwe resources of kennisbanken voor QnA Maker maken. Een nieuwere versie van de vraag- en antwoordmogelijkheid is nu beschikbaar als onderdeel van Azure AI Language.

Aangepaste vraagantwoorden, een functie van Azure AI Language, is de bijgewerkte versie van de QnA Maker-service. Zie Natuurlijke taalbegrip voor meer informatie over vraag- en antwoordondersteuning in de Bot Framework SDK.

QnAMaker-instrumentatie slaat de gegevens op in de volgende velden Aangepaste dimensies.

Tip

Als u logboekregistratie van persoonlijke gegevens, zoals vragen en antwoorden, wilt inschakelen, moet de parameter voor persoonlijke gegevens in het logboek worden ingesteld op waar in de constructor van de QnA Maker-klasse .

Veld Beschrijving Voorbeeldwaarden
-vraag QnA gedetecteerde vraag Wat kun je doen?
answer QnA-antwoord Je hebt vragen, ik heb misschien antwoorden.
articleFound QnA true
questionId QnA-vraag-id 488
knowledgeBaseId QnA KB-id 2a4936f3-b2c8-44ff-b21f-67bc413b9727
matchedQuestion Matrix met overeenkomende vragen ["Kunt u me uitleggen wat uw rol is?","Kunt u me een beetje over uzelf vertellen?","Kunt u me vertellen?","kunt u me helpen","hmmm zodat wat u kunt doen?","hoe kunt u mij helpen","Hoe kunt u mij helpen?","Hoe kunt u mij helpen?","Hoe kan ik u helpen?","Hoe kan ik u gebruiken in mijn projecten?", "Praat met mij over uw mogelijkheden","Waar bent u in staat?", ...]

Zie ook