Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Agent Zalecanych Działań w Dynamics 365 Sales prezentuje priorytetowe rekomendacje dotyczące możliwości, leadów, kont i kontaktów. Zapewnia wspólny mechanizm oceniania, kontrakty danych oraz dwukierunkową synchronizację stanu, dzięki czemu każdy niestandardowy agent może prezentować rekomendacje obok agentów natywnych.
Ten artykuł opisuje architekturę, kluczowe komponenty, kontrakty danych oraz przepływ integracji używany podczas integracji niestandardowego agenta z agentem Zalecanych Działań. Zapewnia podstawową wiedzę niezbędną do wdrożenia integracji.
Wymagania wstępne
Rozwiązanie NextBestActionAgent wdrożone w organizacji docelowej. Więcej informacji można znaleźć w artykule Import agenta do środowiska docelowego.
Stabilny, unikalny ciąg SourceAgentId dla niestandardowego agenta. Aby uzyskać więcej informacji, zobacz Dodawanie niestandardowych agentów dla zalecanych akcji.
Do wykonywania zalecanych działań wymagane są następujące uprawnienia:
Tabela Wymagane uprawnienia Scope msdyn_rawactioncatalogue Odczyt, zapis, dołączanie i dołączanie do Global msdyn_prioritizedactioncatalogue Odczyt, zapis, dołączanie i dołączanie do Global msdyn_recommendedactionsourceagentconfig Read Global msdyn_salesagentprofile Read Global
Architektura integracji
Integracja z Agentem Zalecanych Działań wykorzystuje pipeline przetwarzający, który pobiera surowe działania od agentów źródłowych, ocenia je za pomocą silnika punktacji UICE (Urgency, Impact, Confidence, Effort) oraz wyświetla priorytetowe wyniki w karuzeli sprzedawcy.
Potok przetwarzania działa następująco:
- Agent niestandardowy wykrywa praktyczne szczegółowe informacje (na przykład ryzyko dotyczące transakcji, zablokowaną transakcję lub brak interesariusza).
-
Niestandardowy agent wywołuje niestandardowe
msdyn_PushActionDataToRecommendedActionAgentAPI, aby przesłać akcję. - Akcja jest przechowywana w
msdyn_rawactioncatalogue(tabeli wejściowej). - Dla każdej akcji Silnik Punktacji:
- Pobiera sygnały encji z platformy Dataverse.
- Pobiera dane priorytetyzacji specyficzne dla agenta z katalogu akcji.
- Wzywa LLM, aby ocenić działania na podstawie wymiarów UICE (Pilność, Wpływ, Pewność, Wysiłek).
- Stosuje zasady podłogi i sufitu.
- Oblicza ostateczny wynik priorytetu, używając
GetRecommendedActionAgentResponse.
- Oceniona akcja jest wstawiana do
msdyn_prioritizedactioncatalogue(tabeli wyjściowej). - Karuzela Zalecanych Akcji pobiera punktowane akcje i renderuje karty w widoku listy podmiotu, pod warunkiem, że karuzela jest aktywowana dla tej jednostki.
Najważniejsze składniki
Integracja opiera się na następujących tabelach i API Dataverse.
| Składnik | Lokalizacja | Description |
|---|---|---|
| Tabela wejściowa | msdyn_rawactioncatalogue (Dataverse) | Pierwotne akcje, które wypychają agenty niestandardowe |
| Tabela danych wyjściowych | msdyn_prioritizedactioncatalogue (Dataverse) | Oceniane i sklasyfikowane akcje dla interfejsu użytkownika |
| Konfiguracja agenta | msdyn_recommendedactionsourceagentconfig (Dataverse) | Rejestracja i konfiguracja poszczególnych agentów |
| Push API | msdyn_PushActionDataToRecommendedActionAgent (niestandardowy interfejs API) | Agent → Zalecane działania — wypychanie akcji agenta |
Rejestracja agenta
Zarejestruj niestandardowych agentów w Agencie Zalecanych Akcji, aby platforma rozpoznawała i pobierała ich działania. Więcej informacji o rejestrowaniu agentów można znaleźć w artykule Dodawanie agentów niestandardowych dla zalecanych akcji.
Gdy rejestrujesz agenta, tworzy on wpis w msdyn_recommendedactionsourceagentconfig. Unikalny SourceAgentId identyfikuje wpis dla niestandardowego agenta.
Konfiguracja agenta
Tabela msdyn_recommendedactionsourceagentconfig zawiera konfigurację dla agenta, która reguluje, jak Agent Zalecanych Działań interpretuje działania agenta. Dwa najważniejsze pola do wypełnienia to msdyn_internalprioritizationinstruction i msdyn_syncactionexecutionstateapiconfig.
Możesz zastosować konfigurację, ręcznie aktualizując rekord tabeli lub wywołując niestandardowe API UpsertRecommendationAgentConfigRequest.
UpsertRecommendationAgentConfigRequest schema
Poniższy przykład pokazuje dostępne pola konfiguracyjne w schemacie.
{
"agentName": "YourAgentName",
"agentType": "CustomAgent",
"isRecommendedActionAgentEnabled": true,
"salesAgentProfileId": "<SourceAgentId that was configured>",
"agentImpactMapping": "[]",
"internalPrioritizationInstruction": "{\"signals\":[...]}",
"syncActionExecutionStateApiConfig": "{\"syncactionuistatusapiname\":\"your_SyncBackCustomApiName\"}",
"description": "Brief description of your agent"
}
| Pole JSON | Typ | Description |
|---|---|---|
| nazwa_agenta | ciąg | Mapy na msdyn_agentname (maksymalnie 850 postaci). Wymagane dla nowych rekordów. |
| typ agenta | ciąg | Kategoria agenta. Użyj "CustomAgent", aby automatycznie utworzyć profil. |
| czyAgentZalecanychAkcjiJestWłączony | wartość logiczna | Mapuje do msdyn_isrecommendedactionagentenabled. null = pozostaw bez zmian. |
| salesAgentProfileId | Identyfikator GUID? | Łącza do msdyn_salesagentprofile. Służy do wyszukiwania rekordów w operacji upsert. |
| agentImpactMapping | ciąg | Tablica płaska JSON z nazwami zasad. Mapuje do msdyn_agentimpactmapping. |
| internalPrioritizationInstruction | ciąg | JSON z układem sygnałów. Mapuje do msdyn_internalprioritizationinstruction. |
| syncActionExecutionStateApiConfig | ciąg | Obiekt JSON {"syncactionuistatusapiname":"..."}. Mapuje do msdyn_syncactionexecutionstateapiconfig. |
| sourceAgentUniqueId | ciąg | Mapuje do msdyn_sourceagentuniqueid. |
| description | ciąg | Mapy do msdyn_sourcedescription (maksymalnie 1000 postaci). |
Instrukcja priorytetyzacji wewnętrznej
Wewnętrzna instrukcja priorytetyzacji zawiera metadane sygnału specyficzne dla agenta, które informują silnik punktacji, jak interpretować pola danych priorytetyzacyjnych agenta. To obiekt JSON z tablicą najwyższego poziomu signals . Każdy sygnał jest deserializowany do AgentSignalInstructionConfig z następującymi polami:
| Pole | Typ | Description |
|---|---|---|
| nazwa | ciąg | Identyfikator sygnału — używany jako klucz w sekcji Sygnał Referencyjny w promptie punktacji |
| typ | ciąg | Typ danych: "string", "number", "boolean" |
| przesłać źródło | ciąg | Etykieta opisowa miejsca, z którego pochodzi sygnał. Nie używany do routingu — fetch_info.fetch_type kontroluje faktyczny mechanizm pobierania. Zazwyczaj „action_data” dla sygnałów przesyłanych przez agentów. |
| wpływ_wymiaru | {wymiar: wytrzymałość} | Na które wymiary UICE wpływa ten sygnał i w jakim stopniu. Klucze: "pilność", "wpływ", "pewność", "wysiłek". Mocne strony: "silny", "umiarkowany", "słaby" |
| interpretacja | ciąg | Opis w języku naturalnym opisujący, co sygnał oznacza dla oceny — wstawiany do promptu LLM |
| niezawodność | ciąg | Jak wiarygodny jest ten sygnał: "wysoki", "średni", "niski" |
| required | wartość logiczna | Czy sygnał musi być obecny do oceniania |
| fetch_info | obiekt | Określa, gdzie i jak jest pobierana wartość sygnału w czasie oceniania. |
Przykładowy blok sygnałów:
{
"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" }
}
]
}
Konfiguracja interfejsu API stanu wykonywania akcji synchronizacji
Konfiguracja interfejsu API stanu wykonania akcji synchronizacji to obiekt JSON, który określa nazwę niestandardowego interfejsu API wywoływanego przez agenta zalecanych działań, gdy sprzedawca podejmuje działanie dotyczące karty (na przykład oznacza ją jako ukończoną lub nieistotną). Ten interfejs API ustawia stan akcji w źródłowym agencie niestandardowym.
{
"syncactionuistatusapiname": "your_SyncBackCustomApiName"
}
Kontrakt dotyczący wypychania akcji
Agenty niestandardowe wypychają akcje, korzystając z niestandardowego interfejsu API msdyn_PushActionDataToRecommendedActionAgent. API jest wywoływane za każdym razem, gdy agent generuje lub aktualizuje akcję dla jednostki docelowej.
Parametry żądania
| Parametr | Typ | Wymagane | Description |
|---|---|---|---|
| msdyn_ActionId | ciąg | Yes | Unikalny identyfikator agenta przypisany do tej akcji. Służy do deduplikacji i synchronizacji stanu. Musi być deterministyczny (ta sama akcja = ten sam identyfikator). Przykładowy format: DealRisk_{opportunityId}_{riskType} |
| msdyn_SourceAgentId | ciąg | Yes | Identyfikator agenta. Musi odpowiadać wartości msdyn_agentname w rekordzie konfiguracji agenta. Przykład: "DealClosingAgent" |
| msdyn_TargetEntityId | uniqueidentifier (GUID) | Yes | GUID rekordu docelowego (Opportunity, Lead), którego dotyczy ta akcja |
| msdyn_TargetEntityTypeName | ciąg | Yes | Nazwa logiczna jednostki docelowej. Przykład: „okazja”, „potencjalny klient” |
| msdyn_ActionReason | ciąg | Yes | Przyczyna wygenerowania akcji. Używany przez silnik oceniania do mapowania zasad. |
| msdyn_ActionUIPayload | ciąg | No | Ładunek danych JSON służący do renderowania kart. Jeśli zostanie pominięta, Agent Zalecanych Działań nie może wyświetlić karty. |
| msdyn_ActionPrioritizationData | ciąg | No | JSON z danymi przypisanymi do agenta na potrzeby oceny |
| msdyn_ActionCTA | ciąg | No | Ciąg typu CTA. Przykład: "Email", "Review", "Call" |
| msdyn_PrioritizationPrinciples | ciąg | No | Tablica JSON zasad priorytetyzacji, którym przypisano to konkretne działanie (może zastąpić mapowanie na poziomie agenta) |
Przykład: wywołanie wtyczki C#
Poniższy przykład polega na tworzeniu i wykonywaniu żądania wypychania akcji dotyczącej ryzyka transakcji do agenta zalecanych działań. Żądanie identyfikuje agenta źródłowego i docelową szansę sprzedaży, podaje powód oraz dane interfejsu użytkownika karty, zawiera sygnały ryzyka na potrzeby ustalania priorytetów i sprawdza, czy operacja zakończyła się powodzeniem.
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"];
Kontrakt dotyczący ładunku interfejsu użytkownika akcji
Pole msdyn_ActionUIPayload zawiera obiekt JSON, który określa, w jaki sposób karta akcji jest wyświetlana w karuzeli agenta Recommended Actions.
{
"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\"}"
}
Kontrakt danych priorytetyzacyjnych
Pole msdyn_prioritizationdata umożliwia agentowi przekazywanie sygnałów specyficznych dla danego agenta, które wpływają na sposób, w jaki silnik punktacji UICE nadaje priorytet działaniu.
[
{ "signalName": "risk", "value": "low" },
{ "signalName": "riskType", "value": "4" }
]
Silnik punktacji odczytuje te sygnały równolegle z sygnałami na poziomie podmiotów (wartość transakcji, etap, konkurenci itd.). Element msdyn_internalprioritizationinstruction w konfiguracji agenta informuje model LLM, jak interpretować każdy sygnał, a silnik oceniania łączy wszystkie sygnały w poleceniu oceniania UICE.
Aktywuj karuzelę Zalecanych Akcji
Aktywuj karuzelę Zalecanych Akcji, aby pojawiła się w widoku listy podmiotów. Encja aiinsightcard kontroluje stan aktywacji karuzeli dla każdej encji. Upewnij się, że odpowiadający aiinsightcard rekord dla podmiotu jest ustawiony na aktywny.
Poniższa tabela pokazuje wartości do ustawienia aktywacji lub dezaktywacji karuzeli dla danej jednostki:
| Stan karty | statecode |
statuscode |
|---|---|---|
| Aktywni | 0 |
1 |
| Nieaktywny | 1 |
2 |
Wersjonowanie akcji i unieważnienie akcji
Gdy agent aktualizuje dane dla wcześniej wypchniętej akcji, tworzy nowy rekord z tym samym identyfikatorem msdyn_ActionId, wywołując ponownie element msdyn_PushActionDataToRecommendedActionAgent. System tworzy nowy wiersz w tabeli msdyn_rawactioncatalogue z tym samym identyfikatorem msdyn_actionid, ale z nowym identyfikatorem msdyn_rawactioncatalogueid. Agent Zalecanych Akcji pokazuje starą wersję, dopóki nie przetworzy nowej.
Aby unieważnić akcję (na przykład gdy ryzyko zostanie rozwiązane), agent wywołuje niestandardowy interfejs API msdyn_RAAgent_RemoveActionsV2 za pomocą actionId. Ta akcja oznacza wszystkie msdyn_rawactioncatalogue zapisy tej akcji jako nieaktywne, a karta znika z karuzeli.
Dwukierunkowa synchronizacja stanów
Stan działania jest synchronizowany zarówno w karuzeli Agenta rekomendowanych działań, jak i w twoim agencie niestandardowym, aby zapewnić sprzedawcom spójne informacje niezależnie od miejsca, w którym podejmują dane działanie.
Zalecane działania Agent → agent niestandardowy (sprzedający działa w karuzeli): Gdy sprzedawca oznacza czynność jako Wykonaną lub Oddaloną w karuzeli:
- Agent zalecanych akcji aktualizuje element
msdyn_actionuistatusw plikumsdyn_prioritizedactioncatalogue. - Agent zalecanych działań odczytuje element
msdyn_syncactionexecutionstateapiconfigz konfiguracji agenta. - Agent zalecanych działań wywołuje niestandardowy interfejs API agenta z:
| Parametr | Typ | Description |
|---|---|---|
| actionid | GUID | Identyfikator akcji |
| stan | ciąg | „Oznaczono jako ukończone” lub „Odrzucono” |
Agent musi zaimplementować niestandardowe API, które akceptuje te dwa parametry i aktualizuje stan akcji w swoim własnym magazynie danych.
Agent niestandardowy → Agent zalecanych działań (sprzedawca działa w interfejsie użytkownika agenta): gdy sprzedawca podejmuje działania dotyczące akcji w interfejsie własnego agenta (na przykład oznacza je jako złagodzone na stronie agenta niestandardowego), agent synchronizuje ten stan z agentem zalecanych działań, wywołując element msdyn_SyncActionExecutionStateFromAgent. Ta akcja aktualizuje stan w tabeli wyjściowej agenta zalecanych działań, przez co nie jest on wyświetlany w karuzeli.
| Parametr | Typ | Wymagane | Description |
|---|---|---|---|
| msdyn_ActionId | ciąg | Yes | Identyfikator akcji (taki sam jak wypchnięty) |
| msdyn_ActionState | liczba całkowita | Yes | Nowy stan — wartości (przypisane do MarkAsDone/Dismissed) |
| msdyn_TargetEntityId | uniqueidentifier | Yes | Identyfikator GUID encji docelowej |
| TargetEntityTypeName | ciąg | Yes | Nazwa logiczna jednostki docelowej |
| msdyn_TrackingId | ciąg | No | Opcjonalne śledzenie/identyfikator korelacji |
Testowanie i walidacja
Po konfiguracji i wdrożeniu zweryfikowaj przepływ end-to-end, wykonując następujące kontrole.
Weryfikacja konfiguracji agenta:
GET [org-url]/api/data/v9.2/msdyn_recommendedactionsourceagentconfigs
?$filter=msdyn_agentname eq 'YourAgentName'
&$select=msdyn_agentname,msdyn_agentimpactmapping,msdyn_internalprioritizationinstruction,msdyn_syncactionexecutionstateapiconfig
Uruchom akcję testową, wywołując msdyn_PushActionDataToRecommendedActionAgent, i sprawdź, czy msdyn_IsSuccess ma wartość true oraz czy w msdyn_rawactioncatalogue pojawia się nowy rekord.
Uruchom ocenianie na żądanie, wywołując msdyn_RAAgent_TriggerRecommendedActionsAgentOrchestration (zamiast czekać na upływ 4-godzinnego licznika czasu).
Zweryfikuj ocenione wyniki:
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
Oczekiwane wartości:
-
msdyn_actionscoreparametr jest wypełniany wartością w zakresie od 0 do 10. -
msdyn_hascrossedfloorjest fałszywy (akcja jest powyżej podłogi i widoczna jest na karuzeli). -
msdyn_actionuistatusjest 1 (aktywny). -
msdyn_scoredetailszawiera wyjaśnienie wygenerowane przez moduł LLM.
Zweryfikowaj wyświetlanie karuzeli, otwierając formularz Opportunity w Dynamics 365 Sales i sprawdzając sekcję Sugerowanych Akcji. Zweryfikuj synchronizację stanu, odrzucając akcję w karuzeli (interfejs API synchronizacji zwrotnej powinien zostać wywołany z state = "Dismissed") oraz oznaczając akcję w interfejsie agenta (rekord w tabeli wyjściowej powinien odzwierciedlać zaktualizowaną msdyn_actionuistatus).
Przykład: Agent ds. Szans Sprzedaży
Agent Szans Sprzedaży jest pierwszym agentem dołączonym do Agenta Zalecanych Akcji, a jego integracja stanowi implementację referencyjną.
Wartości konfiguracji agenta:
| Pole konfiguracji | Wartość agenta szansy sprzedaży (z OraDefaults.cs) |
|---|---|
| msdyn_agentname | SalesOpportunityAgent |
| msdyn_agentimpactmapping | ["DealRisk", "Tempo transakcji"] |
| msdyn_syncactionexecutionstateapiconfig | {"syncactionuistatusapiname":"msdyn_SyncDealRiskActionFromNba"} |
| msdyn_internalprioritizationinstruction | Zobacz wartość produkcyjną agenta szans sprzedaży |
Gdy analiza przeprowadzana przez agenta szans sprzedaży zostanie zakończona i zidentyfikuje zagrożenia transakcji, usługa DealRiskToNBAService przekaże każde ryzyko jako oddzielną akcję:
| Parametr push | Wartość agenta szansy sprzedaży |
|---|---|
| msdyn_ActionId | DealRisk_{opportunityId}_{riskType} |
| msdyn_SourceAgentId | DealRiskAgent |
| msdyn_TargetEntityTypeName | Szansa |
| msdyn_ActionReason | Opis ryzyka z badań |
| msdyn_ActionUIPayload | Karta z nagłówkiem ryzyka i opisem |
| msdyn_ActionPrioritizationData |
{"riskType":"8","risk":"Missing BANT Info"} (przykład) |
Działanie synchronizacji stanu:
-
Agent szans sprzedaży → Agent zalecanych działań: gdy sprzedający oznacza ryzyko zgodnie ze stroną badań, agent wywołuje element
msdyn_SyncActionExecutionStateFromAgent. -
Agent zalecanych działań → Agent szans sprzedaży: Gdy sprzedawca odrzuca kartę w karuzeli, agent zalecanych działań wywołuje
ora_UpdatedActionStateFromRAAgent(zgodnie z konfiguracją agenta).