Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Agenten för rekommenderade åtgärder i Dynamics 365 Sales visar prioriterade rekommendationer för säljmöjligheter. Den tillhandahåller en delad poängpipeline, datakontrakt och tvåvägs tillståndssynkronisering så att vilken anpassad agent som helst kan lägga fram rekommendationer tillsammans med förstapartsagenter.
Denna artikel beskriver arkitekturen, nyckelkomponenterna, datakontrakten och integrationsflödet som används när en anpassad agent integreras med Recommended Actions Agent. Den ger den grundläggande kunskap som krävs för att genomföra en integration.
Förutsättningar
NextBestActionAgent-lösningen distribuerades till målorganisationen. För mer information, se Importera en agent till en målmiljö.
Säljaren har lämpliga säkerhetsroller i Dataverse som beskrivs i Behörigheter som krävs för anpassade säkerhetsroller.
En stabil, unik SourceAgentId-sträng för den anpassade agenten. För mer information, se Lägg till anpassade agenter för rekommenderade åtgärder.
Följande behörigheter krävs för att skicka rekommenderade åtgärder:
Tabell Privilegier som krävs Scope msdyn_rawactioncatalogue Läs, skriv, lägg till och lägg till i Global msdyn_prioritizedactioncatalogue Läs, skriv, lägg till och lägg till i Global msdyn_recommendedactionsourceagentconfig Read Global msdyn_salesagentprofile Read Global
Integreringsarkitektur
Integrationen av Recommended Actions Agent använder en bearbetningspipeline som tar in råa åtgärder från källagenter, poängsätter dem med hjälp av en UICE-poängmotor (Urgency, Impact, Confidence, Effort) och visar de prioriterade resultaten i säljarkarusellen.
Bearbetningspipelinen fungerar enligt följande:
- Den anpassade agenten upptäcker en handlingsbar insikt (till exempel en affärsrisk, en avstängd affär eller en saknad intressent).
-
Den anpassade agenten anropar det
msdyn_PushActionDataToRecommendedActionAgentanpassade API:et för att skicka åtgärden. - Åtgärden lagras i
msdyn_rawactioncatalogue(inmatningstabell). - För varje åtgärd gör Scoring Engine följande:
- Hämtar entitetssignaler från Dataverse.
- Hämtar agentspecifika prioriteringsdata från åtgärdskatalogen.
- Anropar LLM för att poängsätta åtgärden utifrån UICE-dimensionerna (Brådska, påverkan, konfidens, insats).
- Tillämpar golv- och takregler.
- Beräknar den slutliga prioritetspoängen med hjälp av
GetRecommendedActionAgentResponse.
- Den poängsatta handlingen infogas i
msdyn_prioritizedactioncatalogue(utdatatabellen). - Karusellen för agenten Rekommenderade åtgärder hämtar poängsatta åtgärder och visar kort.
Nyckelkomponenter
Integrationen bygger på följande Dataverse-tabeller och API:er.
| Component | Plats | Beskrivning |
|---|---|---|
| Indatatabell | msdyn_rawactioncatalogue (Dataverse) | Obehandlade åtgärder som anpassade agenter skickar |
| Utdatatabell | msdyn_prioritizedactioncatalogue (Dataverse) | Poängsatta och rankade åtgärder för användargränssnittet |
| Agentkonfiguration | msdyn_recommendedactionsourceagentconfig (Dataverse) | Registrering och konfiguration per agent |
| Push-API | msdyn_PushActionDataToRecommendedActionAgent (Anpassad API) | Agent → Push för rekommenderade agentåtgärder |
Agentregistrering
Registrera anpassade agenter hos Recommended Actions Agent så att plattformen känner igen och hämtar deras handlingar. För mer information om registrerade agenter, se Lägg till anpassade agenter för rekommenderade åtgärder.
När du registrerar en agent skapas en post i msdyn_recommendedactionsourceagentconfig. Den unika SourceAgentId identifierar posten för den anpassade agenten.
Agentkonfiguration
Tabellen msdyn_recommendedactionsourceagentconfig innehåller en konfiguration per agent som styr hur Rekommenderade Handlingsagenten tolkar en agents handlingar. De två viktigaste fälten att befolka är msdyn_internalprioritizationinstruction och msdyn_syncactionexecutionstateapiconfig.
Du kan tillämpa konfiguration antingen genom att manuellt uppdatera tabellposten eller genom att anropa det anpassade API:et UpsertRecommendationAgentConfigRequest.
UpsertRecommendationAgentConfigRequest schema
Följande exempel visar de tillgängliga konfigurationsfälten i schemat.
{
"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-fält | Type | Beskrivning |
|---|---|---|
| agentName (agentnamn) | string | Kartar till msdyn_agentname (max 850 tecken). Krävs för nya poster. |
| agenttyp | string | Kategori för agent. Använd "CustomAgent" för agenter som inte är Sales Opportunity Agent för att automatiskt skapa en profil. |
| isRecommendedActionAgentEnabled | Boolean | Kartor till msdyn_isrecommendedactionagentenabled. Null = lämna oförändrat. |
| salesAgentProfileId | Guid? | Länkar till msdyn_salesagentprofile. Används för postsökning på upsert. |
| agentImpactMapping | string | Platt JSON-array av huvudnamn. Kartor till msdyn_agentimpactmapping. |
| internPrioriteringsinstruktion | string | JSON med signalmatris. Kartor till msdyn_internalprioritizationinstruction. |
| syncActionExecutionStateApiConfig | string | JSON-objekt {"syncactionuistatusapiname":"..."}. Kartor till msdyn_syncactionexecutionstateapiconfig. |
| sourceAgentUniqueId | string | Kartor till msdyn_sourceagentuniqueid. |
| description | string | Mappar till msdyn_sourcedescription (max 1000 tecken). |
Intern prioriteringsinstruktion
Den interna prioriteringsinstruktionen innehåller agentspecifik signalmetadata som talar om för poängmotorn hur agentens prioriteringsdatafält ska tolkas. Det är ett JSON-objekt med en signals-array på toppnivå. Varje signal deserialiseras till AgentSignalInstructionConfig med följande fält:
| Fält | Type | Beskrivning |
|---|---|---|
| Namn | string | Signalidentifierare — används som nyckel i poängpromptens Signal Reference-sektion |
| type | string | Datatyp: "sträng", "nummer", "boolesk" |
| source | string | Beskrivande etikett för var signalen kommer ifrån. Används inte för routing – fetch_info.fetch_type styr själva hämtningsmekanismen. Vanligtvis "action_data" för agentstyrda signaler. |
| dimension_influence | {dimension: styrka} | Vilka UICE-dimensioner denna signal påverkar och hur starkt. Nycklar: "brådska", "påverkan", "självförtroende", "ansträngning". Styrkor: "stark", "måttlig", "svag" |
| tolkning | string | Naturlig beskrivning av vad signalen betyder för poängräkning — injicerat i LLM-prompten |
| pålitlighet | string | Hur pålitlig denna signal är: "hög", "medel", "låg" |
| Krävs | Boolean | Om signalen måste finnas för bedömning |
| fetch_info | object | Styr var och hur signalvärdet hämtas vid bedömningstillfället. |
Exempel på signalblock:
{
"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-konfiguration för körningstillståndet för synkroniseringsåtgärder
API-konfigurationen för synkroniseringsåtgärdens exekveringstillstånd är ett JSON-objekt som specificerar det anpassade API-namnet som Recommended Actions Agent anropar när en säljare agerar på ett kort (till exempel markerar det som komplett eller irrelevant). Det här API:et anger status för åtgärden i den anpassade källagenten.
{
"syncactionuistatusapiname": "your_SyncBackCustomApiName"
}
Pushkontrakt för åtgärder
Anpassade agenter skickar handlingar genom att använda det msdyn_PushActionDataToRecommendedActionAgent anpassade API:et. API:et anropas varje gång agenten genererar eller uppdaterar en åtgärd för en målentitet.
Parametrar för begäran
| Parameter | Type | Krävs | Beskrivning |
|---|---|---|---|
| msdyn_ActionId | string | Yes | Agentens unika identifiering för den här åtgärden. Används för deduplicering och tillståndssynkronisering. Måste vara deterministisk (samma åtgärd = samma ID). Exempelformat: DealRisk_{opportunityId}_{riskType} |
| msdyn_SourceAgentId | string | Yes | Agentens identifierare. Måste överensstämma med msdyn_agentname i agentkonfigurationsposten. Exempel: "DealClosingAgent" |
| msdyn_TargetEntityId | unik identifierare (GUID) | Yes | GUID för målposten (Möjlighet, Led) som denna åtgärd avser |
| msdyn_TargetEntityTypeName | string | Yes | Logiskt namn på målentiteten. Exempel: "möjlighet", "led" |
| msdyn_ActionReason | string | Yes | Orsak till varför åtgärden genererades. Används av bedömningsmotorn för principmappning. |
| msdyn_ActionUIPayload | string | No | JSON-payload för kortrendering. Om det utelämnas kan Recommended Actions Agent inte visa kortet. |
| msdyn_ActionPrioritizationData | string | No | JSON med agentspecifik data för poängsättning |
| msdyn_ActionCTA | string | No | CTA-typsträng. Exempel: "E-post", "Recension", "Samtal" |
| msdyn_PrioritizationPrinciples | string | No | JSON-matris med prioriteringsprinciper som den här specifika åtgärden mappar till (kan åsidosätta mappning på agentnivå) |
Exempel: C#-pluginanrop
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-kontrakt för nyttolast
Fältet msdyn_ActionUIPayload innehåller en JSON-payload som styr hur ett handlingskort visas i Recommended Actions Agent-karusellen.
{
"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\"}"
}
Prioriteringsdatakontrakt
Fältet msdyn_prioritizationdata låter en agent skicka agentspecifika signaler som påverkar hur UICE:s poängmotor prioriterar en handling.
[
{ "signalName": "risk", "value": "low" },
{ "signalName": "riskType", "value": "4" }
]
Poängmotorn läser dessa signaler tillsammans med entitetsnivåsignaler (dealvärde, nivå, konkurrenter och så vidare). I msdyn_internalprioritizationinstruction agentkonfigurationen talar LLM om hur varje signal ska tolkas, och poängmotorn kombinerar alla signaler i UICE:s poängprompt.
Versionshantering och ogiltigförklaring av åtgärder
När en agent uppdaterar data för en tidigare pushad åtgärd skapar den en ny post med samma msdyn_ActionId genom att anropa msdyn_PushActionDataToRecommendedActionAgent igen. Systemet skapar en ny rad i msdyn_rawactioncatalogue med samma msdyn_actionid men en ny msdyn_rawactioncatalogueid. Rekommenderade åtgärder-agenten fortsätter att visa den gamla versionen tills den behandlar den nya.
För att ogiltigförklara en åtgärd (till exempel när en risk löses) anropar agenten det msdyn_RAAgent_RemoveActionsV2 anpassade API:et med .actionId Denna åtgärd markerar alla msdyn_rawactioncatalogue poster för den åtgärden som inaktiva och kortet försvinner från karusellen.
Dubbelriktad synkronisering av tillstånd
Status för åtgärder synkroniseras både i karusellen för agenten Rekommenderade åtgärder och i din anpassade agent för att säkerställa att säljare ser samma information oavsett var de vidtar en åtgärd.
Rekommenderade åtgärder Agent → skräddarsydd agent (säljaren agerar i karusellen): När en säljare markerar en handling som Utförd eller Avvisad i karusellen:
- Rekommenderad åtgärdsagent uppdaterar
msdyn_actionuistatusimsdyn_prioritizedactioncatalogue. - Recommended Actions Agent läser
msdyn_syncactionexecutionstateapiconfigfrån agentkonfigurationen. - Recommended Actions Agent anropar agentens anpassade API med:
| Parameter | Type | Beskrivning |
|---|---|---|
| actionid | GUID | Åtgärdsidentifieraren |
| state | string | "Markerad som klar" eller "Avfärdad" |
Agenten måste implementera ett anpassat API som accepterar dessa två parametrar och uppdaterar åtgärdstillståndet i sin egen datalagring.
Anpassad agent → Rekommenderade åtgärder-agent (säljaren agerar i agentens användargränssnitt): När en säljare agerar på en åtgärd i agentens eget gränssnitt (till exempel markerar den som mitigerad på en anpassad agentsida), synkroniserar agenten det tillståndet till Rekommenderade åtgärder-agenten genom att anropa msdyn_SyncActionExecutionStateFromAgent. Den här åtgärden uppdaterar statusen i utdatatabellen för agenten Rekommenderade åtgärder, så att den inte visas i karusellen.
| Parameter | Type | Krävs | Beskrivning |
|---|---|---|---|
| msdyn_ActionId | string | Yes | Åtgärdsidentifieraren (samma som den som skickades) |
| msdyn_ActionState | integer | Yes | Nytt tillstånd — värden (mappat till MarkAsDone/Dismissed) |
| msdyn_TargetEntityId | unik identifierare | Yes | Målentitets-GUID |
| TargetEntityTypeName | string | Yes | Logisk målentitetsnamn |
| msdyn_TrackingId | string | No | Valfritt spårnings-/korrelations-ID |
Testning och validering
Efter konfiguration och implementering, validera end-to-end-flödet genom att utföra följande kontroller.
Verifiera agentkonfigurationen:
GET [org-url]/api/data/v9.2/msdyn_recommendedactionsourceagentconfigs
?$filter=msdyn_agentname eq 'YourAgentName'
&$select=msdyn_agentname,msdyn_agentimpactmapping,msdyn_internalprioritizationinstruction,msdyn_syncactionexecutionstateapiconfig
Skicka en teståtgärd genom att anropa msdyn_PushActionDataToRecommendedActionAgent och verifiera att msdyn_IsSuccess är sant och att en ny post visas i msdyn_rawactioncatalogue.
Trigga poängsättning på begäran genom att ringa msdyn_RAAgent_TriggerRecommendedActionsAgentOrchestration (istället för att vänta på 4-timmarstimern).
Verifiera poängsatta resultat:
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
Förväntade värden:
-
msdyn_actionscorefylls med ett värde i intervallet 0–10. -
msdyn_hascrossedfloorär falsk (handlingen är ovanför golvet och syns i karusellen). -
msdyn_actionuistatusär 1 (Aktiv). -
msdyn_scoredetailsinnehåller den LLM-genererade förklaringen.
Verifiera karusellens display genom att öppna ett Möjlighetsformulär i Dynamics 365 Sales och kryssa i avsnittet Föreslagna åtgärder. Verifiera tillståndssynkronisering genom att avvisa en åtgärd i karusellen (sync-back-API:et ska anropas med state = "Dismissed") och genom att markera en åtgärd i agentgränssnittet (utdatatabellens post ska återspegla den uppdaterade msdyn_actionuistatus).
Exempel: Försäljningsmöjlighetsagent
Sales Opportunity Agent är den första agenten som tas med i Recommended Actions Agent, och dess integration fungerar som referensimplementation.
Agentkonfigurationsvärden:
| Konfigurationsfält | Värde för försäljningsmöjlighetsagent (från OraDefaults.cs) |
|---|---|
| msdyn_agentname | "Försäljningsmöjlighetsagent" |
| msdyn_agentimpactmapping | ["DealRisk", "Affärshastighet"] |
| msdyn_syncactionexecutionstateapiconfig | {"syncactionuistatusapiname":"msdyn_SyncDealRiskActionFromNba"} |
| msdyn_internalprioritizationinstruction | Se Sales Opportunity Agentens produktionsvärde |
När analysen i Sales Opportunity Agent har slutförts och identifierat affärsrisker skickar DealRiskToNBAService vidare varje risk som en separat åtgärd:
| pushparameter | Värde av försäljningsmöjlighetsagenter |
|---|---|
| msdyn_ActionId | DealRisk_{opportunityId}_{riskType} |
| msdyn_SourceAgentId | DealRiskAgent |
| msdyn_TargetEntityTypeName | "möjlighet" |
| msdyn_ActionReason | Riskbeskrivning från forskning |
| msdyn_ActionUIPayload | Kort med riskrubrik + beskrivning |
| msdyn_ActionPrioritizationData |
{"riskType":"8","risk":"Missing BANT Info"} (exempel) |
Tillståndssynkroniseringsbeteende:
-
Agent för säljmöjligheter → Agent för rekommenderade åtgärder: När en säljare markerar en risk som slutförd på analyssidan anropar agenten
msdyn_SyncActionExecutionStateFromAgent. -
Agenten för rekommenderade åtgärder → Agenten för säljmöjligheter: När en säljare avvisar ett kort i karusellen anropar Agenten för rekommenderade åtgärder
ora_UpdatedActionStateFromRAAgent(konfigurerad i agentkonfigurationen).