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:
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.
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.
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:
Passo 1: Registar o fornecedor
Adicione permissão de API para gravação de multimédia:
Na aplicação Microsoft Entra ID que criou, aceda a Permissões da API.
Selecione Adicionar uma permissão.
Em APIs que a minha organização utiliza, pesquise por Gravação de Multimédia para o Dynamics 365 Sales e selecione-a:
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.
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.
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.
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:
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.
Inicie sessão como Administrador de sistema na aplicação Hub de Vendas.
A partir de área Alterar, selecione Definições do Sales Insights.
Aceda a Definições globais>Informações de Conversação. Na secção Fornecedores de chamada, verá o fornecedor de terceiros que registou.
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.
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:
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.