Compartir a través de


API de aprovisionamiento de Puerta de enlace de comunicaciones de Azure

La API de aprovisionamiento de Azure Communications Gateway para operadores de telecomunicaciones le permite aprovisionar los detalles de los clientes y los números asignados a ellos en Azure Communications Gateway (ACG). La API de aprovisionamiento también admite el aprovisionamiento de flujo a través de algunos servicios de comunicaciones de back-end.

El aprovisionamiento de clientes y números es obligatorio (con la API de aprovisionamiento o el Portal de administración de números basado en explorador) para todos los casos de uso excepto Operator Connect y Teléfono Teams Mobile. Para Operator Connect y Teléfono Teams Mobile, el uso de la API de aprovisionamiento o el Portal de administración de números es opcional y puede integrarse directamente con la API de Operator Connect en su lugar.

Introducción

Requisitos previos

  • Un inquilino con la aplicación Azure Communications Gateway implementada.
  • Nombre de dominio completo (FQDN) de La puerta de enlace de comunicaciones de Azure que se muestra en la página Información general del recurso en el Azure Portal. La API está disponible en el puerto 443 de provapi.<base-domain>.
  • Una máquina con una dirección IP que permite el acceso a la API, tal como se configura en una lista de permitidos como parte de la implementación de Azure Communications Gateway.

Autenticación y autorización

La API de aprovisionamiento usa OAuth 2.0 para controlar el acceso a los recursos. La aplicación cliente debe obtener un token de portador de autenticación válido para acceder a la API de aprovisionamiento. El token de portador indica que la aplicación está autorizada para uno o varios de los ámbitos (roles) para la API de aprovisionamiento. Se recomienda usar el flujo de credenciales de cliente (diseñado para un proceso del lado servidor).

Los siguientes ámbitos están disponibles para la API de aprovisionamiento:

  • ProvisioningAPI.Admin: capacidad de invocar cualquier operación en la API.
  • ProvisioningAPI.Read: capacidad de invocar cualquier operación de lectura (GET) en la API.
  • ProvisioningAPI.Write: capacidad de invocar cualquier operación de escritura (PUT, PATCH) en la API.
  • ProvisioningAPI.Delete: capacidad de invocar cualquier operación de eliminación (DELETE) en la API.

Para configurar un flujo de credenciales de cliente:

  1. Asegúrese de que la aplicación puede admitir el flujo de credenciales de cliente.
    • Cuando la aplicación solicita un token para la API de aprovisionamiento, debe usar los campos siguientes.

      Parámetro Condición Descripción
      tenant requerido El inquilino de directorio que contiene Azure Communications Gateway, en el formulario guid o nombre de dominio.
      scope requerido Ámbito de autorización con el identificador de recurso de Azure Communications Gateway. Para el flujo de credenciales de cliente que se describe aquí, el ámbito debe ser https://func-voiceservice-rp-prod-eastuseuap.azurewebsites.net/.default.
      client_id requerido Identificador de aplicación (cliente) asignado a la aplicación.
    • La roles notificación del token recibido especifica los roles (ámbitos) a los que está autorizada la aplicación cliente para acceder.

    • Las solicitudes a la plataforma de aprovisionamiento de Azure Communications Gateway deben tener un Authorization encabezado con este token de portador.

    • Consulte la documentación del flujo de credenciales de cliente para obtener ejemplos de uso de tokens.

  2. Use el Azure Portal para registrar la aplicación en el mismo inquilino que la implementación de Azure Communications Gateway. Consulte Inicio rápido: Registro de una aplicación en el Plataforma de identidad de Microsoft: Microsoft Entra | Microsoft Learn.
  3. Asígnese como propietario para el registro de la aplicación. Consulte Asignación del propietario de la aplicación.
  4. Configure el registro de aplicaciones creado mediante el registro de la aplicación con roles de aplicación que usan los ámbitos de la API de aprovisionamiento, como se describió anteriormente.
  5. Como administrador del inquilino, permita que la aplicación use los roles de aplicación que asignó. Consulte Conceder consentimiento del administrador.

La API de aprovisionamiento usa cadenas de confianza estándar de Microsoft para los certificados de seguridad.

Conceptos clave

