Integreer aangepaste agenten met Aanbevolen Acties Agent

De Recommended Actions Agent in Dynamics 365 Sales geeft prioriteit aan aanbevelingen voor kansen. Het biedt een gedeelde scorepipeline, datacontracten en bidirectionele toestandssynchronisatie, zodat elke custom agent aanbevelingen kan doen naast first-party agenten.

Dit artikel beschrijft de architectuur, belangrijke componenten, datacontracten en integratieflow die worden gebruikt wanneer een custom agent integreert met de Recommended Actions Agent. Het biedt de basiskennis die nodig is voor het implementeren van een integratie.

Prerequisites

  • NextBestActionAgent-oplossing die wordt ingezet bij de doelorganisatie. Voor meer informatie, zie Een agent importeren in een doelomgeving.

  • De verkoper heeft passende Dataverse-beveiligingsrollen zoals beschreven in Rechten die vereist zijn voor aangepaste beveiligingsrollen.

  • Een stabiele, unieke SourceAgentId-string voor de custom agent. Voor meer informatie, zie Aangepaste agenten toevoegen voor aanbevolen acties.

  • De volgende rechten zijn vereist om aanbevolen acties te pushen:

    Tabel Vereiste bevoegdheden Omvang
    msdyn_rawactioncatalogue Lezen, Schrijven, Toevoegen en AppendTo Global
    msdyn_prioritizedactioncatalogue Lezen, Schrijven, Toevoegen en AppendTo Global
    msdyn_recommendedactionsourceagentconfig Read Global
    msdyn_salesagentprofile Read Global

Integratiearchitectuur

De integratie van de Aanbevolen Acties Agent gebruikt een verwerkingspijplijn die ruwe acties van bronagenten opneemt, deze beoordeelt met behulp van een UICE (Urgency, Impact, Confidence, Effort) score-engine en de geprioriteerde resultaten in de verkoperscarrousel naar boven brengt.

De verwerkingspijplijn werkt als volgt:

  1. De custom agent detecteert een bruikbaar inzicht (bijvoorbeeld een dealrisico, een vastgelopen deal of een ontbrekende stakeholder).
  2. De custom agent roept de msdyn_PushActionDataToRecommendedActionAgent custom API aan om de actie te pushen.
  3. De actie wordt opgeslagen in msdyn_rawactioncatalogue (invoertabel).
  4. Voor elke actie volgt de Scoring Engine:
    • Haalt entiteitssignalen op uit Dataverse.
    • Haalt agentspecifieke prioriteitsaanduidingsgegevens op uit de actiecatalogus.
    • Roept de LLM op om de actie te beoordelen op UICE (Urgency, Impact, Confidence, Effort) dimensies.
    • Past vloer- en plafondregels toe.
    • Berekent de eindprioriteitsscore door gebruik te maken van GetRecommendedActionAgentResponse.
  5. De gescorede actie wordt ingevoegd in msdyn_prioritizedactioncatalogue (outputtabel).
  6. De Aanbevolen Acties Agent Carrousel haalt scorede acties op en rendert kaarten.

Belangrijke onderdelen

De integratie is afhankelijk van de volgende Dataverse-tabellen en API's.

Onderdeel Locatie Description
Invoertabel msdyn_rawactioncatalogue (Dataverse) Rawe acties die custom agents pushen
Uitvoertabel msdyn_prioritizedactioncatalogue (Dataverse) Gescoorde en gerangschikte acties voor de gebruikersinterface
Agentconfiguratie msdyn_recommendedactionsourceagentconfig (Dataverse) Registratie en configuratie per agent
Push-API msdyn_PushActionDataToRecommendedActionAgent (Aangepaste API) Agent → Aanbevolen acties Agent-actiepush

Agentregistratie

Registreer aangepaste agenten bij de Aanbevolen Acties-agent zodat het platform hun acties herkent en ophaalt. Voor meer informatie over registrerende agenten, zie Aangepaste agenten toevoegen voor aanbevolen acties.

Wanneer je een agent registreert, wordt er een invoer in msdyn_recommendedactionsourceagentconfiggemaakt. De unieke SourceAgentId identificeert de invoer voor de custom agent.

Agentconfiguratie

