Partilhar via


Integrar marcadores de terceiros com as informações de conversação do Dynamics 365 (pré-visualização)

[Este artigo é uma documentação de pré-lançamento e está sujeito a alterações.]

Com esta integração, os utilizadores do Dynamics 365 podem utilizar marcadores fornecidos por empresas de telefonia de terceiros, como a Twilio Flex, para fazer e receber chamadas telefónicas no Dynamics 365 e obter informações em tempo real geradas por IA, bem como uma análise detalhada após as chamadas. Mais informações sobre as informações de conversação do Dynamics 365

Importante

  • Esta é uma funcionalidade de pré-visualização.
  • As caraterísticas de pré-visualização não se destinam a utilização em produção e podem ter funcionalidade restrita. Estas caraterísticas estão sujeitas aos termos de utilização suplementares disponíveis antes do lançamento oficial, para que os clientes possam ter acesso antecipadamente e enviar comentários.

Como funciona a integração

A um nível alto, a integração é composta por três partes:

  1. Registar o fornecedor: registe os detalhes do fornecedor e faça com que a lista de utilizadores seja registada utilizando a API de informações de conversação.

  2. Bifurcar a multimédia efetue a bifurcação da transmissão de áudio para gravadores das informações de conversação utilizando um protocolo SIPREC.

  3. Enviar eventos em tempo real: para ativar a experiência de transcrição em tempo real e de informações de chamadas, envie eventos da IU a partir da IU cliente do fornecedor para as informações de conversação do Dynamics 365.

Para um exemplo da integração entre as informações de conversação do Dynamics 365 e um fornecedor de telefonia de terceiros, Twilio Flex, consulte Integrar o Twilio Flex com as informações de conversação do Dynamics 365.

O diagrama seguinte ilustra como a integração funciona:

Diagrama que representa o fluxo de integração

Passo 1: Registar o fornecedor

  1. Criar uma aplicação de ID do Microsoft Entra.

  2. Adicione permissão de API para gravação de multimédia:

    1. Na aplicação Microsoft Entra ID que criou, aceda a Permissões da API.

    2. Selecione Adicionar uma permissão.

    3. Em APIs que a minha organização utiliza, pesquise por Gravação de Multimédia para o Dynamics 365 Sales e selecione-a: Captura de ecrã da opção de gravação de multimédia

    4. Adicione a permissão Users.Read.All e selecione Adicionar permissão

    Nota

    Certifique-se de que obtém o consentimento do administrador para que a permissão seja capaz de chamar a API de informações de conversação no contexto da aplicação. Mais informações sobre permissões e consentimento.

  3. Obtenha o token para executar as APIs de Informações de Conversação utilizando a aplicação criada na secção anterior:

    curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token -d 'client_id=<your app id>' -d 'grant_type=client_credentials' -d 'scope=f448d7e5-e313-4f90-a3eb-5dbb3277e4b3/.default' -d 'client_secret=<your app secret>'

    O parâmetro scope especifica o ID da aplicação da aplicação Informações de Conversação. Não altere este valor.

    Para obter mais informações sobre o comando curl, consulte Obter tokens do ID do Microsoft Entra para principais de serviço.

  4. Chame a seguinte API de informações de conversação para registar o fornecedor de serviço de terceiros:
    POST /api/v1.0/providers/tenants

    Especifique os seguintes parâmetros no corpo do pedido:

    • orgID: especifique o ID da organização do Dynamics 365.

    • Tipo: especifique "personalizado" para marcadores de terceiros.

    • alojamento: especifique o tipo de alojamento do fornecedor de telefonia. Por exemplo, "cloud" ou "no local".

    • AccountId: especifique o ID da conta do fornecedor de telefonia.

    • CerfificateSubjectName e CertificateIssuer: especifique os detalhes do certificado do fornecedor de telefonia.

    • SourceIPNetwork: especifique o endereço IP do cliente SIPREC. Especifique "0.0.0.0" se não quiser restringir o endereço IP.
      O fragmento que se segue é um exemplo do corpo do pedido:

      
      {
         "orgId": "ad3dca46-962a-4895-9f85-d25f3828781f",
         "Type": "custom",
         "hosting": "cloud",
         "displayName": "Test Custom Provider",
         "AuthenticationDetails": 
         {
             "AccountId":"adxxxxx-xxxx-xxxx-xxxx-xxxxxxxx",
             "CertificateSubjectName": "certSubject",
             "CertificateIssuer": "issuer",
             "SourceIPNetwork": "0.0.0.0"
         }
      }
      

    Para obter mais informações sobre a API, consulte a Documentação do Swagger.

  5. Chame a seguinte API de informações de conversação para obter a lista de utilizadores a gravar:
    GET /api/v1.0/providers/users