La plataforma de aprovisionamiento tiene tres recursos clave que el operador puede administrar: cuentas, números y solicitudes de información.

  • Los recursos de cuenta son descripciones de los clientes del operador (normalmente, una empresa) y la configuración por cliente para el aprovisionamiento de servicios.
  • Los recursos numéricos pertenecen a una cuenta. Describen números, los servicios (por ejemplo, enrutamiento directo de Microsoft Teams) de los que usan los números y cualquier configuración adicional por número.
  • La solicitud de recursos de información (RFI) son descripciones de los clientes potenciales para los operadores que están expresando interés en recibir el servicio del operador a través de servicios back-end específicos. Actualmente solo están disponibles las RFIs generadas a partir de Operator Connect y Teléfono Teams Mobile consents.

Por ejemplo, para proporcionar un servicio de enrutamiento directo de Microsoft Teams a un cliente, Contoso, cree un recurso de cuenta con la API de aprovisionamiento para Contoso. La cuenta contiene la configuración del enrutamiento directo (por ejemplo, un subdominio y los tokens correspondientes, necesarios para configurar registros DNS que Microsoft Teams puede usar para validar la configuración del cliente). A continuación, debe agregar recursos numéricos a la cuenta y habilitar cada número para enrutamiento directo.

Sugerencia

Debe habilitar el servicio tanto en la cuenta como en los números de la cuenta.

Aprovisionamiento de servicios back-end con la sincronización del servicio back-end

Azure Communications Gateway debe tener información sobre los números a los que proporciona servicio para conectar correctamente las llamadas. Se recomienda la API de aprovisionamiento de Azure Communications Gateway para proporcionar esta información a Azure Communications Gateway, pero también puede usar el Portal de administración de números. La mayoría de los servicios back-end también deben aprovisionarse con información sobre los números y cuentas que se van a usar. Este requisito suele significar que se necesitan varios proyectos de integración de TI para habilitar nuevos servicios. La plataforma de aprovisionamiento de Azure Communications Gateway se ha integrado previamente con algunos servicios back-end para aprovisionarlos, lo que reduce los requisitos de integración de TI. Puede usar esta función habilitando la sincronización del servicio back-end para los servicios pertinentes. Esto también significa que cualquier integración de TI en la plataforma de aprovisionamiento de Azure Communications Gateway es reutilizable para otros servicios back-end.

Por ejemplo, Operator Connect exige que todos los números se carguen a través de la API de Operator Connect. Si la sincronización del servicio back-end está habilitada para Operator Connect, cualquier número aprovisionado en Azure Communications Gateway y habilitado para Operator Connect se aprovisionará automáticamente en Operator Connect, lo que significa que no es necesario integrar con operator Connect API.

El aprovisionamiento a través de la plataforma de aprovisionamiento de Azure Communications Gateway es opcional para algunos servicios en los que Azure Communications Gateway puede obtener información directamente desde el back-end. Sin embargo, algunas características como la adición de encabezados SIP de cliente con fines de facturación no estarán disponibles. En el caso de los servicios que no admitan la sincronización del servicio back-end, es posible que se requiera otra integración de TI directamente en el servicio back-end. El estado de la compatibilidad con el aprovisionamiento se describe en la tabla siguiente:

Servicio back-end Requisito para aprovisionar a través de la plataforma de aprovisionamiento de ACG Se admite el aprovisionamiento del servicio back-end
Enrutamiento directo Mandatory
Zoom Mandatory
Protección de llamadas de operador de Azure Mandatory
Conexión con operador Opcionales
Teléfono Teams Mobile Opcionales

La sincronización con los servicios back-end es asincrónica, lo que significa que la solicitud de aprovisionamiento puede realizarse correctamente antes de que se haya aprovisionado el servicio back-end. Este estado se indica en la respuesta de la API mediante el serviceProvisioningStatus campo establecido pendingen . Se recomienda consultar el objeto para comprobar su estado de aprovisionamiento hasta que este campo esté establecido en success. Los errores de aprovisionamiento del sistema back-end están disponibles directamente en la respuesta.

Ejemplos

En los ejemplos siguientes se muestran solicitudes de ejemplo para administrar rfis, cuentas y números.

Create una cuenta que representa a un cliente

Use PUT en el accounts/<accountName> punto de conexión para crear una cuenta denominada contoso para el cliente Contoso y configurar uno o varios servicios de comunicaciones para la cuenta. Use un encabezado If-None-Match para comprobar que aún no existe un recurso de cuenta con este nombre.

