Adicionar um usuário do Microsoft Teams a uma chamada existente usando a Automação de Chamadas
Nesse início rápido, vamos usar as APIs de Automação de Chamadas dos Serviços de Comunicação do Azure para adicionar, remover e transferir uma chamada para um usuário do Teams.
Pré-requisitos
- Uma conta do Azure com uma assinatura ativa.
- Uma licença de telefone do Microsoft Teams e um locatário do Teams com privilégios administrativos. A licença de telefone do Teams é obrigatória para o uso desse recurso. Saiba mais sobre as licenças do Teams aqui. O usuário do Microsoft Teams também precisa ter o
voice
habilitado. Confira Configurar a Telefonia do Teams na sua organização. São necessários privilégios administrativos para autorizar chamadas do recurso dos Serviços de Comunicação para usuários do Teams, o que será explicado mais adiante na Etapa 1. - Um recurso do Serviço de Comunicação implantado e uma cadeia de conexão válida encontrados selecionando Chaves no menu do lado esquerdo no portal do Azure.
- Adquirir um número de telefone PSTN do recurso do Serviço de Comunicação. Observe o número de telefone que você adquiriu para usar neste início rápido.
- Uma assinatura da Grade de Eventos do Azure para receber o evento
IncomingCall
. - A Biblioteca de APIs de Automação de Chamadas dos Serviços de Comunicação do Azure mais recente para o seu sistema operacional.
- Um serviço web que implemente a biblioteca de APIs de Automação de Chamadas: siga esse tutorial.
Etapa 1: Autorização do seu Recurso dos Serviços de Comunicação do Azure para habilitar a chamada para usuários do Microsoft Teams
Para habilitar a chamada por meio de APIs de Automação de Chamadas, um Administrador do Microsoft Teams ou um Administrador Global precisam habilitar explicitamente o acesso de recursos dos Serviços de Comunicação ao seu locatário para permitir a chamada.
Set-CsTeamsAcsFederationConfiguration (MicrosoftTeamsPowerShell) Configuração no nível de locatário que habilita/desabilita a federação entre seus locatários e recursos específicos dos Serviços de Comunicação.
Set-CsExternalAccessPolicy (SkypeForBusiness)Política de usuário que permite ao administrador um controle adicional de quais usuários em sua organização podem participar de comunicações federadas com usuários dos Serviços de Comunicação.
Observe que o usuário do Teams precisa ter uma licença de telefone para usar esse recurso. Para atribuir a licença, use o cmdlet Set-CsPhoneNumberAssignment e defina o parâmetro EnterpriseVoiceEnabled como $true. Para obter informações adicionais, consulte Configurar o Teams Phone em sua organização.
Etapa 2: Usar a API do Graph para obter a ID de objeto do Microsoft Entra para usuários do Teams e, opcionalmente, verificar sua presença
Uma ID de objeto (OID) do Microsoft Entra de um usuário do Teams é necessária para adicioná-los a uma chamada dos Serviços de Comunicação ou transferir a chamada para eles. A OID pode ser recuperada por meio do: 1) portal do Office; 2) centro de administração do Microsoft Entra; 3) Microsoft Entra Connect; ou 4) API do Graph. O exemplo a seguir usa a API do Graph.
Antes do Graph poder ser usado para pesquisar usuários, o consentimento precisa ser dado por um administrador do Microsoft Entra. Saiba mais seguindo o documento de visão geral da API de Segurança do Microsoft Graph. A OID pode ser recuperada usando a API de listas de usuários para pesquisar usuários. O exemplo a seguir mostra uma pesquisa por nome de exibição, mas outras propriedades também podem ser pesquisadas:
Listar usuários que usam o Microsoft Graph v1.0:
Request:
https://graph.microsoft.com/v1.0/users?$search="displayName:Art Anderson"
Permissions:
Application and delegated. Refer to documentation.
Response:
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users",
"value": [
{
"displayName": "Art Anderson",
"mail": "artanderson@contoso.com",
"id": "fc4ccb5f-8046-4812-803f-6c344a5d1560"
}
Opcionalmente, a Presença de um usuário pode ser recuperada usando a API getPresence e o ObjectId do usuário. Saiba mais na documentação do Microsoft Graph v1.0.
Request:
https://graph.microsoft.com/v1.0/users/fc4ccb5f-8046-4812-803f-6c344a5d1560/presence
Permissions:
Delegated only. Application not supported. Refer to documentation.
Response:
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('fc4ccb5f-8046-4812-803f-6c344a5d1560')/presence/$entity",
"id": "fc4ccb5f-8046-4812-803f-6c344a5d1560",
"availability": "Offline",
"activity": "Offline"
Etapa 3: Adicionar um usuário do Teams a uma chamada existente dos Serviços de Comunicação controlada por APIs de Automação de Chamadas
Você precisa executar a etapa de pré-requisito e ter um aplicativo de serviço web para controlar uma chamada dos Serviços de Comunicação. Usando o objeto callConnection, adicione um participante à chamada.
CallAutomationClient client = new CallAutomationClient('<Connection_String>');
AnswerCallResult answer = await client.AnswerCallAsync(incomingCallContext, new Uri('<Callback_URI>'));
await answer.Value.CallConnection.AddParticipantAsync(
new CallInvite(new MicrosoftTeamsUserIdentifier('<Teams_User_Guid>'))
{
SourceDisplayName = "Jack (Contoso Tech Support)"
});
CallAutomationClient client = new CallAutomationClientBuilder().connectionString("<resource_connection_string>").buildClient();
AnswerCallResult answer = client.answerCall(incomingCallContext, "<Callback_URI>"));
answer.getCallConnection().addParticipant(
new CallInvite(new MicrosoftTeamsUserIdentifier("<Teams_User_Guid>"))
.setSourceDisplayName("Jack (Contoso Tech Support)"));
const client = new CallAutomationClient("<resource_connection_string>");
const answer = await client.answerCall(incomingCallContext, "<Callback_URI>"));
answer.callConnection.addParticipant({
targetParticipant: { microsoftTeamsUserId: "<Teams_User_Guid>" },
sourceDisplayName: "Jack (Contoso Tech Support)"
});
call_automation_client = CallAutomationClient.from_connection_string("<resource_connection_string>")
answer = call_automation_client.answer_call(incoming_call_context = incoming_call_context, callback_url = "<Callback_URI>")
call_connection_client = call_automation_client.get_call_connection(answer.call_connection_id)
call_connection_client.add_participant(target_participant = CallInvite(
target = MicrosoftTeamsUserIdentifier(user_id="<USER_ID>"),
source_display_name = "Jack (Contoso Tech Support)"))
No cliente de área de trabalho do Microsoft Teams, a chamada do Jack será enviada ao usuário do Microsoft Teams por meio de uma notificação toast da chamada sendo recebida.
Após o usuário do Microsoft Teams aceitar a chamada, a experiência de chamada para o usuário do Microsoft Teams terá todos os participantes exibidos no rol do Microsoft Teams. Observe que seu aplicativo que está gerenciando a chamada usando a API de Automação de Chamadas permanecerá oculto para o usuário do Teams na tela de chamada, exceto no caso em que você iniciar uma chamada 1:1 com o usuário do Teams.
Etapa 4: Remover um usuário do Teams de uma chamada existente dos Serviços de Comunicação controlada por APIs de Automação de Chamadas
await answer.Value.CallConnection.RemoveParticipantAsync(new MicrosoftTeamsUserIdentifier('<Teams_User_Guid>'));
answer.getCallConnection().removeParticipant(new MicrosoftTeamsUserIdentifier("<Teams_User_Guid>"));
answer.callConnection.removeParticipant({ microsoftTeamsUserId: "<Teams_User_Guid>" });
call_connection_client.remove_participant(target_participant = MicrosoftTeamsUserIdentifier(user_id="<USER_ID>"))
Recurso opcional: transferência de uma chamada existente dos Serviços de Comunicação controlada por APIs de Automação de Chamadas para um usuário do Teams
await answer.Value.CallConnection.TransferCallToParticipantAsync(new MicrosoftTeamsUserIdentifier('<Teams_User_Guid>'));
answer.getCallConnection().transferCallToParticipant(new MicrosoftTeamsUserIdentifier("<Teams_User_Guid>"));
answer.callConnection.transferCallToParticipant({ microsoftTeamsUserId: "<Teams_User_Guid>" });
call_connection_client.transfer_call_to_participant(target_participant = MicrosoftTeamsUserIdentifier(user_id = "<USER_ID>"))
Limpar os recursos
Se quiser limpar e remover uma assinatura dos Serviços de Comunicação, exclua o recurso ou o grupo de recursos. Excluir o grupo de recursos também exclui todos os recursos associados a ele. Saiba mais sobre como limpar recursos.
Próximas etapas
- Saiba como gravar suas chamadas.
- Saiba mais sobre a Automação de Chamadas e seus recursos.
- Saiba mais sobre os recursos de Suporte à interoperabilidade do Teams com a Automação de Chamadas dos Serviços de Comunicação do Azure
- Saiba mais sobre a ação Reproduzir para reproduzir áudio em uma chamada.
- Saiba como criar um fluxo de trabalho de chamada para um cenário de suporte ao cliente.