De msdyn_recommendedactionsourceagentconfig tabel bevat de configuratie per agent die bepaalt hoe de Aanbevolen Acties-agent de acties van een agent interpreteert. De twee belangrijkste velden om te bevolken zijn msdyn_internalprioritizationinstruction en msdyn_syncactionexecutionstateapiconfig.

Je kunt configuratie toepassen door handmatig het tabelrecord bij te werken of door de aangepaste API UpsertRecommendationAgentConfigRequestaan te roepen.

UpsertRecommendationAgentConfigRequest schema

Het volgende voorbeeld toont de beschikbare configuratievelden in het schema.

{
  "agentName": "YourAgentName",
  "agentType": "CustomAgent",
  "isRecommendedActionAgentEnabled": true,
  "salesAgentProfileId": "<SourceAgentId that was configured>",
  "agentImpactMapping": "[]",
  "internalPrioritizationInstruction": "{\"signals\":[...]}",
  "syncActionExecutionStateApiConfig": "{\"syncactionuistatusapiname\":\"your_SyncBackCustomApiName\"}",
  "description": "Brief description of your agent"
}
JSON-veld Typ Description
agentName tekenreeks Kaarten naar msdyn_agentname (maximaal 850 karakters). Vereist voor nieuwe records.
agentType tekenreeks Agentcategorie. Gebruik "CustomAgent" voor niet-Sales Opportunity Agent-agenten om automatisch een profiel aan te maken.
isRecommendedActionAgentEnabled booleaans Kaarten naar msdyn_isrecommendedactionagentenabled. Null = ongewijzigd laten.
salesAgentProfileId Guid? Links naar msdyn_salesagentprofile. Wordt gebruikt voor het opzoeken van records in upsert.
agentImpactMapping tekenreeks Flat JSON-array van hoofdnamen. Kaarten naar msdyn_agentimpactmapping.
internalPrioritizationInstruction tekenreeks JSON met signaalarray. Kaarten naar msdyn_internalprioritizationinstruction.
syncActionExecutionStateApiConfig tekenreeks JSON-object {"syncactionuistatusapiname":"..."}. Kaarten naar msdyn_syncactionexecutionstateapiconfig.
sourceAgentUniqueId tekenreeks Kaarten naar msdyn_sourceagentuniqueid.
description tekenreeks Kaarten naar msdyn_sourcedescription (maximaal 1000 karakters).

Interne prioriteitstellingsinstructie

De interne prioriteringsinstructie bevat agent-specifieke signaalmetadata die de score-engine vertelt hoe de prioriteringsdatavelden van een agent moeten interpreteren. Het is een JSON-object met een array op topniveau signals . Elk signaal wordt gedeserialiseerd met AgentSignalInstructionConfig de volgende velden:

Veld Typ Description
naam tekenreeks Signaalidentificatie — gebruikt als sleutel in de Signaalreferentiesectie van de scoreprompt
type tekenreeks Gegevenstype: "string", "number", "booleaan"
source tekenreeks Beschrijvend label voor waar het signaal vandaan komt. Niet gebruikt voor routering — fetch_info.fetch_type regelt het daadwerkelijke fetch-mechanisme. Meestal "action_data" voor door agenten gepushte signalen.
dimension_influence {dimensie: kracht} Welke UICE-dimensies dit signaal beïnvloedt en hoe sterk. Sleutels: "urgentie", "impact", "vertrouwen", "inspanning". Sterke punten: "sterk", "gematigd", "zwak"
interpretatie tekenreeks Natuurlijke taalbeschrijving van wat het signaal betekent voor het scoren — geïnjecteerd in de LLM-prompt
betrouwbaarheid tekenreeks Hoe betrouwbaar dit signaal is: "hoog", "medium", "laag"
Verplicht booleaans Of het signaal aanwezig moet zijn voor scoren
fetch_info object Bepaalt waar en hoe de signaalwaarde wordt opgehaald tijdens het scoren.

Voorbeeld van signaalblok:

{
  "signals": [
    {
      "name": "risk_type",
      "type": "string",
      "source": "action_data",
      "dimension_influence": { "urgency": "moderate", "confidence": "weak" },
      "interpretation": "Risk category code assigned by the source agent (e.g. 8 = Missing BANT Info). Used for pre-filter rule matching and prompt context.",
      "reliability": "high",
      "required": false,
      "fetch_info": { "fetch_type": "action_data", "crm_field": "riskType" }
    },
    {
      "name": "risk_label",
      "type": "string",
      "source": "action_data",
      "dimension_influence": { "urgency": "weak", "confidence": "weak" },
      "interpretation": "Human-readable risk name from the source agent (e.g. 'Missing BANT Info', 'Stalled Pipeline'). Useful for prompt context and seller explanation.",
      "reliability": "high",
      "required": false,
      "fetch_info": { "fetch_type": "action_data", "crm_field": "risk" }
    }
  ]
}

API-configuratie voor het synchroniseren van de uitvoeringsstatus van acties

De sync action execution state API-configuratie is een JSON-object dat de aangepaste API-naam specificeert die de Aanbevolen Actiesagent aanroept wanneer een verkoper op een kaart handelt (bijvoorbeeld deze als compleet of irrelevant markeert). Met deze API stelt u de status van de actie in de aangepaste bronagent in.

{
  "syncactionuistatusapiname": "your_SyncBackCustomApiName"
}

Actie push-contract

Custom agents pushen acties via de msdyn_PushActionDataToRecommendedActionAgent custom API. De API wordt aangeroepen telkens wanneer de agent een actie genereert of bijwerkt voor een doelentiteit.

Aanvraagparameters

Parameter Typ Required Description
msdyn_ActionId tekenreeks Ja De unieke identificatie van de agent voor deze actie. Wordt gebruikt voor ontdubbeling en statussynchronisatie. Moet deterministisch zijn (dezelfde actie = dezelfde id). Voorbeeldindeling: DealRisk_{opportunityId}_{riskType}
msdyn_SourceAgentId tekenreeks Ja Agent's identificatie. Moet overeenkomen met de msdyn_agentname in het agentconfiguratierecord. Voorbeeld: "DealClosingAgent"
msdyn_TargetEntityId uniqueidentifier (GUID) Ja GUID van het doelrecord (Opportunity, Lead) waaraan deze actie betrekking heeft
msdyn_TargetEntityTypeName tekenreeks Ja Logische naam van de doelentiteit. Voorbeeld: "kans", "lead"
msdyn_ActionReason tekenreeks Ja De reden waarom de actie is gegenereerd. Wordt gebruikt door de score-engine voor principetoewijzing.
msdyn_ActionUIPayload tekenreeks No JSON-payload voor kaartrendering. Als deze wordt weggelaten, kan de Aanbevolen Acties-agent de kaart niet weergeven.
msdyn_ActionPrioritizationData tekenreeks No JSON met agent-specifieke gegevens voor scoring
msdyn_ActionCTA tekenreeks No CTA-type tekenreeks. Voorbeeld: "E-mail", "Review", "Call"
msdyn_PrioritizationPrinciples tekenreeks No JSON-array van prioriteringsprincipes waarmee deze specifieke actie overeenkomt (kan de toewijzing op agentniveau overschrijven)

Voorbeeld: C# plugin-aanroep

var request = new OrganizationRequest("msdyn_PushActionDataToRecommendedActionAgent")
{
    ["msdyn_ActionId"] = $"DealRisk_{opportunityId}_{riskType}",
    ["msdyn_SourceAgentId"] = "DealClosingAgent",
    ["msdyn_TargetEntityId"] = opportunityId, // Guid
    ["msdyn_TargetEntityTypeName"] = "opportunity",
    ["msdyn_ActionReason"] = "Customer has not responded in 14 days, deal is at risk of stalling",

    ["msdyn_ActionUIPayload"] = JsonConvert.SerializeObject(new
    {
        version = "1.0",
        payload = new
        {
            header = "Follow up with Contoso",
            description = "No customer response in 14 days. Deal may stall without re-engagement.",
            oncardClickActionType = "Navigate",
            oncardClickActionTypeParameters =
                "{etn=\"opportunity\", id=\"aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb\", pagetype=\"entityrecord\"}"
        }
    }),

    ["msdyn_ActionPrioritizationData"] = JsonConvert.SerializeObject(new
    {
        riskType = "14",
        risk = "low"
    })
};

var response = orgService.Execute(request);

bool success = (bool)response["msdyn_IsSuccess"];