En el ejemplo siguiente:

  • El enrutamiento directo está configurado.
  • La selección de identificadores de llamada está habilitada (el valor predeterminado).
  • El subdominio del cliente es contoso.
  • Los valores TXT de DNS proporcionados por el cliente necesarios para configurar los registros DNS se encuentran en los region1Token campos y region2Token .

Solicitud:

PUT /accounts/contoso?api-version=2024-02-29 HTTP/1.1
{
  "name": "contoso",
  "serviceDetails": {
    "teamsDirectRouting": {
      "syncEnabled": true,
      "enabled": true,
      "configuration": {
        "callScreening": true,
        "subdomain": "contoso",
        "subdomainTokens": {
          "region1Token": "region1TokenValue",
          "region2Token": "region2TokenValue"
        }
      }
    }
  }
}

Respuesta:

{
  "serviceProvisioningStatus": "synced",
  "serviceProvisioningErrors": null,
  "name": "contoso",
  "serviceDetails": {
    "teamsDirectRouting": {
      "syncEnabled": true,
      "enabled": true,
      "numberCount": 0,
      "configuration": {
        "callScreening": true,
        "subdomain": "contoso",
        "subdomainTokens": {
          "region1Token": "region1TokenValue",
          "region2Token": "region2TokenValue"
        }
      },
      "subdomainStatus": "provisioned"
    },
  }
}

En el ejemplo siguiente, se crea una cuenta para su uso solo con Teams Operator Connect, con la sincronización de back-end habilitada para que la información sobre esta cuenta (como cualquier número cargado) también se aprovisione en Teams:

Solicitud:

PUT /accounts/contoso?api-version=2024-02-29 HTTP/1.1
{
  "name": "contoso",
  "serviceDetails": {
    "teamsTenantId": "tenantIdString",
    "teamsOperatorConnect": {
      "syncEnabled": true,
      "enabled": true
    },
  }
}

Respuesta:

{
  "serviceProvisioningStatus": "pending",
  "serviceProvisioningErrors": null,
  "name": "contoso",
  "serviceDetails": {
    "teamsTenantId": "tenantIdString",
    "teamsOperatorConnect": {
      "syncEnabled": true,
      "enabled": true,
      "numberCount": 0
    }
  }
}

Ver los detalles de la cuenta

Use GET en el accounts/<accountName> punto de conexión para obtener los detalles de la cuenta. La respuesta incluye los siguientes campos:

  • Toda la configuración establecida anteriormente (o el valor predeterminado, si no se estableció un campo).
  • El suscriptor cuenta para cada uno de los servicios disponibles en ACG.
  • Estado del aprovisionamiento del servicio back-end, si está habilitado.
  • subdomainStatus, que representa el estado del aprovisionamiento de registros DNS, solo relevante para el enrutamiento directo.
  • Encabezado ETag que representa el estado actual de la cuenta. Puede usar el valor en un If-Match encabezado en las solicitudes de actualización posteriores para asegurarse de que no sobrescribe los cambios realizados por otros usuarios de la API.

Solicitud:

GET /accounts/contoso?api-version=2024-02-29 HTTP/1.1

Respuesta:

ETag: 12345
{
  "serviceProvisioningStatus": "synced",
  "serviceProvisioningErrors": null,
  "name": "contoso",
  "serviceDetails": {
    "teamsTenantId": "tenantIdString",
    "teamsOperatorConnect": {
      "syncEnabled": true,
      "enabled": true,
      "numberCount": 0
    },
  }
}

La solicitud equivalente si la cuenta tiene varios servicios configurados aparece de la siguiente manera:

Solicitud:

GET /accounts/contoso?api-version=2024-02-29 HTTP/1.1

Respuesta:

ETag: 12345
{
  "serviceProvisioningStatus": "synced",
  "serviceProvisioningErrors": null,
  "name": "contoso",
  "serviceDetails": {
    "teamsTenantId": "tenantIdString",
    "teamsOperatorConnect": {
      "syncEnabled": true,
      "enabled": true
    },
    "teamsDirectRouting": {
      "syncEnabled": true,
      "enabled": true,
      "numberCount": 0,
      "configuration": {
        "callScreening": true,
        "subdomain": "contoso",
        "subdomainTokens": {
          "region1Token": "region1",
          "region2Token": "region2"
        }
      },
      "subdomainStatus": "provisioned"
    },
  }
}

