Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der Recommended Actions Agent in Dynamics 365 Sales Surfaces priorisiert Empfehlungen für Chancen. Es bietet eine gemeinsame Bewertungspipeline, Datenverträge und bidirektionale Zustandssynchronisation, sodass jeder kundenspezifische Agent Empfehlungen zusammen mit First-Party-Agenten vorlegen kann.
Dieser Artikel beschreibt die Architektur, Schlüsselkomponenten, Datenverträge und den Integrationsfluss, die verwendet werden, wenn ein benutzerdefinierter Agent mit dem Recommended Actions Agent integriert. Sie vermittelt das grundlegende Wissen, das für die Umsetzung einer Integration erforderlich ist.
Voraussetzungen
NextBestActionAgent-Lösung an die Zielorganisation bereitgestellt. Weitere Informationen finden Sie unter Einen Agenten in eine Zielumgebung importieren.
Der Verkäufer verfügt über entsprechende Dataverse-Sicherheitsrollen , wie sie in den Berechtigungen für benutzerdefinierte Sicherheitsrollen beschrieben sind.
Ein stabiler, eindeutiger SourceAgentId-String für den benutzerdefinierten Agenten. Weitere Informationen finden Sie unter Benutzerdefinierte Agenten hinzufügen für empfohlene Maßnahmen.
Folgende Berechtigungen sind erforderlich, um empfohlene Maßnahmen zu pushen:
Tabelle Erforderliche Berechtigungen Geltungsbereich msdyn_rawactioncatalogue Lesen, Schreiben, Anhängen und Anhängen Global msdyn_prioritizedactioncatalogue Lesen, Schreiben, Anhängen und Anhängen Global msdyn_recommendedactionsourceagentconfig Lesen Global msdyn_salesagentprofile Lesen Global
Integrationsarchitektur
Die Integration der Recommended Actions Agents verwendet eine Verarbeitungspipeline, die rohe Aktionen von Quellagenten aufnimmt, diese mittels einer UICE-Bewertungs-Engine (Urgency, Impact, Confidence, Effort) bewertet und die priorisierten Ergebnisse im Verkäuferkarussell aufzeigt.
Die Verarbeitungspipeline funktioniert wie folgt:
- Der Custom Agent erkennt eine umsetzbare Erkenntnis (zum Beispiel ein Deal-Risiko, ein gestopptes Geschäft oder einen fehlenden Stakeholder).
-
Der benutzerdefinierte Agent ruft die benutzerdefinierte
msdyn_PushActionDataToRecommendedActionAgentAPI auf, um die Aktion zu pushen. - Die Aktion wird in
msdyn_rawactioncatalogue(Eingabetabelle) gespeichert. - Für jede Aktion gilt die Scoring Engine:
- Ruft Entitätssignale von Dataverse ab.
- Ruft agentspezifische Priorisierungsdaten aus dem Aktionskatalog ab.
- Ruft den LLM auf, die Aktion auf den Dimensionen UICE (Dringlichkeit, Wirkung, Zuversicht, Anstrengung) zu bewerten.
- Gilt für Grund- und Deckenregeln.
- Berechnet den endgültigen Prioritätswert mit
GetRecommendedActionAgentResponse.
- Die bewertete Aktion wird in
msdyn_prioritizedactioncatalogue(Ausgabetabelle) eingefügt. - Der Empfohlene Aktions-Agent Carousel holt bewertete Aktionen und rendert Karten.
Wichtige Komponenten
Die Integration basiert auf den folgenden Dataverse-Tabellen und APIs.
| Komponente | Location | Description |
|---|---|---|
| Eingabetabelle | msdyn_rawactioncatalogue (Dataverse) | Rohaktionen, die benutzerdefinierte Agenten pushen |
| Ausgabetabelle | msdyn_prioritizedactioncatalogue (Dataverse) | Bewertete und rangierte Aktionen für die Benutzeroberfläche |
| Agentkonfiguration | msdyn_recommendedactionsourceagentconfig (Dataverse) | Registrierung und Konfiguration pro Agent |
| Push-API | msdyn_PushActionDataToRecommendedActionAgent (benutzerdefinierte API) | Agent → Empfohlene Aktionen Push für Agent-Aktionen |
Agent-Registrierung
Registrieren Sie benutzerdefinierte Agenten beim Recommended Actions Agent, damit die Plattform ihre Aktionen erkennt und abruft. Für weitere Informationen zur Registrierung von Agenten siehe Hinzufügen von benutzerdefinierten Agenten für empfohlene Maßnahmen.
Wenn Sie einen Agenten registrieren, erstellt er einen Eintrag in msdyn_recommendedactionsourceagentconfig. Das eindeutige SourceAgentId identifiziert den Eintrag für den benutzerdefinierten Agenten.
Agentkonfiguration
Die Tabelle msdyn_recommendedactionsourceagentconfig enthält die Konfiguration pro Agent, die bestimmt, wie der Empfohlene Aktionsagent die Aktionen eines Agenten interpretiert. Die beiden wichtigsten Felder, die bevölkert werden müssen, sind msdyn_internalprioritizationinstruction und msdyn_syncactionexecutionstateapiconfig.
Sie können die Konfiguration entweder durch manuelles Aktualisieren des Tabelleneintrags oder durch Aufruf der benutzerdefinierten API UpsertRecommendationAgentConfigRequestanwenden.
UpsertRecommendationAgentConfigRequest schema
Das folgende Beispiel zeigt die verfügbaren Konfigurationsfelder im 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-Feld | Typ | Description |
|---|---|---|
| Name des Agenten. | string | Maps zu msdyn_agentname (maximal 850 Zeichen). Erforderlich für neue Datensätze. |
| Agententyp | string | Agent-Kategorie. Verwenden Sie "CustomAgent" für Agenten, die keine Sales Opportunity Agents sind, um automatisch ein Profil zu erstellen. |
| isRecommendedActionAgentEnabled | boolean | Karten zu msdyn_isrecommendedactionagentenabled. Null = unverändert lassen. |
| salesAgentProfileId | Guid? | Links zu msdyn_salesagentprofile. Wird für die Datensatzsuche beim Upsert verwendet. |
| agentImpactMapping | string | Flaches JSON-Array der Hauptnamen. Karten zu msdyn_agentimpactmapping. |
| internalPrioritizationInstruction | string | JSON mit Signalarray. Karten zu msdyn_internalprioritizationinstruction. |
| syncActionExecutionStateApiConfig | string | JSON-Objekt {"syncactionuistatusapiname":"..."}. Karten zu msdyn_syncactionexecutionstateapiconfig. |
| sourceAgentUniqueId | string | Karten zu msdyn_sourceagentuniqueid. |
| description | string | Maps auf msdyn_sourcedescription (maximal 1000 Zeichen). |
Interne Priorisierungsanweisung
Die interne Priorisierungsanweisung enthält agentenspezifische Signalmetadaten, die der Bewertungs-Engine angeben, wie sie die Priorisierungsdaten eines Agenten interpretieren soll. Es handelt sich um ein JSON-Objekt mit einem Top-Level-Array signals . Jedes Signal wird mit AgentSignalInstructionConfig den folgenden Feldern deserialisiert:
| Feld | Typ | Description |
|---|---|---|
| Name | string | Signalkennung – wird als Schlüssel im Abschnitt Signalreferenz der Wertungsaufforderung verwendet |
| type | string | Datentyp: "String", "number", "boolean" |
| source | string | Beschreibende Beschriftung für den Ort, von dem das Signal stammt. Wird nicht für Routing verwendet – fetch_info.fetch_type steuert den eigentlichen Abrufmechanismus. Typischerweise "action_data" für von Agenten vermittelte Signale. |
| dimension_influence | {Dimension: Stärke} | Welche UICE-Dimensionen dieses Signal beeinflussen und wie stark. Schlüssel: "Dringlichkeit", "Wirkung", "Selbstvertrauen", "Anstrengung". Stärken: "stark", "mäßig", "schwach" |
| Auslegung | string | Natürlichsprachliche Beschreibung dessen, was das Signal für die Bewertung bedeutet – in die LLM-Eingabeaufforderung eingeschleust |
| Zuverlässigkeit | string | Wie zuverlässig dieses Signal ist: "hoch", "mittler", "niedrig" |
| erforderlich | boolean | Gibt an, ob das Signal für die Bewertung vorhanden sein muss. |
| fetch_info | object | Steuert, wo und wie der Signalwert zur Bewertungszeit abgerufen wird. |
Beispiel für einen 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 den Ausführungsstatus der Synchronisierungsaktion
Die API-Konfiguration der Sync Action Execution State ist ein JSON-Objekt, das den benutzerdefinierten API-Namen angibt, den der Recommended Actions Agent aufruft, wenn ein Verkäufer auf einer Karte handelt (zum Beispiel als vollständig oder irrelevant markiert). Diese API legt den Status der Aktion im benutzerdefinierten Quell-Agent fest.
{
"syncactionuistatusapiname": "your_SyncBackCustomApiName"
}
Aktions-Push-Vertrag
Benutzerdefinierte Agenten pushen Aktionen über die benutzerdefinierte msdyn_PushActionDataToRecommendedActionAgent API. Die API wird jedes Mal aufgerufen, wenn der Agent eine Aktion für eine Zielentität generiert oder aktualisiert.
Anforderungsparameter
| Parameter | Typ | Required | Description |
|---|---|---|---|
| msdyn_ActionId | string | Yes | Die eindeutige Kennung des Agenten für diese Aktion. Wird für die Deduplizierung und Zustandssynchronisierung verwendet. Muss deterministisch sein (gleiche Aktion = gleiche ID). Beispielformat: DealRisk_{opportunityId}_{riskType} |
| msdyn_SourceAgentId | string | Yes | Agenten-Identifikator. Muss mit dem msdyn_agentname im Agenten-Konfigurationsrecord übereinstimmen. Beispiel: "DealClosingAgent" |
| msdyn_TargetEntityId | eindeutiger Bezeichner (GUID) | Yes | GUID des Zieldatensatzes (Opportunity, Lead), auf das sich diese Aktion bezieht |
| msdyn_TargetEntityTypeName | string | Yes | Logischer Name der Zielentität. Beispiel: "Chance", "Lead" |
| msdyn_ActionReason | string | Yes | Grund, warum die Aktion generiert wurde. Wird von der Scoring-Engine für die Zuordnung von Prinzipien verwendet. |
| msdyn_ActionUIPayload | string | No | JSON-Payload für das Rendern der Karte. Wenn sie weggelassen wird, kann der Recommended Actions Agent die Karte nicht anzeigen. |
| msdyn_ActionPrioritizationData | string | No | JSON mit agentenspezifischen Daten zur Bewertungswertung |
| msdyn_ActionCTA | string | No | Zeichenfolge vom Typ CTA. Beispiel: "E-Mail", "Bewertung", "Anruf" |
| msdyn_PrioritizationPrinciples | string | No | JSON-Array von Priorisierungsprinzipien, zu der diese spezifische Aktion zugeordnet ist (kann die Zuordnung auf Agentebene außer Kraft setzen) |
Beispiel: C#-Plugin-Aufruf
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"];
Aktions-UI-Nutzlastvertrag
Das Feld msdyn_ActionUIPayload enthält eine JSON-Nutzlast, die steuert, wie eine Aktionskarte im Recommended Actions Agent-Karussell erscheint.
{
"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\"}"
}
Priorisierungsdatenvertrag
Das Feld msdyn_prioritizationdata ermöglicht es einem Agenten, agentenspezifische Signale weiterzugeben, die beeinflussen, wie die UICE-Bewertungs-Engine eine Aktion priorisiert.
[
{ "signalName": "risk", "value": "low" },
{ "signalName": "riskType", "value": "4" }
]
Die Wertungsmaschine liest diese Signale zusammen mit Signalen auf Entitätsebene (Deal-Wert, Stage, Konkurrenten usw.). Die Agent-Konfiguration msdyn_internalprioritizationinstruction zeigt dem LLM, wie jedes Signal interpretiert werden soll, und die Bewertungs-Engine kombiniert alle Signale in der UICE-Bewertungsaufforderung.
Aktionsversionierung und Nichtvalidierung
Wenn ein Agent Daten für eine zuvor gepushte Aktion aktualisiert, erstellt er einen neuen Datensatz mit derselben msdyn_ActionId Aktion, indem er erneut aufruft msdyn_PushActionDataToRecommendedActionAgent . Das System erstellt eine neue Zeile in msdyn_rawactioncatalogue mit demselben msdyn_actionid, aber einem neuen msdyn_rawactioncatalogueid. Der Recommended Actions Agent zeigt die alte Version immer wieder an, bis die neue bearbeitet wird.
Um eine Aktion ungültig zu machen (zum Beispiel wenn ein Risiko gelöst ist), ruft der Agent die msdyn_RAAgent_RemoveActionsV2 benutzerdefinierte API mit der actionIdauf. Diese Aktion markiert alle msdyn_rawactioncatalogue Aufzeichnungen dieser Aktion als inaktiv, und die Karte verschwindet aus dem Karussell.
Bidirektionale Zustandssynchronisation
Der Aktionszustand synchronisiert sich sowohl im Empfohlenen Aktions-Agenten-Karussell als auch in Ihrem Custom Agent, um sicherzustellen, dass Verkäufer konsistente Informationen erhalten, unabhängig davon, wo sie bei einer Aktion handeln.
Empfohlene Maßnahmen Agent → Custom Agent (Verkäufer handelt im Karussell): Wenn ein Verkäufer eine Handlung im Karussell als erledigt oder abgelehnt markiert:
- Der Agent für empfohlene Aktionen aktualisiert das
msdyn_actionuistatusinmsdyn_prioritizedactioncatalogue. - Der Recommended Actions Agent liest die
msdyn_syncactionexecutionstateapiconfigaus der Agent-Konfiguration. - Recommended Actions Agent ruft die benutzerdefinierte API des Agenten auf:
| Parameter | Typ | Description |
|---|---|---|
| actionid | GUID | Die Aktionskennung |
| state | string | "Erledigt" oder "Entlassen" |
Der Agent muss eine benutzerdefinierte API implementieren, die diese beiden Parameter akzeptiert und den Aktionsstatus in seinem eigenen Datenspeicher aktualisiert.
Custom Agent → Recommended Actions Agent (Verkäufer handelt in der Benutzeroberfläche des Agenten): Wenn ein Verkäufer auf eine Aktion in der eigenen Benutzeroberfläche des Agenten handelt (zum Beispiel als gemildert auf einer benutzerdefinierten Agentenseite markiert), synchronisiert der Agent diesen Zustand mit dem Empfohlenen Aktionsagenten, indem er aufruft msdyn_SyncActionExecutionStateFromAgent. Diese Aktion aktualisiert den Zustand in der Ausgabetabelle des Agents für empfohlene Aktionen, um ihn vom Karussell auszublenden.
| Parameter | Typ | Required | Description |
|---|---|---|---|
| msdyn_ActionId | string | Yes | Der Aktionsbezeichner (derselbe wie der gepushte) |
| msdyn_ActionState | integer | Yes | Neuer Zustand — Werte (auf MarkAsDone/Dismissed abgebildet) |
| msdyn_TargetEntityId | eindeutiger Bezeichner | Yes | Zielentitäts-GUID |
| TargetEntityTypeName | string | Yes | Logischer Name der Zielentität |
| msdyn_TrackingId | string | No | Optionale Nachverfolgungs-/Korrelations-ID |
Tests und Prüfung
Nach Konfiguration und Implementierung validieren Sie den End-to-End-Fluss durch folgende Prüfungen.
Agentenkonfiguration überprüfen:
GET [org-url]/api/data/v9.2/msdyn_recommendedactionsourceagentconfigs
?$filter=msdyn_agentname eq 'YourAgentName'
&$select=msdyn_agentname,msdyn_agentimpactmapping,msdyn_internalprioritizationinstruction,msdyn_syncactionexecutionstateapiconfig
Schieben Sie eine Testaktion, indem Sie aufrufen msdyn_PushActionDataToRecommendedActionAgent und überprüfen, ob das msdyn_IsSuccess stimmt, und ein neuer Datensatz erscheint in msdyn_rawactioncatalogue.
Lösen Sie die Punktewertung auf Abruf durch Anruf msdyn_RAAgent_TriggerRecommendedActionsAgentOrchestration aus (anstatt auf den 4-Stunden-Timer zu warten).
Überprüfen Sie die bewertete Ausgabe:
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
Erwartete Werte:
-
msdyn_actionscorewird mit einem Wert im Bereich von 0 bis 10 aufgefüllt. -
msdyn_hascrossedfloorist falsch (die Aktion ist über dem Boden und wird im Karussell angezeigt). -
msdyn_actionuistatusist 1 (Aktiv). -
msdyn_scoredetailsenthält die LLM-generierte Erklärung.
Verifizieren Sie die Karussell-Anzeige, indem Sie ein Opportunity-Formular in Dynamics 365 Sales öffnen und den Abschnitt Vorgeschlagene Aktionen anklicken. Überprüfen Sie die Zustandssynchronisation, indem Sie eine Aktion im Karussell schließen (die Sync-Back-API sollte mit aufgerufen state = "Dismissed"werden) und eine Aktion in der Agenten-UI markieren (der Ausgabetabelleneintrag sollte das aktualisierte msdyn_actionuistatusDatum widerspiegeln).
Beispiel: Sales Opportunity Agent
Sales Opportunity Agent ist der erste Agent, der in den Recommended Actions Agent aufgenommen wird, und seine Integration dient als Referenzimplementierung.
Agentenkonfigurationswerte:
| Konfigurationsfeld | Wert von Sales Opportunity Agents (aus OraDefaults.cs) |
|---|---|
| msdyn_agentname | "SalesOpportunityAgent" |
| msdyn_agentimpactmapping | ["DealRisk", "Deal Velocity"] |
| msdyn_syncactionexecutionstateapiconfig | {"syncactionuistatusapiname":"msdyn_SyncDealRiskActionFromNba"} |
| msdyn_internalprioritizationinstruction | Sehen Sie sich den Produktionswert des Sales Opportunity Agents an |
Wenn der Agent für Verkaufschancen seine Recherche abgeschlossen hat und Risiken für den Abschluss identifiziert, DealRiskToNBAService übermittelt er jedes Risiko als separate Aktion:
| Push-Parameter | Wert von Sales Opportunity Agents |
|---|---|
| msdyn_ActionId | DealRisk_{opportunityId}_{riskType} |
| msdyn_SourceAgentId | "DealRiskAgent" |
| msdyn_TargetEntityTypeName | "Gelegenheit" |
| msdyn_ActionReason | Risikobeschreibung aus Forschung |
| msdyn_ActionUIPayload | Karte mit Risikokopf + Beschreibung |
| msdyn_ActionPrioritizationData |
{"riskType":"8","risk":"Missing BANT Info"} (Beispiel) |
Zustandssynchronisationsverhalten:
-
Vertriebs-Opportunity-Agent → Empfohlene Aktions-Agentin: Wenn ein Verkäufer ein Risiko auf der Rechercheseite als erschöpft markiert, ruft der Makler an
msdyn_SyncActionExecutionStateFromAgent. -
Empfohlene Maßnahmen Agent → Vertriebs-Opportunity-Agent: Wenn ein Verkäufer eine Karte im Karussell ablehnt, ruft der Recommended Actions Agent (konfiguriert in der Agentenkonfiguration) auf
ora_UpdatedActionStateFromRAAgent.