Action UI payloadcontract

Het msdyn_ActionUIPayload veld bevat een JSON-payload die bepaalt hoe een actiekaart verschijnt in de Recommended Actions Agent-carrousel.

{
  "version": 1.0,
  "header": "Follow up with Contoso on pricing proposal",
  "description": "Stakeholder engagement has dropped. The customer expressed interest in the enterprise tier but hasn't responded to the last proposal sent 10 days ago.",
  "oncardClickActionType": "Navigate",
  "oncardClickActionTypeParameters": "{\"etn\":\"opportunity\",\"id\":\"<guid>\",\"pagetype\":\"entityrecord\"}",
  "onctaClickActionType": "Navigate",
  "onctaClickActionTypeParameters": "{\"etn\":\"opportunity\",\"id\":\"<guid>\",\"pagetype\":\"entityrecord\"}"
}

Prioriteringsdatacontract

Het msdyn_prioritizationdata veld laat een agent agent-specifieke signalen doorgeven die bepalen hoe de UICE-scoreengine een actie prioriteert.

[
  { "signalName": "risk", "value": "low" },
  { "signalName": "riskType", "value": "4" }
]

De score-engine leest deze signalen samen met entiteitsniveau-signalen (dealwaarde, stage, concurrenten, enzovoort). De msdyn_internalprioritizationinstruction agent config vertelt de LLM hoe elk signaal moet interpreteren, en de scoring engine combineert alle signalen in de UICE-scoreprompt.

Actieversieering en ongeldigverklaring

Wanneer een agent gegevens bijwerkt voor een eerder gepushte actie, maakt hij een nieuw record aan met dezelfde msdyn_ActionId door opnieuw aan te roepen msdyn_PushActionDataToRecommendedActionAgent . Het systeem maakt een nieuwe rij in msdyn_rawactioncatalogue met hetzelfde msdyn_actionid, maar een nieuwe msdyn_rawactioncatalogueid. De Aanbevolen Acties-agent blijft de oude versie tonen totdat de nieuwe wordt verwerkt.

Om een actie ongeldig te maken (bijvoorbeeld wanneer een risico is opgelost), roept de agent de msdyn_RAAgent_RemoveActionsV2 aangepaste API aan met de actionId. Deze actie markeert alle msdyn_rawactioncatalogue records voor die actie als inactief, en de kaart verdwijnt uit de carrousel.

Bidirectionele toestandssynchronisatie

De actiestatus synchroniseert zowel in de Aanbevolen Acties-agentcarrousel als in uw custom agent, zodat verkopers consistente informatie zien, ongeacht waar ze handelen tijdens een actie.
Aanbevolen Acties Agent → Custom Agent (verkoper handelt in de carrousel): Wanneer een verkoper een handeling als Voltooid of Afgewezen markeert in de carrousel:

  1. Agent voor aanbevolen acties werkt de msdyn_actionuistatus bij in msdyn_prioritizedactioncatalogue.
  2. Aanbevolen Acties Agent leest de msdyn_syncactionexecutionstateapiconfig uit de agentconfiguratie.
  3. Aanbevolen Acties Agent roept de aangepaste API van de agent aan met:
Parameter Typ Description
Actionid GUID De actie-id
state tekenreeks "GemarkDone" of "Afgewezen"

De agent moet een aangepaste API implementeren die deze twee parameters accepteert en de actiestatus in zijn eigen datastore bijwerkt.

Custom agent → Aanbevolen Acties Agent (verkoper handelt in de gebruikersinterface van de agent): Wanneer een verkoper handelt op een actie in de eigen UI van de agent (bijvoorbeeld deze markeert als gemitigeerd op een aangepaste agentpagina), synchroniseert de agent die status met de Aanbevolen Acties-agent door aan te roepen msdyn_SyncActionExecutionStateFromAgent. Met deze actie wordt de status in de uitvoertabel van de agent Aanbevolen acties bijgewerkt, waardoor deze niet meer in de carrousel wordt weergegeven.

Parameter Typ Required Description
msdyn_ActionId tekenreeks Ja De actie-identificatie (dezelfde als wat werd gepusht)
msdyn_ActionState integer Ja Nieuwe staat — waarden (toegewezen aan MarkAsDone/Dismissed)
msdyn_TargetEntityId uniqueidentifier Ja GUID van doelobject
TargetEntityTypeName tekenreeks Ja Logische naam van doelentiteit
msdyn_TrackingId tekenreeks No Optionele traceer-/correlatie-id

