Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Agente de Ações Recomendadas na Dynamics 365 Sales destaca recomendações prioritárias para oportunidades. Fornece um pipeline de pontuação partilhado, contratos de dados e sincronização bidirecional de estados para que qualquer agente personalizado possa apresentar recomendações juntamente com agentes de primeira parte.
Este artigo descreve a arquitetura, componentes-chave, contratos de dados e fluxo de integração usados quando um agente personalizado se integra com o Agente de Ações Recomendadas. Fornece o conhecimento fundamental necessário para implementar uma integração.
Pré-requisitos
Solução NextBestActionAgent implementada na organização alvo. Para mais informações, consulte Importar um agente para um ambiente alvo.
O vendedor tem funções de segurança Dataverse apropriadas, conforme descrito nas Permissões necessárias para funções de segurança personalizadas.
Uma string SourceAgentId estável e única para o agente personalizado. Para mais informações, consulte Adicionar agentes personalizados para ações recomendadas.
São necessárias as seguintes permissões para impulsionar as ações recomendadas:
Tabela Privilégios necessários Scope msdyn_rawactioncatalogue Ler, Escrever, Acrescentar e Anexar A Mundial msdyn_prioritizedactioncatalogue Ler, Escrever, Acrescentar e Anexar A Global msdyn_recommendedactionsourceagentconfig Leitura Global msdyn_salesagentprofile Leitura Global
Arquitetura de integração
A integração do Agente de Ações Recomendadas utiliza um pipeline de processamento que recebe ações em bruto dos agentes de origem, classifica-as com recurso a um motor de pontuação UICE (Urgency, Impact, Confidence, Effort) e apresenta os resultados priorizados no carrossel do vendedor.
O pipeline de processamento funciona da seguinte forma:
- O agente personalizado deteta uma informação útil para ação (por exemplo, um negócio em risco, um negócio estagnado ou uma parte interessada em falta).
-
O agente personalizado chama a
msdyn_PushActionDataToRecommendedActionAgentAPI personalizada para empurrar a ação. - A ação é armazenada em
msdyn_rawactioncatalogue(tabela de entrada). - Para cada ação, o Motor de Pontuação:
- Obtém sinais de entidade do Dataverse.
- Obtém dados de priorização específicos do agente do catálogo de ações.
- Chama o LLM para pontuar a ação nas dimensões UICE (Urgência, Impacto, Confiança, Esforço).
- Aplica os limites mínimo e máximo.
- Calcula a pontuação final de prioridade usando
GetRecommendedActionAgentResponse.
- A ação pontuada é inserida em
msdyn_prioritizedactioncatalogue(tabela de saída). - O Carrossel de Agentes de Ações Recomendadas recupera ações pontuadas e renderiza cartas.
Componentes-chave
A integração baseia-se nas seguintes tabelas e APIs do Dataverse.
| Componente | Location | Description |
|---|---|---|
| Tabela de entrada | msdyn_rawactioncatalogue (Dataverse) | Ações brutas que os agentes personalizados promovem |
| Tabela de saída | msdyn_prioritizedactioncatalogue (Dataverse) | Ações pontuadas e classificadas para a interface |
| Configuração do agente | msdyn_recommendedactionsourceagentconfig (Dataverse) | Registo e configuração por agente |
| Push API | msdyn_PushActionDataToRecommendedActionAgent (API personalizada) | Agente → Ações recomendadas Envio da ação do agente |
Registo de agentes
Registe agentes personalizados junto do Agente de Ações Recomendadas para que a plataforma reconheça e obtenha as respetivas ações. Para mais informações sobre o registo de agentes, consulte Adicionar agentes personalizados para ações recomendadas.
Quando regista um agente, é criada uma entrada em msdyn_recommendedactionsourceagentconfig. O SourceAgentId exclusivo identifica a entrada para o agente personalizado.
Configuração do agente
A msdyn_recommendedactionsourceagentconfig tabela contém a configuração por agente que governa como o Agente de Ações Recomendadas interpreta as ações de um agente. Os dois campos mais importantes a povoar são msdyn_internalprioritizationinstruction e msdyn_syncactionexecutionstateapiconfig.
Pode aplicar a configuração atualizando manualmente o registo da tabela ou chamando a API UpsertRecommendationAgentConfigRequestpersonalizada .
Esquema de UpsertRecommendationAgentConfigRequest
O exemplo seguinte mostra os campos de configuração disponíveis no esquema.
{
"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 | cadeia (de caracteres) | Mapas para msdyn_agentname (máximo 850 personagens). Obrigatório para novos registos. |
| agentType | cadeia (de caracteres) | Categoria de agente. Use "CustomAgent" para agentes que não sejam Agentes de Oportunidades de Vendas para criar automaticamente um perfil. |
| isRecommendedActionAgentEnabled | booleano | Mapas para msdyn_isrecommendedactionagentenabled. Nulo = deixar inalterado. |
| salesAgentProfileId | Guid? | Ligações para msdyn_salesagentprofile. Usado para pesquisa de registos no upsert. |
| agentImpactMapping | cadeia (de caracteres) | Array JSON plano de nomes principais. Mapas para msdyn_agentimpactmapping. |
| Instrução de priorização interna | cadeia (de caracteres) | JSON com matriz de sinais. Mapas para msdyn_internalprioritizationinstruction. |
| syncActionExecutionStateApiConfig | cadeia (de caracteres) | JSON objeto {"syncactionuistatusapiname":"..."}. Mapas para msdyn_syncactionexecutionstateapiconfig. |
| sourceAgentUniqueId | cadeia (de caracteres) | Mapas para msdyn_sourceagentuniqueid. |
| description | cadeia (de caracteres) | Mapas para msdyn_sourcedescription (máximo 1000 caracteres). |
Instrução interna de priorização
A instrução interna de priorização contém metadados de sinal específicos do agente que indicam ao motor de pontuação como interpretar os campos de dados de priorização do agente. É um objeto JSON com uma matriz signals de nível superior. Cada sinal é desserializado em AgentSignalInstructionConfig com os campos seguintes:
| Campo | Tipo | Description |
|---|---|---|
| Nome | cadeia (de caracteres) | Identificador do sinal — utilizado como chave na secção Referência do Sinal da instrução de pontuação |
| tipo | cadeia (de caracteres) | Tipo de dados: "string", "number", "boolean" |
| origem | cadeia (de caracteres) | Rótulo descritivo para a origem do sinal. Não é usado para roteamento — fetch_info.fetch_type controla o mecanismo real de busca. Normalmente, utiliza-se "action_data" para sinais enviados pelo agente. |
| dimensão_influência | {dimensão: força} | Que dimensões da UICE este sinal afetam e com que intensidade. Chaves: "urgência", "impacto", "confiança", "esforço". Pontos fortes: "forte", "moderado", "fraco" |
| Interpretação | cadeia (de caracteres) | Descrição em linguagem natural do que o sinal significa para a pontuação — injetada no prompt do LLM |
| fiabilidade | cadeia (de caracteres) | Quão fiável é este sinal: "alto", "médio", "baixo" |
| required | booleano | Se o sinal deve estar presente para a pontuação |
| fetch_info | objecto | Controla onde e como o valor do sinal é recuperado no momento da pontuação. |
Exemplos de bloco de sinais:
{
"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" }
}
]
}
Configuração da API para o estado de execução da ação de sincronização
A API config do estado de execução da ação de sincronização é um objeto JSON que especifica o nome personalizado da API que o Agente de Ações Recomendadas chama quando um vendedor atua num cartão (por exemplo, marca-o como completo ou irrelevante). Esta API define o estado da ação no agente personalizado de origem.
{
"syncactionuistatusapiname": "your_SyncBackCustomApiName"
}
Contrato de envio de ação
Agentes personalizados executam ações usando a msdyn_PushActionDataToRecommendedActionAgent API personalizada. A API é chamada cada vez que o agente gera ou atualiza uma ação para uma entidade-alvo.
Parâmetros de solicitação
| Parâmetro | Tipo | Obrigatório | Description |
|---|---|---|---|
| msdyn_ActionId | cadeia (de caracteres) | Sim | Identificador único do agente para esta ação. Usado para deduplicação e sincronização de estado. Deve ser determinístico (mesma ação = mesmo ID). Formato de exemplo: DealRisk_{opportunityId}_{riskType} |
| msdyn_SourceAgentId | cadeia (de caracteres) | Sim | Identificador do agente. Tem de corresponder à msdyn_agentname no registo de configuração do agente. Exemplo: "Agente de Fecho de Negócio" |
| msdyn_TargetEntityId | identificador único (GUID) | Sim | o GUID do registo de destino (Opportunity, Lead) a que esta ação diz respeito |
| msdyn_TargetEntityTypeName | cadeia (de caracteres) | Sim | Nome lógico da entidade-alvo. Exemplo: "oportunidade", "liderar" |
| msdyn_ActionReason | cadeia (de caracteres) | Sim | Razão pela qual a ação foi gerada. Usado pelo motor de pontuação para o mapeamento de princípios. |
| msdyn_ActionUIPayload | cadeia (de caracteres) | No | Carga útil JSON para renderização de cartões. Se for omitido, o Agente de Ações Recomendadas não pode mostrar o cartão. |
| msdyn_ActionPrioritizationData | cadeia (de caracteres) | No | JSON com dados específicos do agente para pontuação |
| msdyn_ActionCTA | cadeia (de caracteres) | No | Tipo de string CTA. Exemplo: "Email", "Revisão", "Chamada" |
| msdyn_PrioritizationPrinciples | cadeia (de caracteres) | No | Array JSON de princípios de priorização aos quais esta ação específica está associada (pode substituir o mapeamento definido ao nível do agente) |
Exemplo: chamada de 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"];
Contrato de carga útil de UI de ação
O campo msdyn_ActionUIPayload contém conteúdo JSON que controla como um cartão de ação é apresentado no carrossel do Agente de Ações Recomendadas.
{
"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\"}"
}
Contrato de dados de priorização
O msdyn_prioritizationdata campo permite que um agente transmita sinais específicos do agente que influenciam a forma como o motor de pontuação UICE prioriza uma ação.
[
{ "signalName": "risk", "value": "low" },
{ "signalName": "riskType", "value": "4" }
]
O motor de pontuação lê estes sinais juntamente com os sinais ao nível da entidade (valor do negócio, etapa, concorrentes, etc.). O msdyn_internalprioritizationinstruction na configuração do agente indica ao LLM como interpretar cada sinal, e o motor de pontuação combina todos os sinais no prompt de pontuação da UICE.
Versionamento de ações e invalidação
Quando um agente atualiza dados de uma ação previamente enviada, cria um novo registo com a mesma msdyn_ActionId ao ligar msdyn_PushActionDataToRecommendedActionAgent novamente. O sistema cria uma nova linha em msdyn_rawactioncatalogue com o mesmo msdyn_actionid , mas um novo msdyn_rawactioncatalogueid. O Agente de Ações Recomendadas continua a mostrar a versão antiga até processar a nova.
Para invalidar uma ação (por exemplo, quando um risco é resolvido), o agente chama a msdyn_RAAgent_RemoveActionsV2 API personalizada com o actionId. Esta ação marca todos os registos msdyn_rawactioncatalogue relativos a essa ação como inativos e o cartão desaparece do carrossel.
Sincronização de estados bidirecionais
O estado da ação sincroniza-se tanto no carrossel do Agente de Ações Recomendadas como no seu agente personalizado para garantir que os vendedores vejam informação consistente, independentemente de onde atuem numa ação.
Agente de Ações Recomendadas → agente personalizado (o vendedor age no carrossel): Quando um vendedor marca uma ação como Concluída ou Ignorada no carrossel:
- O Agente de Ações Recomendadas atualiza o
msdyn_actionuistatusemmsdyn_prioritizedactioncatalogue. - O Agente de Ações Recomendadas lê
msdyn_syncactionexecutionstateapiconfigda configuração do agente. - O Agente de Ações Recomendadas chama a API personalizada do agente com:
| Parâmetro | Tipo | Description |
|---|---|---|
| actionid | GUID | O identificador da ação |
| state | cadeia (de caracteres) | "Marcado como concluído" ou "Ignorado" |
O agente deve implementar uma API personalizada que aceite estes dois parâmetros e atualize o estado da ação no seu próprio armazenamento de dados.
Agente personalizado → Agente de Ações Recomendadas (o vendedor atua na IU do agente): Quando um vendedor executa uma ação sobre uma ação na própria IU do agente (por exemplo, marca-a como mitigada numa página de agente personalizado), o agente sincroniza esse estado com o Agente de Ações Recomendadas ao chamar msdyn_SyncActionExecutionStateFromAgent. Esta ação atualiza o estado na tabela de saída do Agente de Ações Recomendadas, fazendo com que deixe de aparecer no carrossel.
| Parâmetro | Tipo | Obrigatório | Description |
|---|---|---|---|
| msdyn_ActionId | cadeia (de caracteres) | Sim | O identificador da ação (o mesmo que foi enviado) |
| msdyn_ActionState | número inteiro | Sim | Novo estado — valores (associados a MarkAsDone/Dismissed) |
| msdyn_TargetEntityId | uniqueidentifier | Sim | GUID da entidade-alvo |
| NomeDoTipoDeEntidadeDeDestino | cadeia (de caracteres) | Sim | Nome lógico da entidade-alvo |
| msdyn_TrackingId | cadeia (de caracteres) | No | ID opcional de rastreio/correlação |
Testes e validação
Após a configuração e implementação, valide o fluxo de ponta a ponta realizando as seguintes verificações.
Verificar configuração do agente:
GET [org-url]/api/data/v9.2/msdyn_recommendedactionsourceagentconfigs
?$filter=msdyn_agentname eq 'YourAgentName'
&$select=msdyn_agentname,msdyn_agentimpactmapping,msdyn_internalprioritizationinstruction,msdyn_syncactionexecutionstateapiconfig
Faça uma ação de teste ao chamar msdyn_PushActionDataToRecommendedActionAgent e verifique se msdyn_IsSuccess é verdadeira e que aparece um novo registo em msdyn_rawactioncatalogue.
Acione o cálculo da pontuação quando necessário ao chamar msdyn_RAAgent_TriggerRecommendedActionsAgentOrchestration (em vez de esperar pelo temporizador de 4 horas).
Verificar resultado pontuado:
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
Valores esperados:
-
msdyn_actionscoreé preenchida com um valor na gama 0–10. -
msdyn_hascrossedflooré falso (a ação está acima do chão e nota-se no carrossel). -
msdyn_actionuistatusé 1 (Ativo). -
msdyn_scoredetailscontém a explicação gerada pelo LLM.
Verifique a exibição do carrossel abrindo um formulário de Oportunidade no Dynamics 365 Sales e verificando a secção de Ações Sugeridas. Verifique a sincronização do estado descartando uma ação no carrossel (a API de sincronização de retorno deve ser chamada com state = "Dismissed") e assinalando uma ação na interface do agente (o registo da tabela de saída deve refletir o msdyn_actionuistatus atualizado).
Exemplo: Agente de Oportunidades de Vendas
O Agente de Oportunidades de Vendas é o primeiro agente integrado no Agente de Ações Recomendadas, e a sua integração serve como implementação de referência.
Valores de configuração do agente:
| Campo de Configuração | Valor do Agente de Oportunidades de Venda (de OraDefaults.cs) |
|---|---|
| msdyn_agentname | "AgenteDeOportunidade de Vendas" |
| msdyn_agentimpactmapping | ["DealRisk", "Velocidade do negócio"] |
| msdyn_syncactionexecutionstateapiconfig | {"syncactionuistatusapiname":"msdyn_SyncDealRiskActionFromNba"} |
| msdyn_internalprioritizationinstruction | Veja o valor de produção do Agente de Oportunidade de Vendas |
Quando a pesquisa do Agente de Oportunidades de Vendas conclui e identifica os riscos do negócio, DealRiskToNBAService encaminha cada risco como uma ação separada:
| Parâmetro push | Valor para Agentes de Oportunidades de Vendas |
|---|---|
| msdyn_ActionId | DealRisk_{opportunityId}_{riskType} |
| msdyn_SourceAgentId | DealRiskAgent |
| msdyn_TargetEntityTypeName | "Oportunidade" |
| msdyn_ActionReason | Descrição do risco a partir da investigação |
| msdyn_ActionUIPayload | Cartão com cabeçalho de risco + descrição |
| msdyn_ActionPrioritizationData |
{"riskType":"8","risk":"Missing BANT Info"} (exemplo) |
Comportamento da sincronização de estado:
-
Agente de Oportunidades de Venda → Agente de Ações Recomendadas: Quando um vendedor marca um risco como concluído na página de investigação, o agente chama
msdyn_SyncActionExecutionStateFromAgent. -
Agente de Ações Recomendadas → Agente de Oportunidades de Venda: Quando um vendedor descarta um cartão no carrossel, o Agente de Ações Recomendadas chama
ora_UpdatedActionStateFromRAAgent(conforme configurado na configuração do agente).