Depois de o admin do Dynamics 365 Sales criar a política de gravação, o fornecedor poderá utilizar este ponto final para filtrar a multimédia que será bifurcada para gravadores das informações de conversação.

Passo 2: Bifurcar a multimédia (integração SIPREC)

Os gravadores de Informações de Conversação implementam o protocolo SIPREC padrão.

A comunicação é protegida através da utilização dos protocolos SIPS (porta 5061) e SRTP. A autenticação é feita com mTLS na ligação de mensagem SIPS baseia-se no certificado fornecido à API — o que significa que o fornecedor tem de estar registado para que um inquilino estabeleça a ligação SIPS.

A seguinte captura de ecrã ilustra a comunicação entre o cliente SIPREC e o servidor SIPREC:

Captura de ecrã de uma comunicação de amostra entre o cliente SIPREC e o servidor SIPREC.

Os metadados seguintes são necessários para informações de conversação:

Cabeçalhos:

Nome do Cabeçalho Descrição Exemplo de Valor
ID de Chamada Identificador exclusivo da chamada. Este ID é utilizado para correlacionar sinais SIP e ações do utilizador, tais como iniciar/parar a gravação. efxxxxxxxxxxxxx
X-AccountId Identificador exclusivo da conta à qual a chamada pertence. Este ID é utilizado para autenticação e autorização. Este é o mesmo ID da conta registado na API para o inquilino. ACxxxxxxxxxxxxxxxxxxxxxxx

Metadados

Nome da chave de metadados Descrição Exemplo de Valor
Função Indica se é uma chamada de entrada ou de saída para o vendedor. ["entrada", "saída"]
CallerDisplayName Nome a apresentar do chamador. Se não estiver disponível, é apresentado o número de telefone. Kenny Smith
CalleeDisplayName Nome a apresentar do destinatário. Se não estiver disponível, é apresentado o número de telefone. Alex Baker

Eis exemplos de mensagens de convite e de despedida com os cabeçalhos e metadados necessários:

Mensagem de CONVITE:

INVITE sip:SRS@media.recording.dynamics.com:5061;transport=tls SIP/2.0 
Via: SIP/2.0/TLS 84.172.x.x:5061;branch=z9hG4bK4fa2.cdabfe83d76d3c41987802096d3b342a.0;received=172.16.x.x;rport=40334 
Via: SIP/2.0/UDP 172.25.x.x:5060;rport=5060;branch=z9hG4bK917ce574-0345-4c3d-9b63-d98c2c57dbe6_c3356d0b_599-10236398515455707148 
To: <sip:SRS@media.recording.dynamics.com:5061;transport=tls> 
From: <sip:SRC@sip.provider.com>;tag=66790678_c3356d0b_917ce574-0345-4c3d-9b63-d98c2c57dbe6 
Call-ID: efab0870bc597cb3fb56010921e2f57f 
CSeq: 1 INVITE 
Contact: <sip:SRC@172.25.x.x:5060;transport=udp>;+sip.src 
Max-Forwards: 67 
Record-Route: <sip:84.172.x.x:5061;transport=tls;r2=on;lr>,<sip:84.172.x.x;r2=on;lr> 
User-Agent: provider Gateway 
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,NOTIFY 
Require: siprec 
Content-Length: 3194 
Content-Type: multipart/mixed;boundary=\"----=_Part_1253_283419664.1674116473425\" 
Min-SE: 35 
X-AccountId: ACxxxxxxxxxxxxxxxxxxxx 
------=_Part_1253_283419664.1674116473425 

Content-Type: application/sdp 
v=0 
o=root 1176539620 1176539620 IN IP4 172.18.x.x 
s=provider Media Gateway 
c=IN IP4 84.172.x.x 
t=0 0 
m=audio 15352 RTP/SAVP 0 8 101 
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:<Encryption_key>
a=rtpmap:0 PCMU/8000 
a=rtpmap:8 PCMA/8000 
a=rtpmap:101 telephone-event/8000 
a=fmtp:101 0-16 
a=ptime:20 
a=maxptime:20 
a=sendonly 
a=label:inbound 
m=audio 16022 RTP/SAVP 0 8 101 
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:<Encryption_key> 
a=rtpmap:0 PCMU/8000 
a=rtpmap:8 PCMA/8000 
a=rtpmap:101 telephone-event/8000 
a=fmtp:101 0-16 
a=ptime:20 
a=maxptime:20 
a=sendonly 
a=label:outbound 
------=_Part_1253_283419664.1674116473425 