Actualización de la configuración de la cuenta

Use PUT en el accounts/<accountName> punto de conexión para actualizar la configuración de la cuenta. Para asegurarse de que la actualización no sobrescribe un cambio realizado por otro usuario, agregue un If-Match encabezado con la ETag de la respuesta más reciente de la cuenta.

Solicitud:

PUT /accounts/contoso?api-version=2024-02-29 HTTP/1.1
ETag: 12345
{
  "name": "contoso",
  "serviceDetails": {
    "teamsTenantId": "tenantIdString",
    "teamsOperatorConnect": {
      "syncEnabled": false,
      "enabled": true
    },
    "teamsDirectRouting": {
      "syncEnabled": true,
      "enabled": true,
      "numberCount": 0,
      "configuration": {
        "callScreening": true,
        "subdomain": "contoso",
        "subdomainTokens": {
          "region1Token": "region1",
          "region2Token": "region2"
        }
      },
      "subdomainStatus": "provisioned"
    },
  }
}

Respuesta:

ETag: 56789
{
  "serviceProvisioningStatus": "pending",
  "serviceProvisioningErrors": null,
  "name": "contoso",
  "serviceDetails": {
    "teamsTenantId": "tenantIdString",
    "teamsOperatorConnect": {
      "syncEnabled": false,
      "enabled": true
    },
    "teamsDirectRouting": {
      "syncEnabled": true,
      "enabled": true,
      "numberCount": 0,
      "configuration": {
        "callScreening": true,
        "subdomain": "contoso",
        "subdomainTokens": {
          "region1Token": "region1",
          "region2Token": "region2"
        }
      },
      "subdomainStatus": "provisioned"
    },
  }
}

Agregar un número a la cuenta

Use PUT en el account/<accountName>/numbers/<telephoneNumber> punto de conexión para agregar un número a la cuenta, habilitar uno o varios servicios de comunicaciones y agregar cualquier otra configuración. Los servicios de comunicaciones elegidos también deben configurarse en la cuenta. Use un encabezado If-None-Match para comprobar que aún no existe un recurso numérico con este número. Todos los números deben crearse en formato E.164.

En el ejemplo siguiente:

  • El número es +123451.
  • La conexión del operador está habilitada.
  • Se proporciona la configuración necesaria para cargar el número en Operator Connect.
  • customSipHeader especifica que Azure Communications Gateway debe agregar un encabezado con el valor exampleHeaderContents a los mensajes enviados a la red del operador. El nombre del encabezado se establece como parte de la implementación de Azure Communications Gateway.
  • El serviceProvisioningStatus campo de la respuesta muestra el estado de la sincronización con el servicio back-end.
PUT /accounts/contoso/numbers/+123451?api-version=2024-02-29 HTTP/1.1
{
  "telephoneNumber": "+123451",
  "accountName": "contoso",
  "serviceDetails": {
    "teamsOperatorConnect": {
      "enabled": true,
      "configuration": {
        "usage": "CallingUserAssignment",
        "choosableCapabilities": [
          "InboundCalling",
          "OutboundCalling"
        ],
        "civicAddressId": "civicAddressIdString",
        "allowTenantAddressUpdate": true,
      }
    },
  },
  "configuration": {
    "customSipHeader": "exampleHeaderContents"
  }
}

Respuesta:

{
  "serviceProvisioningStatus": "pending",
  "serviceProvisioningErrors": null,
  "telephoneNumber": "+123451",
  "accountName": "contoso",
  "serviceDetails": {
    "teamsOperatorConnect": {
      "enabled": true,
      "assignmentStatus": "assigned",
      "configuration": {
        "usage": "CallingUserAssignment",
        "choosableCapabilities": [
          "InboundCalling",
          "OutboundCalling"
        ],
        "civicAddressId": "civicAddressIdString",
        "allowTenantAddressUpdate": true,
      }
    },
  },
  "configuration": {
    "customSipHeader": "exampleHeaderContents"
  }
}

Comprobación del estado de aprovisionamiento después de algún tiempo

Use GET en account/<accountName>/numbers/<telephoneNumber> después de una acción de aprovisionamiento para comprobar el estado del número. Si el número se aprovisionó correctamente, el serviceProvisioningStatus campo se actualiza de pending a synced.

Solicitud:

GET /accounts/contoso/numbers/+123451?api-version=2024-02-29 HTTP/1.1

