Compartilhar 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 chamadas por meio das APIs de Automação de Chamadas, é necessário que um Administrador do Microsoft Teams ou um Administrador Global habilite explicitamente o acesso aos recursos dos Serviços de Comunicação para o seu locatário, permitindo assim a realização de chamadas.

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.

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.

Um administrador do Microsoft Entra deve dar consentimento antes que o Graph possa ser utilizado para pesquisar usuários. 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 como realizar uma pesquisa pelo nome de exibição, mas você também pode buscar por outras propriedades:

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 do sistema sobre a chamada 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 exibirá todos os participantes na lista de participantes do Microsoft Teams. Seu aplicativo, responsável por gerenciar a chamada usando a API de Automação de Chamadas, permanecerá oculto para o usuário do Teams na tela da chamada. 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