Content-Type: application/rs-metadata+xml 
Content-Disposition: recording-session 
<?xml version=\"1.0\" encoding=\"UTF-8\"?> 
<recording xmlns='urn:ietf:params:xml:ns:recording:1'> 
    <datamode>complete</datamode> 
    <session session_id=\"Wd/putWgTWCW2z1lI5Db9w==\"> 
            <ExtensionParameters  xmlns=\"http://provider.com/siprec\"> 
                    <Parameter name=\"Role\" value=\"inbound\"/> 
                    <Parameter name=\"CallerDisplayName\" value=\"Kiana Anderson\"/> 
                    <Parameter name=\"CalleeDisplayName\" value=\"Tomas Richardson\"/> 
            </ExtensionParameters> 
    </session> 
        <participant participant_id=\"bXCloPcETS6P/kfeeJtiow==\"> 
            <nameID aor=\"EE5C7EF0\"/> 
        </participant> 
        <participant participant_id=\"3nPi8XzBSzWrtSLlkU8Gjw==\"> 
            <nameID aor=\"230908\"/> 
        </participant> 
        <stream stream_id=\"9xff8FcdRUaJCSTxWFbV9g==\" session_id=\"Wd/putWgTWCW2z1lI5Db9w==\"><label>inbound</label></stream> 
        <stream stream_id=\"f/Qezx4jTMqiWSB1vW7oJA==\" session_id=\"Wd/putWgTWCW2z1lI5Db9w==\"><label>outbound</label></stream> 
    <sessionrecordingassoc session_id=\"Wd/putWgTWCW2z1lI5Db9w==\"> 
        <associate-time>2023-01-19T08:21:13.382512Z</associate-time> 
    </sessionrecordingassoc> 
        <participantsessionassoc participant_id=\"bXCloPcETS6P/kfeeJtiow==\" session_id=\"Wd/putWgTWCW2z1lI5Db9w==\"> 
            <associate-time>2023-01-19T08:21:13.382512Z</associate-time> 
        </participantsessionassoc> 
        <participantsessionassoc participant_id=\"3nPi8XzBSzWrtSLlkU8Gjw==\" session_id=\"Wd/putWgTWCW2z1lI5Db9w==\"> 
            <associate-time>2023-01-19T08:21:13.382512Z</associate-time> 
        </participantsessionassoc> 
        <participantstreamassoc participant_id=\"bXCloPcETS6P/kfeeJtiow==\"> 
                <send>9xff8FcdRUaJCSTxWFbV9g==</send> 
                <recv>f/Qezx4jTMqiWSB1vW7oJA==</recv> 
        </participantstreamassoc> 
        <participantstreamassoc participant_id=\"3nPi8XzBSzWrtSLlkU8Gjw==\"> 
                <send>f/Qezx4jTMqiWSB1vW7oJA==</send> 
                <recv>9xff8FcdRUaJCSTxWFbV9g==</recv> 
        </participantstreamassoc> 
</recording> 
------=_Part_1253_283419664.1674116473425--

Mensagem de DESPEDIDA:

BYE sip:SRS@media.recording.dynamics.com:5061;transport=tls SIP/2.0 
Via: SIP/2.0/TLS 84.172.x.x:5061;branch=z9hG4bK1fa2.d03c36b567136fcfae84281e926cda62.0;received=172.16.x.x;rport=40334 
Via: SIP/2.0/UDP 172.25.x.x:5060;rport=5060;received=84.144.x.x;branch=z9hG4bK917ce574-0345-4c3d-9b63-d98c2c57dbe6_c3356d0b_600-2513288074170844985 
To: <sip:SRS@media.recording.dynamics.com:5061;transport=tls>;tag=OXFWHPJQTL 
From: <sip:SRC@sip.provider.com>;tag=66790678_c3356d0b_917ce574-0345-4c3d-9b63-d98c2c57dbe6 
Call-ID: efab0870bc597cb3fb56010921e2f57f 
CSeq: 2 BYE 
Max-Forwards: 68 
User-Agent: provider Gateway 
Require: siprec 
Content-Length: 901 
Content-Type: multipart/mixed;boundary=\"----=_Part_29418_1017575873.1674116842924\" 
X-AccountId: ACxxxxxxxxxxxxx 

Pontos finais e regiões suportados do gravador

