Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'Agente delle Azioni Raccomandate in Dynamics 365 Remote Assist presenta raccomandazioni prioritarie per opportunità. Fornisce una pipeline di punteggio condivisa, contratti dati e sincronizzazione bidirezionale degli stati in modo che qualsiasi agente personalizzato possa presentare raccomandazioni insieme agli agenti di prima parte.
Questo articolo descrive l'architettura, i componenti chiave, i contratti dati e il flusso di integrazione utilizzati quando un agente personalizzato si integra con l'Agente delle Azioni Raccomandate. Fornisce le conoscenze fondamentali necessarie per implementare un'integrazione.
Prerequisiti
soluzione NextBestActionAgent distribuita all'organizzazione di destinazione. Per maggiori informazioni, vedi Importa un agente in un ambiente target.
Il venditore ha ruoli di sicurezza Dataverse appropriati come descritto in Permessi richiesti per ruoli di sicurezza personalizzati.
Una stringa SourceAgentId stabile e unica per l'agente personalizzato. Per maggiori informazioni, consulta Aggiungi agenti personalizzati per le azioni consigliate.
I seguenti permessi sono necessari per spingere le azioni raccomandate:
Tabella Privilegi obbligatori Scope msdyn_rawactioncatalogue Leggi, Scrivi, Appendi e AppendA Global msdyn_prioritizedactioncatalogue Leggi, Scrivi, Appendi e AppendA Global msdyn_recommendedactionsourceagentconfig Leggi Global msdyn_salesagentprofile Leggi Global
Architettura di integrazione
L'integrazione con l'Agente di Azioni Raccomandate utilizza una pipeline di elaborazione che assume le azioni grezze dagli agenti sorgente, le valuta tramite un motore di punteggio UICE (Urgenza, Impatto, Fiducia, Sforzo) e mostra i risultati prioritari nel carosello del venditore.
La pipeline di elaborazione funziona come segue:
- L'agente doganale rileva un'intuizione azionabile (ad esempio, un rischio di accordo, un accordo bloccato o un stakeholder assente).
-
L'agente personalizzato chiama l'API
msdyn_PushActionDataToRecommendedActionAgentpersonalizzata per spingere l'azione. - L'azione è memorizzata in
msdyn_rawactioncatalogue(tabella di input). - Per ogni azione, il motore di punteggio:
- Recupera i segnali dell'entità da Dataverse.
- Recupera i dati di priorità specifici dell'agente dal catalogo delle azioni.
- Chiama l'LLM per assegnare un punteggio all'azione secondo le dimensioni UICE (Urgenza, Impatto, Confidenza, Sforzo).
- Applica i limiti minimo e massimo.
- Calcola il punteggio finale di priorità usando
GetRecommendedActionAgentResponse.
- L'azione segnata viene inserita in
msdyn_prioritizedactioncatalogue(tabella di output). - Il carosello Agente delle azioni consigliate recupera le azioni con punteggio e visualizza le schede.
Componenti chiave
L'integrazione si basa sulle seguenti tabelle e API Dataverse.
| Componente | Posizione | Description |
|---|---|---|
| Tabella di input | msdyn_rawactioncatalogue (Dataverse) | Azioni non elaborate che gli agenti personalizzati inviano |
| Tabella dei risultati | msdyn_prioritizedactioncatalogue (Dataverse) | Azioni con punteggio e classificazione per l'interfaccia utente |
| Configurazione dell'agente | msdyn_recommendedactionsourceagentconfig (Dataverse) | Registrazione e configurazione per agente |
| Push API | msdyn_PushActionDataToRecommendedActionAgent (API personalizzata) | Agente → Azioni consigliate Invio dell'azione dell'agente |
Registrazione dell'agente
Registra gli agenti personalizzati con l'agente Azioni consigliate in modo che la piattaforma ne riconosca e recuperi le relative azioni. Per maggiori informazioni sulla registrazione degli agenti, vedi Aggiungi agenti personalizzati per le azioni consigliate.
Quando registri un agente, viene creata una voce in msdyn_recommendedactionsourceagentconfig. L'identificatore univoco SourceAgentId identifica la voce per l'agente personalizzato.
Configurazione dell'agente
La msdyn_recommendedactionsourceagentconfig tabella contiene la configurazione per agente che governa come l'Agente delle Azioni Raccomandate interpreta le azioni di un agente. I due campi più importanti da popolare sono msdyn_internalprioritizationinstruction e msdyn_syncactionexecutionstateapiconfig.
Puoi applicare la configurazione aggiornando manualmente l'record della tabella o chiamando l'API UpsertRecommendationAgentConfigRequestpersonalizzata .
Schema di UpsertRecommendationAgentConfigRequest
L'esempio seguente mostra i campi di configurazione disponibili nello 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"
}
| Campo JSON | Tipo | Description |
|---|---|---|
| nome agente | string | Viene mappato a msdyn_agentname (max 850 caratteri). Obbligatorio per i nuovi record. |
| agentType | string | Categoria agente. Usa "CustomAgent" per gli agenti non di vendita per creare automaticamente un profilo. |
| isRecommendedActionAgentEnabled | boolean | Mappe per msdyn_isrecommendedactionagentenabled. Null = lasciare invariato. |
| salesAgentProfileId | Guid? | Collegamenti a msdyn_salesagentprofile. Utilizzato per la ricerca di record su upsert. |
| agentImpactMapping | string | Array JSON semplice di nomi di principi. Mappe per msdyn_agentimpactmapping. |
| Istruzioni per la prioritizzazione interna | string | JSON con array di segnali. Mappe per msdyn_internalprioritizationinstruction. |
| syncActionExecutionStateApiConfig | string | Oggetto JSON {"syncactionuistatusapiname":"..."}. Mappe per msdyn_syncactionexecutionstateapiconfig. |
| sourceAgentUniqueId | string | Mappe per msdyn_sourceagentuniqueid. |
| description | string | Viene mappato a msdyn_sourcedescription (massimo 1000 caratteri). |
Istruzione di definizione delle priorità interna
L'istruzione interna di priorità contiene metadati di segnale specifici per l'agente che indicano al motore di punteggio come interpretare i campi dati di priorità di un agente. È un oggetto JSON con un array di livello superiore signals . Ogni segnale viene deserializzato in AgentSignalInstructionConfig con i seguenti campi:
| Campo | Tipo | Description |
|---|---|---|
| nome | string | Identificatore del segnale — usato come chiave nella sezione Riferimento del segnale del prompt di valutazione |
| type | string | Tipo di dato: "stringa", "numero", "booleano" |
| source | string | Etichetta descrittiva per la provenienza del segnale. Non usato per il routing — fetch_info.fetch_type controlla il meccanismo effettivo di recupero. In genere, "action_data" per i segnali inviati dagli agenti. |
| dimension_influence | {dimensione: forza} | Su quali dimensioni UICE influisce questo segnale e con quale intensità. Chiavi: "urgenza", "impatto", "fiducia", "impegno". Punti di forza: "forte", "moderato", "debole" |
| interpretazione | string | Descrizione in linguaggio naturale di ciò che il segnale significa per il punteggio — inserita nel prompt dell’LLM |
| affidabilità | string | Quanto è affidabile questo segnale: "alto", "medio", "basso" |
| required | boolean | Indica se il segnale deve essere presente per l'assegnazione dei punteggi |
| fetch_info | object | Controlla dove e come viene recuperato il valore del segnale in fase di assegnazione dei punteggi. |
Esempi di blocco dei segnali:
{
"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" }
}
]
}
Configurazione API dello stato di esecuzione dell'azione di sincronizzazione
La configurazione dell'API config per lo stato di esecuzione dell'azione di sincronizzazione è un oggetto JSON che specifica il nome personalizzato dell'API che l'Agente delle Azioni Raccomandate chiama quando un venditore agisce su una carta (ad esempio, la segna come completa o irrilevante). Questa API imposta lo stato dell'azione nell'agente personalizzato di origine.
{
"syncactionuistatusapiname": "your_SyncBackCustomApiName"
}
Contratto di azione push
Gli agenti personalizzati spingono le azioni usando l'API msdyn_PushActionDataToRecommendedActionAgent personalizzata. L'API viene chiamata ogni volta che l'agente genera o aggiorna un'azione per un'entità target.
Parametri della richiesta
| Parametro | Tipo | Obbligatorio | Description |
|---|---|---|---|
| msdyn_ActionId | string | Yes | Identificatore unico dell'agente per questa azione. Usato per la deduplicazione e la sincronizzazione dello stato. Deve essere deterministico (stessa azione = stesso ID). Formato di esempio: DealRisk_{opportunityId}_{riskType} |
| msdyn_SourceAgentId | string | Yes | Identificatore dell'agente. Deve corrispondere al msdyn_agentname nel record di configurazione dell'agente. Esempio: "DealClosingAgent" |
| msdyn_TargetEntityId | identificatore univoco (GUID) | Yes | GUID del record di destinazione (Opportunità, Lead) a cui si riferisce questa azione |
| msdyn_TargetEntityTypeName | string | Yes | Nome logico dell'entità di destinazione. Esempio: "opportunità", "lead" |
| msdyn_ActionReason | string | Yes | Motivo per cui l'azione è stata generata. Usato dal motore di assegnazione dei punteggi per la mappatura dei principi. |
| msdyn_ActionUIPayload | string | No | Payload JSON per il rendering delle carte. Se omesso, l'Agente delle Azioni Raccomandate non può mostrare la carta. |
| msdyn_ActionPrioritizationData | string | No | JSON con dati specifici per l'agente per il punteggio |
| msdyn_ActionCTA | string | No | Stringa di tipo CTA. Esempio: "Email", "Recensione", "Chiamata" |
| msdyn_PrioritizationPrinciples | string | No | Array JSON dei principi di prioritizzazione a cui questa specifica azione è associata (può sovrascrivere la mappatura a livello di agente) |
Esempio: chiamata del plugin C#
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"];
Contratto di payload dell'interfaccia utente d'azione
Il msdyn_ActionUIPayload campo contiene un payload JSON che controlla come appare una carta azione nella giostra Recommended Actions Agent.
{
"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\"}"
}
Contratto di dati di prioritizzazione
Il msdyn_prioritizationdata campo consente a un agente di trasmettere segnali specifici dell'agente che influenzano il modo in cui il motore di assegnazione del punteggio UICE stabilisce la priorità di un'azione.
[
{ "signalName": "risk", "value": "low" },
{ "signalName": "riskType", "value": "4" }
]
Il motore di punteggio legge questi segnali insieme ai segnali a livello di entità (valore dell'accordo, stadio, concorrenti e così via). L’elemento msdyn_internalprioritizationinstruction nella configurazione dell’agente specifica al LLM come interpretare ciascun segnale, e il motore di punteggio combina tutti i segnali in un unico prompt di punteggio UICE.
Gestione delle versioni delle azioni e invalidazione
Quando un agente aggiorna i dati relativi a un'azione già inviata, crea un nuovo record con lo stesso msdyn_ActionId richiamando msdyn_PushActionDataToRecommendedActionAgent. Il sistema crea una nuova riga in msdyn_rawactioncatalogue con lo stesso msdyn_actionid ma con un nuovo msdyn_rawactioncatalogueid L'Agente delle Azioni Raccomandate continua a mostrare la versione vecchia finché non elabora quella nuova.
Per invalidare un'azione (ad esempio, quando un rischio viene risolto), l'agente chiama l'API msdyn_RAAgent_RemoveActionsV2 personalizzata con il actionId. Questa azione contrassegna come inattivi tutti i record msdyn_rawactioncatalogue relativi a tale azione e la scheda scompare dal carosello.
Sincronizzazione bidirezionale dello stato
Lo stato dell'azione si sincronizza sia nel carosello dell'Agente delle Azioni Raccomandate sia nel tuo agente personalizzato per garantire che i venditori vedano informazioni coerenti indipendentemente da dove agiscono su un'azione.
Azioni raccomandate Agente → agente doganale (il venditore agisce nella giostra): Quando un venditore segna un'azione come Compiuta o Rifiutata nel carosello:
- L'agente Azioni consigliate aggiorna il
msdyn_actionuistatusinmsdyn_prioritizedactioncatalogue. - L'agente per le azioni consigliate legge il
msdyn_syncactionexecutionstateapiconfigdalla configurazione dell'agente. - L'Agente Azioni Raccomandate chiama l'API personalizzata dell'agente con:
| Parametro | Tipo | Description |
|---|---|---|
| actionid | GUID | Identificatore dell'azione |
| state | string | "Contrassegnato come completato" o "Ignorato" |
L'agente deve implementare un'API personalizzata che accetti questi due parametri e aggiorni lo stato dell'azione nel proprio archivio dati.
Agente personalizzato → Agente delle Azioni Raccomandate (il venditore agisce nell'interfaccia utente dell'agente): Quando un venditore agisce su un'azione nell'interfaccia utente dell'agente (ad esempio, la segna come mitigata su una pagina di un agente personalizzato), l'agente sincronizza quello stato con l'Agente delle Azioni Raccomandate chiamando msdyn_SyncActionExecutionStateFromAgent. Questa azione aggiorna lo stato nella tabella di output dell'agente Azioni consigliate, nascondendolo dal carosello.
| Parametro | Tipo | Obbligatorio | Description |
|---|---|---|---|
| msdyn_ActionId | string | Yes | L'identificatore dell'azione (lo stesso che è stato inserito) |
| msdyn_ActionState | integer | Yes | Nuovo stato — valori (associati a MarkAsDone/Dismissed) |
| msdyn_TargetEntityId | uniqueidentifier | Yes | GUID dell'entità di destinazione |
| TargetEntityTypeName | string | Yes | Nome logico dell'entità di destinazione |
| msdyn_TrackingId | string | No | ID di tracciamento/correlazione facoltativo |
Test e convalida
Dopo la configurazione e l'implementazione, validare il flusso end-to-end effettuando i seguenti controlli.
Verifica la configurazione dell'agente:
GET [org-url]/api/data/v9.2/msdyn_recommendedactionsourceagentconfigs
?$filter=msdyn_agentname eq 'YourAgentName'
&$select=msdyn_agentname,msdyn_agentimpactmapping,msdyn_internalprioritizationinstruction,msdyn_syncactionexecutionstateapiconfig
Esegui un'azione di test chiamando msdyn_PushActionDataToRecommendedActionAgent e verifica che msdyn_IsSuccess sia vera e che apparga un nuovo record in msdyn_rawactioncatalogue.
Attiva il calcolo del punteggio su richiesta richiamando msdyn_RAAgent_TriggerRecommendedActionsAgentOrchestration (invece di aspettare il timer di 4 ore).
Verifica l'output con punteggio:
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
Valori previsti:
-
msdyn_actionscoreviene popolato con un valore nell'intervallo 0-10. -
msdyn_hascrossedfloorè falso (l'azione è sopra la soglia minima e viene visualizzata nel carosello). -
msdyn_actionuistatusè 1 (Attivo). -
msdyn_scoredetailscontiene la spiegazione generata da LLM.
Verifica la visualizzazione della giostra aprendo un modulo Opportunità in Dynamics 365 Remote Assist e selezionando la sezione Azioni Suggerite. Verifica la sincronizzazione dello stato annullando un'azione nel carosello (l'API di sincronizzazione deve essere chiamata con state = "Dismissed") e segnando un'azione nell'interfaccia dell'agente (il record della tabella di output dovrebbe riflettere l'aggiornamento msdyn_actionuistatus).
Esempio: Agente di Opportunità di Vendita
Sales Opportunity Agent è il primo agente integrato nell'Agente delle Azioni Raccomandate, e la sua integrazione funge da riferimento per implementazione.
Valori di configurazione degli agenti:
| Campo di configurazione | Valore per l'Agente di Opportunità di Vendita (da OraDefaults.cs) |
|---|---|
| msdyn_agentname | "AgenteOpportunitàVendita" |
| msdyn_agentimpactmapping | ["DealRisk", "Velocità dell'Accordo"] |
| msdyn_syncactionexecutionstateapiconfig | {"syncactionuistatusapiname":"msdyn_SyncDealRiskActionFromNba"} |
| msdyn_internalprioritizationinstruction | Vedi il valore di produzione dell'Agente di Opportunità di Vendita |
Quando l'analisi di Sales Opportunity Agent è completata e identifica i rischi dell'affare, DealRiskToNBAService invia ogni rischio come azione separata:
| Parametro di push | Valore dell'agente dell'opportunità di vendita |
|---|---|
| msdyn_ActionId | DealRisk_{opportunityId}_{riskType} |
| msdyn_SourceAgentId | DealRiskAgent |
| msdyn_TargetEntityTypeName | "opportunità" |
| msdyn_ActionReason | Descrizione dei rischi dalla ricerca |
| msdyn_ActionUIPayload | Scheda con intestazione di rischio e descrizione |
| msdyn_ActionPrioritizationData |
{"riskType":"8","risk":"Missing BANT Info"} (esempio) |
Comportamento di sincronizzazione dello stato:
-
Agente delle Opportunità di Vendita → Agente delle Azioni Raccomandate: Quando un venditore segna un rischio come fatto nella pagina di ricerca, l'agente chiama
msdyn_SyncActionExecutionStateFromAgent. -
Agente Azioni consigliate → Agente Opportunità commerciale: Quando un venditore ignora una scheda nel carosello, l'Agente Azioni consigliate chiama
ora_UpdatedActionStateFromRAAgent(come definito nella configurazione dell'agente).