Respuesta:

{
  "serviceProvisioningStatus": "synced",
  "serviceProvisioningErrors": null,
  "telephoneNumber": "+123451",
  "accountName": "contoso",
  "serviceDetails": {
    "teamsOperatorConnect": {
      "enabled": true,
      "assignmentStatus": "assigned",
      "configuration": {
        "usage": "CallingUserAssignment",
        "choosableCapabilities": [
          "InboundCalling",
          "OutboundCalling"
        ],
        "civicAddressId": "civicAddressIdString",
        "allowTenantAddressUpdate": true,
      }
    },
  },
  "configuration": {
    "customSipHeader": "exampleHeaderContents"
  }
}

Error en el aprovisionamiento del servicio back-end para cargar un número

En este ejemplo, el aprovisionamiento de back-end al cargar el número alcanza un error, que se refleja de nuevo en la respuesta. Los mensajes de error se pasan de forma transparente desde los servicios back-end.

Nota

Inicialmente al aprovisionar un número tiene pending el estado , que debe consultarse de nuevo para confirmar el éxito o el error.

La solicitud original, que falta un valor para el usage campo:

PUT /accounts/contoso/numbers/+123451?api-version=2024-02-29 HTTP/1.1
{
  "telephoneNumber": "+123451",
  "accountName": "contoso",
  "serviceDetails": {
    "teamsOperatorConnect": {
      "enabled": true,
      "configuration": {
        "usage": "",
        "choosableCapabilities": [
          "InboundCalling",
          "OutboundCalling"
        ],
        "civicAddressId": "civicAddressIdString",
        "allowTenantAddressUpdate": true,
      }
    },
  },
  "configuration": {
    "customSipHeader": "exampleHeaderContents"
  }
}

Respuesta de la consulta GET después de algún tiempo:

