API de Provisionamento de Gateway de Comunicações do Azure
A API de Provisionamento do Gateway de Comunicações do Azure para operadores de telecomunicações permite provisionar os detalhes de seus clientes e os números atribuídos a eles no ACG (Gateway de Comunicação do Azure). A API de Provisionamento também dá suporte ao provisionamento de fluxo de alguns serviços de comunicação de back-end.
O provisionamento de clientes e números é obrigatório (com a API de Provisionamento ou o Portal de Gerenciamento de Números baseado em navegador) para todos os casos de uso, exceto para a Operator Connect e Telefonia do Teams Mobile. Para o Operator Connect e o Telefonia do Teams Mobile, o uso da API de Provisionamento e/ou do Portal de Gerenciamento de Números é opcional e você pode se integrar diretamente à API do Operator Connect.
Introdução
Pré-requisitos
- Um locatário com o aplicativo Gateway de Comunicações do Azure implantado.
- O FQDN (nome de domínio totalmente qualificado) para o Gateway de Comunicações do Azure que é exibido na página Visão geral do recurso no portal do Azure. A API está disponível na porta 443 do
provapi.<base-domain>
. - Um computador com um endereço IP que permite o acesso à API, conforme configurado em uma lista de permitidos como parte da implantação do Gateway de Comunicações do Azure.
Autenticação e autorização
A API de Provisionamento usa o OAuth 2.0 para controlar o acesso aos recursos. O aplicativo cliente deve obter um token de portador de autenticação válido para acessar a API de Provisionamento. O token de portador indica que o aplicativo está autorizado para um ou mais dos escopos (funções) para a API de Provisionamento. É recomendável usar o fluxo de credenciais do cliente (projetado para um processo do lado do servidor).
Os seguintes escopos estão disponíveis para a API de Provisionamento:
-
ProvisioningAPI.Admin
: capacidade de invocar qualquer operação na API. -
ProvisioningAPI.Read
: capacidade de invocar qualquer operação de leitura (GET) na API. -
ProvisioningAPI.Write
: capacidade de invocar qualquer operação de gravação (PUT, PATCH) na API. -
ProvisioningAPI.Delete
: capacidade de invocar qualquer operação delete (DELETE) na API.
Para configurar um fluxo de credenciais do cliente:
- Verifique se o aplicativo pode dar suporte ao fluxo de credenciais do cliente.
Quando o aplicativo solicita um token para a API de Provisionamento, ele deve usar os campos a seguir.
Parâmetro Condição Descrição locatário obrigatório O locatário do diretório que contém o Gateway de Comunicações do Azure, no formato guid ou nome de domínio. scope obrigatório O escopo da autorização em relação à ID do recurso do Gateway de Comunicações do Azure. Para o fluxo de credenciais do cliente descrito aqui, o escopo deve ser https://func-voiceservice-rp-prod-eastuseuap.azurewebsites.net/.default
.client_id obrigatório A ID do aplicativo (cliente) atribuída ao seu aplicativo. A
roles
declaração no token recebido especifica as funções (escopos) que o aplicativo cliente está autorizado a acessar.As solicitações para a Plataforma de Provisionamento de Gateway de Comunicações do Azure devem ter um
Authorization
cabeçalho com esse token de portador.Consulte a documentação de fluxo de credenciais do cliente para obter exemplos de como usar tokens.
- Use o portal do Azure para registrar o aplicativo no mesmo locatário que a implantação do Gateway de Comunicações do Azure. Confira Início Rápido: Registrar um aplicativo no plataforma de identidade da Microsoft – Microsoft Entra | Microsoft Learn.
- Atribua a si mesmo como proprietário para o registro do aplicativo. Confira Atribuir proprietário do aplicativo.
- Configure o registro de aplicativo criado registrando o aplicativo com funções de aplicativo que usam os escopos para a API de Provisionamento, conforme descrito anteriormente.
- Confira Atribuir funções de aplicativo a aplicativos.
- A API para a qual você precisa atribuir permissões é
AzureCommunicationsGateway
, listada em APIs que minha organização usa.
- Como administrador do locatário, permita que o aplicativo use as funções de aplicativo que você atribuiu. Confira Conceder consentimento do administrador.
A API de Provisionamento usa cadeias de confiança padrão da Microsoft para certificados de segurança.
Principais conceitos
A Plataforma de Provisionamento tem três recursos principais que o operador pode gerenciar: contas, números e solicitações de informações.
- Os recursos da conta são descrições de clientes operadores (normalmente, uma empresa) e configurações por cliente para provisionamento de serviços.
- Os recursos numéricos pertencem a uma conta. Eles descrevem números, os serviços (por exemplo, o Roteamento Direto do Microsoft Teams) dos quais os números fazem uso e qualquer configuração extra por número.
- Os recursos RFI (Solicitação de Informações) são descrições de clientes potenciais para operadores que estão expressando interesse em receber serviços do operador por meio de serviços de back-end específicos. Atualmente, apenas as RFIs produzidas a partir da Operator Connect e Telefonia do Teams Mobile estão disponíveis.
Por exemplo, para fornecer o serviço de Roteamento Direto do Microsoft Teams a um cliente, a Contoso, crie um recurso de conta com a API de Provisionamento para Contoso. A conta contém a configuração de Roteamento Direto (por exemplo, um subdomínio e tokens correspondentes, necessários para configurar registros DNS que o Microsoft Teams pode usar para validar a configuração do cliente). Em seguida, você deve adicionar recursos numéricos à conta e habilitar cada número para Roteamento Direto.
Dica
Você deve habilitar o serviço na conta e nos números dentro da conta.
Provisionando serviços de back-end com sincronização de serviço de back-end
O Gateway de Comunicações do Azure deve ter informações sobre os números aos quais está fornecendo serviço para conectar chamadas corretamente. Recomendamos a API de Provisionamento de Gateway de Comunicações do Azure para fornecer essas informações ao Gateway de Comunicações do Azure, mas você também pode usar o Portal de Gerenciamento de Números. A maioria dos serviços de back-end também precisa ser provisionada com informações sobre os números e contas a serem usados. Esse requisito geralmente significa que vários projetos de integração de TI são necessários para habilitar novos serviços. A plataforma de Provisionamento de Gateway de Comunicações do Azure foi pré-integrada a alguns serviços de back-end para provisioná-los para você, reduzindo seus requisitos de integração de TI. Você pode usar essa função habilitando a sincronização de serviço de back-end para os serviços relevantes. Isso também significa que qualquer integração de TI à plataforma de provisionamento do Gateway de Comunicação do Azure é reutilizável para outros serviços de back-end.
Por exemplo, a Conexão do Operador exige que todos os números sejam carregados por meio da API de Conexão do Operador. Se a sincronização do serviço de back-end estiver habilitada para o Operator Connect, qualquer número provisionado no Gateway de Comunicações do Azure e habilitado para o Operator Connect será provisionado automaticamente no Operator Connect, o que significa que você não precisa se integrar à API operator connect.
O provisionamento por meio da plataforma de provisionamento do Gateway de Comunicações do Azure é opcional para alguns serviços em que o Gateway de Comunicações do Azure pode obter informações diretamente do back-end. No entanto, alguns recursos, como a adição de cabeçalhos SIP do cliente para fins de cobrança, não estarão disponíveis. Para quaisquer serviços que não dão suporte à sincronização de serviço de back-end, outra integração de TI pode ser necessária diretamente para o serviço de back-end. A status de suporte ao provisionamento é descrita na tabela a seguir:
Serviço de back-end | Requisito para provisionar por meio da Plataforma de Provisionamento ACG | Provisionamento do serviço de back-end com suporte |
---|---|---|
Roteamento direto | Obrigatório | ❌ |
Zoom | Obrigatório | ❌ |
Proteção de Chamadas do Operador do Azure | Obrigatório | ❌ |
Conexão do operador | Opcional | ✅ |
Telefonia do Teams Mobile | Opcional | ✅ |
A sincronização com os serviços de back-end é assíncrona, o que significa que sua solicitação de provisionamento pode ter êxito antes que o serviço de back-end seja provisionado. Essa status é assinada na resposta da API usando o serviceProvisioningStatus
campo definido pending
como . Recomendamos que você consulte o objeto para marcar seu status de provisionamento até que esse campo seja definido success
como . Todos os erros de provisionamento do sistema de back-end são disponibilizados diretamente na resposta.
Exemplos
Os exemplos a seguir mostram solicitações de exemplo para gerenciar RFIs, contas e números.
Create uma conta que representa um cliente
Use PUT no accounts/<accountName>
ponto de extremidade para criar uma conta chamada contoso
para o cliente Contoso e configurar um ou mais serviços de comunicação para a conta. Use um cabeçalho If-None-Match para verificar se um recurso de conta com esse nome ainda não existe.
No exemplo a seguir:
- O Roteamento Direto está configurado.
- A triagem de ID do chamador está habilitada (o padrão).
- O subdomínio do cliente é
contoso
. - Os valores DNS TXT fornecidos pelo cliente necessários para configurar registros DNS estão nos
region1Token
campos eregion2Token
.
Solicitação:
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"
}
}
}
}
}
Resposta:
{
"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"
},
}
}
No exemplo a seguir, criamos uma conta para uso somente com o Operador do Teams Connect, com a sincronização de back-end habilitada para que as informações sobre essa conta (como todos os números carregados) também sejam provisionadas no Teams:
Solicitação:
PUT /accounts/contoso?api-version=2024-02-29 HTTP/1.1
{
"name": "contoso",
"serviceDetails": {
"teamsTenantId": "tenantIdString",
"teamsOperatorConnect": {
"syncEnabled": true,
"enabled": true
},
}
}
Resposta:
{
"serviceProvisioningStatus": "pending",
"serviceProvisioningErrors": null,
"name": "contoso",
"serviceDetails": {
"teamsTenantId": "tenantIdString",
"teamsOperatorConnect": {
"syncEnabled": true,
"enabled": true,
"numberCount": 0
}
}
}
Exibir os detalhes da conta
Use GET no accounts/<accountName>
ponto de extremidade para obter os detalhes da conta. A resposta inclui os seguintes campos:
- Todas as configurações definidas anteriormente (ou o padrão, se um campo não tiver sido definido).
- Contagens de assinantes para cada um dos serviços disponíveis no ACG.
- O status do provisionamento de serviço de back-end, se habilitado.
-
subdomainStatus
, que representa o estado do provisionamento de registros DNS, relevante apenas para Roteamento Direto. - Um
ETag
cabeçalho que representa o estado atual da conta. Você pode usar o valor em umIf-Match
cabeçalho em solicitações de atualização subsequentes para garantir que você não substitua as alterações feitas por outros usuários da API.
Solicitação:
GET /accounts/contoso?api-version=2024-02-29 HTTP/1.1
Resposta:
ETag: 12345
{
"serviceProvisioningStatus": "synced",
"serviceProvisioningErrors": null,
"name": "contoso",
"serviceDetails": {
"teamsTenantId": "tenantIdString",
"teamsOperatorConnect": {
"syncEnabled": true,
"enabled": true,
"numberCount": 0
},
}
}
A solicitação equivalente se a conta tiver vários serviços configurados será exibida da seguinte maneira:
Solicitação:
GET /accounts/contoso?api-version=2024-02-29 HTTP/1.1
Resposta:
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"
},
}
}
Atualizar a configuração da conta
Use PUT no accounts/<accountName>
ponto de extremidade para atualizar a configuração da conta. Para garantir que a atualização não substitua uma alteração feita por outro usuário, adicione um If-Match
cabeçalho com a ETag da resposta mais recente para a conta.
Solicitação:
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"
},
}
}
Resposta:
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"
},
}
}
Adicionar um número à conta
Use PUT no account/<accountName>/numbers/<telephoneNumber>
ponto de extremidade para adicionar um número à conta, habilitar um ou mais serviços de comunicação e adicionar qualquer outra configuração. Os serviços de comunicação escolhidos também devem ser configurados na conta. Use um cabeçalho If-None-Match para verificar se um recurso numérico com esse número ainda não existe. Todos os números devem ser criados no formato E.164.
No exemplo a seguir:
- O número é +123451.
- A conexão do operador está habilitada.
- A configuração necessária para carregar o número no Operator Connect é fornecida
-
customSipHeader
especifica que o Gateway de Comunicações do Azure deve adicionar um cabeçalho com o valorexampleHeaderContents
às mensagens enviadas à rede do operador. O nome do cabeçalho é definido como parte da implantação do Gateway de Comunicações do Azure. - O
serviceProvisioningStatus
campo na resposta mostra o status da sincronização com o serviço de 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"
}
}
Resposta:
{
"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"
}
}
Verificando status de provisionamento após algum tempo
Use GET no account/<accountName>/numbers/<telephoneNumber>
após uma ação de provisionamento para marcar o status do número. Se o número tiver sido provisionado com êxito, o serviceProvisioningStatus
campo será atualizado de pending
para synced
.
Solicitação:
GET /accounts/contoso/numbers/+123451?api-version=2024-02-29 HTTP/1.1
Resposta:
{
"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"
}
}
Erro no provisionamento de serviço de back-end para carregar um número
Neste exemplo, o provisionamento de back-end ao carregar o número atinge um erro, que é refletido novamente na resposta. As mensagens de erro são passadas de forma transparente dos serviços de back-end.
Observação
Inicialmente, ao provisionar um número, ele tem pending
status, que precisa ser consultado novamente para confirmar o êxito/falha.
A solicitação original, que não tem um valor para o 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"
}
}
Resposta da consulta GET após algum tempo:
{
"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"
}
Atualizar a configuração de um número
Use PUT no account/<accountName>/numbers/<telephoneNumber>
ponto de extremidade para atualizar a configuração de um número. Para garantir que a atualização não substitua uma alteração feita por outro usuário, adicione um cabeçalho If-Match com a ETag da resposta mais recente para o número.
Solicitação:
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"
}
}
Resposta:
{
"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"
}
}
Listar as solicitações de informações
Use um GET no /teamsRequestsForInformation
ponto de extremidade para obter uma lista dos consentimentos do Teams que foram enviados a você por clientes potenciais.
Solicitação:
GET /teamsRequestsForInformation?api-version=2024-02-29 HTTP/1.1
Resposta:
{
"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"
}
Atualizar uma solicitação de informações
Use PATCH no /teamsRequestsForInformation/<tenantID>
ponto de extremidade para atualizar o status do RFI, que é refletido no serviço de back-end. A operadora Connect e o Telefonia do Teams Mobile permitem que você indique o status da solicitação de volta ao cliente final para que a status atualizada apareça no Centro de Administração do Teams do cliente.
Solicitação
PATCH /teamsRequestsForInformation/contosoTenantId
{
"customerRelationship": {
"status": "new status",
"comment": "new comment"
}
}
Resposta
{
{
"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"
}
}
}
Listar todos os números atribuídos a uma conta
Use uma solicitação GET no /accounts/<accountName>/numbers
ponto de extremidade para obter uma lista dos números que foram provisionados para essa conta.
Solicitação:
GET /accounts/contoso/numbers?api-version=2024-02-29 HTTP/1.1
Resposta para uma conta com apenas números do Operator Connect:
{
"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"
}
Resposta para uma conta com números de Conexão de Operador e Roteamento Direto provisionados:
{
"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"
}
Listar todos os locais de emergência para uma conta específica
Use uma solicitação GET no /accounts/<accountName>/teamsCivicAddresses
ponto de extremidade para obter a lista completa de Endereços Cívicos configurados no Centro de Administração do Teams para essa conta. Você pode usar a população dessa lista como o locationid
ao criar ou atualizar números dentro da conta.
Solicitação:
GET /accounts/contoso/teamsCivicAddresses?api-version=2024-02-29 HTTP/1.1
Resposta:
{
"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"
}
Remover um número da conta
Use DELETE no /accounts/<accountName>/numbers/<telephoneNumber>
ponto de extremidade para liberar um número de um locatário. Essa operação cancelará a atribuição de um número de um usuário se for atribuída e, em seguida, liberará o número do locatário.
Solicitação:
DELETE /accounts/contoso/numbers/+123451?api-version=2024-02-29 HTTP/1.1
Resposta:
204 Status Code
Solução de problemas
O Roteamento Direto do Teams não está funcionando para números em uma conta.
- Verifique se o token DNS foi validado enviando um GET na conta, verificando se
serviceDetails.teamsDirectRouting
temsubdomainStatus
igual aProvisioned
.
- Verifique se o token DNS foi validado enviando um GET na conta, verificando se
Configurei um número para usar o Roteamento Direto/Zoom, mas ele não parece estar funcionando.
- Verifique se a conta foi configurada para usar o Roteamento Direto/Zoom e se o número tem esse recurso específico habilitado.
Consegui entrar em contato com a API, mas depois de fazer várias solicitações, minhas conexões começam a atingir o tempo limite.
- A API de provisionamento é limitada por taxa (a uma taxa razoável por segundo). Espaçar suas solicitações ou usar o ponto de extremidade em lote para evitar que a taxa seja limitada. O limite de taxa atinge o tempo limite eventualmente e você poderá se conectar.
Próximas etapas
Comece a integrar com a API de Provisionamento do Gateway de Comunicações do Azure.