A tabela seguinte lista os pontos finais suportados e respetivas regiões do gravador. Pode configurar os gravadores que pretende utilizar nas definições do fornecedor de telefonia. Para obter informações sobre como isto é feito para o Twilio Flex, consulte o Passo 2: Instalar o conector SIPREC e encaminhar as chamadas para o Dynamics 365.

Ponto Final País/Região
media.recording.dynamics.com Global (região mais próxima)
southeastasia.media.recording.dynamics.com Sudeste Asiático
australiaeast.media.recording.dynamics.com Austrália
sam.media.recording.dynamics.com América do Sul
canadacentral.media.recording.dynamics.com Canadá
switzerlandnorth.media.recording.dynamics.com Suíça
eastus.media.recording.dynamics.com E.U.A.
francecentral.media.recording.dynamics.com França
centralindia.media.recording.dynamics.com Índia
japaneast.media.recording.dynamics.com Japão
uae.media.recording.dynamics.com UAE
uksouth.media.recording.dynamics.com Reino Unido
westeurope.media.recording.dynamics.com Europa Ocidental
zaf.media.recording.dynamics.com África do Sul

Passo 3: Enviar eventos em tempo real (Integração do cliente do marcador)

Para permitir que as informações de conversação forneçam transcrições e informações em tempo real, o marcador de terceiros pode utilizar dois eventos para notificar quando uma chamada é iniciada ou terminada.

  • Evento de chamada iniciada: quando as informações de conversação obtêm o evento "chamada iniciada", este mostrará o botão de gravação e a transcrição e informações em tempo real.

  • Evento de chamada terminada: quando as informações de conversação obtêm o evento "chamada terminada", terminará a chamada e mostrará o botão Resumo completo para obter o resumo e as informações da chamada geradas pela IA.

Para enviar os eventos, utilize a API raiseEvent no Estrutura de Integração de Canais do Dynamics 365 (CIF).

Eis um fragmento de código de amostra para enviar os eventos:

export interface CallStartedEvent { 
  callId: string; 
  startTime: Date; 
  isIncomingCall: boolean; 
  contactNumber: string; 
  contactName: string; 
} 

export interface CallEndedEvent { 
  callId: string; 
  callDurationInSeconds: number; 
  callTerminationReason: string; // ['success', 'error'] 
  callEndTime: Date; 
  isCallStarted: boolean; 
} 

dialer.Actions.addListener('onCallStarted', (payload: any) => { 
  const callStartedEvent : CallStartedEvent = { 
    callId: payload.call_sid, 
    startTime: new Date(), 
    isIncomingCall: payload.attributes.is_incoming_call, 
    contactName: payload.attributes.caller_name, 
    contactNumber: payload.attributes.caller_phone_number 
  }; 

  // @ts-ignore 
  Microsoft.CIFramework.raiseEvent('WIDGET_CALL_STARTED', callStartedEvent); 
}); 

dialer.Actions.addListener('onCallEnded', (payload: any) => { 
  const callEndedEvent : CallEndedEvent = { 
    callId: payload.call_sid, 
    callEndTime: new Date(), 
    callTerminationReason: 'success', 
    isCallStarted: true, 
    callDurationInSeconds: payload.attributes.call_length 
  }; 

  // @ts-ignore 
  Microsoft.CIFramework.raiseEvent('WIDGET_CALL_ENDED', callEndedEvent); 
});

Testar a integração

Depois de registar o novo fornecedor com o inquilino e de configurar a bifurcação SIPREC e os eventos de marcador do cliente, pode testar a integração criando uma nova política de gravação com o novo fornecedor.

  1. Inicie sessão como Administrador de sistema na aplicação Hub de Vendas.

  2. A partir de área Alterar, selecione Definições do Sales Insights.

  3. Aceda a Definições globais>Informações de Conversação. Na secção Fornecedores de chamada, verá o fornecedor de terceiros que registou.

  4. Criar uma política de gravação para o novo fornecedor. Para obter mais informações, consulte Configurar o Microsoft Teams para informações de conversação

A seguinte captura de ecrã é um exemplo de uma política de gravação para o Twilio.

Captura de ecrã de uma política de gravação para o Twilio

Agora, chame um utilizador que faz parte do direito de acesso selecionado (no nosso exemplo, a política está ativada para todos os direitos de acesso).

Quando o Dynamics 365 receber o evento callStarted do marcador, terá a opção de iniciar a gravação:

Captura de ecrã da notificação para gravar chamadas

Depois de selecionar Gravar, poderá ver a transcrição em tempo real durante a chamada, bem como um resumo completo e informações da chamada no final da mesma.

Ver e compreender a página de resumo da chamada