Testen en validatie

Na configuratie en implementatie valideert u de end-to-end flow door de volgende controles uit te voeren.

Controleer de configuratie van de agent:

GET [org-url]/api/data/v9.2/msdyn_recommendedactionsourceagentconfigs
?$filter=msdyn_agentname eq 'YourAgentName'
&$select=msdyn_agentname,msdyn_agentimpactmapping,msdyn_internalprioritizationinstruction,msdyn_syncactionexecutionstateapiconfig

Push een testactie door aan te roepen msdyn_PushActionDataToRecommendedActionAgent en te controleren of dat msdyn_IsSuccess waar is, en een nieuw record verschijnt in msdyn_rawactioncatalogue.

Activeer de score op aanvraag door te bellen msdyn_RAAgent_TriggerRecommendedActionsAgentOrchestration (in plaats van te wachten op de 4-uurs timer).

Controleer de gescorede output:

    GET [org-url]/api/data/v9.2/msdyn_prioritizedactioncatalogues
    ?$filter=msdyn_actionid eq 'your-action-id'
    &$select=msdyn_actionid,msdyn_actionscore,msdyn_actionuipayload,msdyn_hascrossedceiling,msdyn_hascrossedfloor,msdyn_actionuistatus,msdyn_scoredetails

Verwachte waarden:

  • msdyn_actionscore wordt gevuld met een waarde in het bereik van 0-10.
  • msdyn_hascrossedfloor is vals (actie is boven de vloer en wordt weergegeven in de draaimolen).
  • msdyn_actionuistatus is 1 (Actief).
  • msdyn_scoredetails bevat de door LLM gegenereerde uitleg.

Controleer het carrouseldisplay door een Opportunity-formulier te openen in Dynamics 365 Sales en het gedeelte Voorgestelde Acties aan te vinken. Controleer de statussynchronisatie door een actie in de carrousel te verwijzen (de sync-back API moet worden aangeroepen met state = "Dismissed") en door een actie te markeren in de agent-UI (het uitvoertabelrecord moet de bijgewerkte msdyn_actionuistatusweergave weergeven).

Voorbeeld: Sales Opportunity Agent

Sales Opportunity Agent is de eerste agent die wordt ingeboord bij de Recommended Actions Agent, en de integratie ervan dient als referentie-implementatie.

Agentconfiguratiewaarden:

Configuratieveld Waarde van Sales Opportunity Agent (van OraDefaults.cs)
msdyn_agentname "SalesOpportunityAgent"
msdyn_agentimpactmapping ["DealRisk","Deal Velocity"]
msdyn_syncactionexecutionstateapiconfig {"syncactionuistatusapiname":"msdyn_SyncDealRiskActionFromNba"}
msdyn_internalprioritizationinstruction Bekijk de productiewaarde van de Sales Opportunity Agent

Wanneer het onderzoek van de verkoopkansagent is voltooid en dealrisico's identificeert, plaatst DealRiskToNBAService elk risico als een aparte actie:

Push-parameter Waarde van Sales Opportunity Agent
msdyn_ActionId DealRisk_{opportunityId}_{riskType}
msdyn_SourceAgentId "DealRiskAgent"
msdyn_TargetEntityTypeName "Kans"
msdyn_ActionReason Risicobeschrijving van onderzoek
msdyn_ActionUIPayload Kaart met risicokop + beschrijving
msdyn_ActionPrioritizationData {"riskType":"8","risk":"Missing BANT Info"} (voorbeeld)

Status-synchronisatiegedrag:

  • Verkoopkansagent → Aanbevolen Acties-agent: Wanneer een verkoper een risico als gedaan aangeeft op de onderzoekspagina, belt msdyn_SyncActionExecutionStateFromAgentde makelaar.
  • Aanbevolen Acties Agent → Verkoopkansagent: Wanneer een verkoper een kaart in de carrousel negeert, roept ora_UpdatedActionStateFromRAAgent de Aanbevolen Acties-agent (geconfigureerd in de agentconfiguratie).