Share via


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

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.

Captura de tela do cliente de área de trabalho do Microsoft Teams: a chamada de Jack é 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.
Captura de tela do usuário do Microsoft Teams aceitando a chamada e entrando na experiência de chamada para o usuário do Microsoft 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