{  
  "serviceProvisioningStatus": "failed",
  "serviceProvisioningErrors": [
    {
      "code": "InvalidRequest",
      "message": "Invalid/missing required configuration attributes: Usage",
      "target": "oc",
    }
  ],
  "telephoneNumber": "+123451",
  "accountName": "contoso",
  "serviceDetails": {
    "teamsOperatorConnect": {
      "enabled": true,
      "assignmentStatus": "assigned",
      "configuration": {
        "usage": "",
        "choosableCapabilities": [
          "InboundCalling",
          "OutboundCalling"
        ],
        "civicAddressId": "civicAddressIdString",
        "allowTenantAddressUpdate": true,
      }
    },
  },
  "configuration": {
    "customSipHeader": "exampleHeaderContents"
  }

Actualizar la configuración de un número

Use PUT en el punto de conexión para actualizar la account/<accountName>/numbers/<telephoneNumber> configuración de un número. Para asegurarse de que la actualización no sobrescribe un cambio realizado por otro usuario, agregue un encabezado If-Match con ETag de la respuesta más reciente para el número.

Solicitud:

PUT /accounts/contoso/numbers/+123451?api-version=2024-02-29 HTTP/1.1
ETag: 123
{
  "telephoneNumber": "+123451",
  "accountName": "contoso",
  "serviceDetails": {
    "teamsOperatorConnect": {
      "enabled": true,
      "configuration": {
        "usage": "CallingUserAssignment",
        "choosableCapabilities": [
          "InboundCalling",
          "OutboundCalling",
          "Mobile"
        ],
        "civicAddressId": "civicAddressIdString",
        "allowTenantAddressUpdate": true,
      }
    },
  },
  "configuration": {
    "customSipHeader": "exampleHeaderContents"
  }
}

Respuesta:

{
  "serviceProvisioningStatus": "pending",
  "serviceProvisioningErrors": null,
  "telephoneNumber": "+123451",
  "accountName": "contoso",
  "serviceDetails": {
    "teamsOperatorConnect": {
      "enabled": true,
      "assignmentStatus": "assigned",
      "configuration": {
        "usage": "CallingUserAssignment",
        "choosableCapabilities": [
          "InboundCalling",
          "OutboundCalling",
          "Mobile"
        ],
        "civicAddressId": "civicAddressIdString",
        "allowTenantAddressUpdate": true,
      }
    },
  },
  "configuration": {
    "customSipHeader": "exampleHeaderContents"
  }
}

Enumerar las solicitudes de información

Use una get en el /teamsRequestsForInformation punto de conexión para obtener una lista de los consentimientos de Teams que los clientes potenciales le han enviado.

Solicitud:

GET /teamsRequestsForInformation?api-version=2024-02-29 HTTP/1.1

Respuesta:

{
  "value": [
    {
      "serviceProvisioningStatus": "synced",
      "serviceProvisioningErrors": null,
      "id": "contoso",
      "tenantId": "contosoTenantId",
      "accountName": "contoso",
      "productContext": "teams",
      "operatorId": "string",
      "status": "active",
      "consentedOn": "2024-05-07T11:15:10.519Z",
      "lastModifiedOn": "2024-05-07T11:15:10.519Z",
      "consentedCountries": [
        "string"
      ],
      "contacts": [
        {
          "fullName": "Example Name",
          "email": "example@contoso.com",
          "telephoneNumber": "+1234567890",
          "companyName": "contoso",
          "companySize": "size"
        }
      ],
      "customerRelationship": {
        "status": "example status",
        "lastModifiedOn": "2024-05-07T11:15:10.520Z",
        "comment": "example comment"
      }
    },
    {
      "serviceProvisioningStatus": "synced",
      "serviceProvisioningErrors": null,
      "id": "contoso2",
      "tenantId": "contosoTenantId2",
      "accountName": "contoso2",
      "productContext": "teams",
      "operatorId": "string",
      "status": "active",
      "consentedOn": "2024-05-07T11:15:10.519Z",
      "lastModifiedOn": "2024-05-07T11:15:10.519Z",
      "consentedCountries": [
        "string"
      ],
      "contacts": [
        {
          "fullName": "Example Name2",
          "email": "example@contoso2.com",
          "telephoneNumber": "+1234567891",
          "companyName": "contoso2",
          "companySize": "size"
        }
      ],
      "customerRelationship": {
        "status": "example status",
        "lastModifiedOn": "2024-05-07T11:15:10.520Z",
        "comment": "example comment"
      }
    },
    ... // more RFIs
  ],
  "nextLink": "string"
}

Actualizar una solicitud de información

Use PATCH en el /teamsRequestsForInformation/<tenantID> punto de conexión para actualizar el estado de RFI, que se refleja en el servicio back-end. Operator Connect y Teléfono Teams Mobile le permite indicar el estado de la solicitud de vuelta al cliente final para que el estado actualizado aparezca en el Centro de teams del cliente Administración.

Solicitud

PATCH /teamsRequestsForInformation/contosoTenantId
{
  "customerRelationship": {
    "status": "new status",
    "comment": "new comment"
  }
}

Response

{
    {
      "serviceProvisioningStatus": "pending",
      "serviceProvisioningErrors": null,
      "id": "contoso",
      "tenantId": "contosoTenantId",
      "accountName": "contoso",
      "productContext": "teams",
      "operatorId": "string",
      "status": "active",
      "consentedOn": "2024-05-07T11:15:10.519Z",
      "lastModifiedOn": "2024-05-07T11:15:10.519Z",
      "consentedCountries": [
        "string"
      ],
      "contacts": [
        {
          "fullName": "Example Name",
          "email": "example@contoso.com",
          "telephoneNumber": "+1234567890",
          "companyName": "contoso",
          "companySize": "size"
        }
      ],
      "customerRelationship": {
        "status": "new status",
        "lastModifiedOn": "2024-05-07T12:15:10.520Z",
        "comment": "new comment"
      }
    }
}

Enumerar todos los números asignados a una cuenta

Use una solicitud GET en el /accounts/<accountName>/numbers punto de conexión para obtener una lista de los números que se han aprovisionado para esa cuenta.

Solicitud:

GET /accounts/contoso/numbers?api-version=2024-02-29 HTTP/1.1

Respuesta de una cuenta con solo números de Conexión del operador:

{
  "value": [
    {
      "serviceProvisioningStatus": "pending",
      "serviceProvisioningErrors": null,
      "telephoneNumber": "+123451",
      "accountName": "contoso",
      "serviceDetails": {
        "teamsOperatorConnect": {
          "enabled": true,
          "assignmentStatus": "assigned",
          "configuration": {
            "usage": "CallingUserAssignment",
            "choosableCapabilities": [
              "InboundCalling",
              "OutboundCalling",
              "Mobile"
            ],
            "civicAddressId": "civicAddressIdString",
            "allowTenantAddressUpdate": true,
          }
        },
      },
      "configuration": {
        "customSipHeader": "exampleHeaderContents"
      }
    },
    ... // more OC numbers
  ],
  nextLink: "string"
}

Respuesta para una cuenta con números de conexión de operador y enrutamiento directo aprovisionados:

{
  "value": [
    {
      "serviceProvisioningStatus": "synced",
      "serviceProvisioningErrors": null,
      "telephoneNumber": "+123451",
      "accountName": "contoso",
      "serviceDetails": {
        "teamsOperatorConnect": {
          "enabled": true,
          "assignmentStatus": "assigned",
          "configuration": {
            "usage": "CallingUserAssignment",
            "choosableCapabilities": [
              "InboundCalling",
              "OutboundCalling",
              "Mobile"
            ],
            "civicAddressId": "civicAddressIdString",
            "allowTenantAddressUpdate": true,
          }
        },
      },
      "configuration": {
        "customSipHeader": "exampleHeaderContents"
      }
    },
    {
      "serviceProvisioningStatus": "synced",
      "serviceProvisioningErrors": null,
      "telephoneNumber": "+123452",
      "accountName": "contoso",
      "serviceDetails": {
        "teamsDirectRouting": {
          "enabled": true
        }
      },
      "configuration": {
        "customSipHeader": "exampleHeaderContents"
      }
    },
    ... // more DR and OC numbers
  ],
  nextLink: "string"
}

Enumerar todas las ubicaciones de emergencia de una cuenta específica

Use una solicitud GET en el /accounts/<accountName>/teamsCivicAddresses punto de conexión para obtener la lista completa de direcciones civic configuradas en el Centro de Administración de Teams para esa cuenta. Puede usar el rellenado de esta lista como al locationid crear o actualizar números dentro de la cuenta.

Solicitud:

GET /accounts/contoso/teamsCivicAddresses?api-version=2024-02-29 HTTP/1.1

Respuesta:

{
  "value": [
    {
      "id": "string",
      "country": "string",
      "houseNumber": "string",
      "houseNumberSuffix": "string",
      "preDirectional": "string",
      "streetName": "string",
      "streetSuffix": "string",
      "postDirectional": "string",
      "stateOrProvince": "string",
      "countyOrDistrict": "string",
      "cityOrTown": "string",
      "cityOrTownAlias": "string",
      "postalOrZipCode": "string",
      "description": "string",
      "companyName": "string",
      "companyId": "string",
      "defaultLocationId": "string",
      "validationStatus": "notValidated",
      "tenantId": "string",
      "partnerId": "string",
      "locations": [
        {
          "id": "string",
          "civicAddressId": "string",
          "description": "string",
          "additionalInfo": "string",
          "isDefault": true,
          "elin": "string"
        }
      ],
      "latitude": "string",
      "longitude": "string"
    },
    ... // more locations
  ],
  "nextLink": "string"
}

Quitar un número de la cuenta

Use DELETE en el /accounts/<accountName>/numbers/<telephoneNumber> punto de conexión para liberar un número de un inquilino. Esta operación anulará la asignación de un número de un usuario si está asignado y, a continuación, liberará el número del inquilino.

Solicitud:

DELETE /accounts/contoso/numbers/+123451?api-version=2024-02-29 HTTP/1.1

Respuesta:

204 Status Code

Solución de problemas

  • El enrutamiento directo de Teams no funciona para números en una cuenta.

    • Compruebe que el token DNS se ha validado enviando una get en la cuenta, comprobando que serviceDetails.teamsDirectRouting tiene subdomainStatus el mismo valor que Provisioned.
  • He configurado un número para usar enrutamiento directo/zoom, pero no parece estar funcionando.

    • Compruebe que la cuenta se ha configurado para usar El enrutamiento directo/Zoom y que el número tiene habilitada esta característica específica.
  • He logrado ponerse en contacto con la API, pero después de realizar varias solicitudes, las conexiones comienzan a agotar el tiempo de espera.

    • La API de aprovisionamiento está limitada a velocidad (a una tarifa razonable por segundo). Espaciar las solicitudes o usar el punto de conexión por lotes para evitar que la velocidad sea limitada. El límite de velocidad agota el tiempo de espera, y podrá conectarse.

Pasos siguientes

Comience a integrar con la API de aprovisionamiento de Azure Communications Gateway.