Agregar un usuario de Microsoft Teams a una llamada existente mediante la Automatización de llamadas
Importante
Esta característica de Azure Communication Services se encuentra actualmente en versión preliminar.
Las API y los SDK en versión preliminar se proporcionan sin contrato de nivel de servicio. Se recomienda no usarlos para las cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que sus funcionalidades estén limitadas.
Para obtener más información, consulte Términos de uso complementarios para las Versiones preliminares de Microsoft Azure.
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
- Una cuenta de Azure con una suscripción activa: consulte Crear una cuenta gratuita.
- Una licencia de Teléfono Microsoft Teams y un inquilino de Teams con privilegios administrativos. La licencia de Teléfono Teams es un elemento necesario para usar esta característica, puede obtener más información sobre las licencias de Teams aquí. El usuario de Microsoft Teams también debe estar habilitado para
voice
, consulte configuración de su sistema telefónico. Los privilegios administrativos son necesarios para autorizar el recurso de Communication Services para llamar a los usuarios de Teams, que se explica más adelante en el paso 1. - Un recurso de Communication Service implementado y una cadena de conexión válida encontrada seleccionando Claves en el menú izquierdo de Azure Portal.
- Adquisición de un número de teléfono RTC del recurso de Communication Service Anote el número de teléfono que adquirió para usarlo en este inicio rápido.
- Una suscripción de Azure Event Grid para recibir el evento
IncomingCall
. - La biblioteca más reciente de la API de Automatización de llamadas de Azure Communication Service para el sistema operativo.
- Un servicio web que implementa la biblioteca API de Automatización de llamadas. Siga este tutorial.
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.
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. El siguiente ejemplo muestra una búsqueda por nombre para mostrar, pero también puede 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.
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. 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.
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
- Obtenga información sobre cómo grabar las llamadas.
- Más información sobre la automatización de llamadas y sus características.
- Más información sobre las funcionalidades de soporte técnico de interoperabilidad de Teams con Automatización de llamadas de Azure Communication Services
- Obtenga información sobre la acción Reproducir para reproducir audio en una llamada.
- Aprenda a crear un flujo de trabajo de llamadas para un escenario de soporte técnico al cliente.