Compartir vía


Agregar un usuario de Microsoft Teams a una llamada existente mediante la Automatización de llamadas

En este inicio rápido, usamos las API de Automatización de llamadas de Azure Communication Services para agregar, quitar y transferir llamadas a un usuario de Teams.

Requisitos previos

Paso 1: Autorización para el recurso de Azure Communication Services para habilitar la llamada a usuarios de Microsoft Teams

Para habilitar la llamada a través de las API de Automatización de llamadas, un Administrador de Microsoft Teams o un Administrador global debe habilitar explícitamente el acceso de los recursos de Communication Services a su inquilino para permitir llamadas.

Configuración de nivel de inquilino Set-CsTeamsAcsFederationConfiguration (MicrosoftTeamsPowerShell) que habilita o deshabilita la federación entre su inquilino y recursos específicos de Communication Services.

Directiva de usuario set-CsExternalAccessPolicy (SkypeForBusiness) que permite al administrador controlar aún más qué usuarios de su organización pueden participar en las comunicaciones federadas con los usuarios de Communication Services.

Tenga en cuenta que el usuario de Teams debe tener licencia de teléfono para usar esta característica. Para asignar la licencia, use el cmdlet Set-CsPhoneNumberAssignment y establezca el parámetro EnterpriseVoiceEnabled en $true. Para obtener más información, vea Configurar el teléfono de Teams en su organización.

Paso 2: Usar Graph API para obtener el id. de objeto de Microsoft Entra para los usuarios de Teams y, opcionalmente, comprobar su presencia

Se requiere el id. de objeto de Microsoft Entra (OID) de un usuario de Teams para agregarlo o transferirlo desde una llamada de Communication Services. El OID se puede recuperar a través de 1) Portal de Office, 2) Centro de administración de Microsoft Entra, 3) Microsoft Entra Connect; o 4) Graph API. En el ejemplo siguiente se usa Graph API.

Un administrador de Microsoft Entra debe conceder el consentimiento antes de que Graph pueda usarse para buscar usuarios, para obtener más información, consulte el documento de información general de la API de Seguridad de Microsoft Graph. El OID se puede recuperar mediante la API de usuarios de lista para buscar usuarios. A continuación se muestra una búsqueda por nombre para mostrar, pero también se pueden buscar otras propiedades:

Enumerar usuarios con 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, la presencia de un usuario se puede recuperar mediante la API get presence y el ObjectId de usuario. Obtenga más información en la documentación de 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"

Paso 3: Agregar un usuario de Teams a una llamada de Communication Services existente controlada por las API de Automatización de llamadas

Debe completar el paso de requisitos previos y tener una aplicación de servicio web para controlar una llamada de Communication Services. Con el objeto callConnection, agregue un participante a la llamada.

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)"))

En el cliente de escritorio de Microsoft Teams, la llamada de Jack se enviará al usuario de Microsoft Teams a través de una notificación del sistema de llamada entrante.

Captura de pantalla del cliente de escritorio de Microsoft Teams, la llamada de Jack se envía al usuario de Microsoft Teams a través de una notificación del sistema de llamada entrante.

Después de que el usuario de Microsoft Teams acepte la llamada, la experiencia en llamada para el usuario de Microsoft Teams tendrá todos los participantes mostrados en la lista de Microsoft Teams. Tenga en cuenta que la aplicación que administra la llamada mediante la API de Automatización de llamadas permanecerá oculta al usuario de Teams en la pantalla de llamada, excepto en el caso de que inicie una llamada de 1:1 con el usuario de Teams.
Captura de pantalla del usuario de Microsoft Teams que acepta la llamada y escribe la experiencia en llamada para el usuario de Microsoft Teams.

Paso 4: Quitar un usuario de Teams de una llamada de Communication Services existente controlada por las API de Automatización de llamadas

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>"))

Característica opcional: Transferencia a un usuario de Teams desde una llamada de Communication Services existente controlada por las API de Automatización de llamadas

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>"))

Limpieza de recursos

Si quiere limpiar y quitar una suscripción a Communication Services, puede eliminar el recurso o grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él. Obtenga más información sobre la limpieza de recursos.

Pasos siguientes