Partager via


API d’approvisionnement Azure Communications Gateway

L’API d’approvisionnement d’Azure Communications Gateway pour les opérateurs de télécommunications vous permet de provisionner les détails de vos clients et les numéros qui leur sont attribués dans Azure Communications Gateway (ACG). L’API approvisionnement prend également en charge l’approvisionnement de certains services de communication back-end.

L’approvisionnement des clients et des numéros est obligatoire (avec l’API d’approvisionnement ou le portail de gestion des numéros basé sur un navigateur) pour tous les cas d’usage, à l’exception de Operator Connect et Téléphonie Teams Mobile. Pour Operator Connect et Téléphonie Teams Mobile, l’utilisation de l’API d’approvisionnement et/ou du portail de gestion des nombres est facultative et vous pouvez l’intégrer directement à l’API Operator Connect à la place.

Prise en main

Prérequis

  • Un locataire avec l’application Azure Communications Gateway déployée.
  • Nom de domaine complet (FQDN) de votre passerelle de communications Azure qui s’affiche sur la page Vue d’ensemble de la ressource dans le Portail Azure. L’API est disponible sur le port 443 de provapi.<base-domain>.
  • Machine avec une adresse IP qui autorise l’accès à l’API, telle que configurée dans une liste verte dans le cadre du déploiement d’Azure Communications Gateway.

Authentification et autorisation

L’API approvisionnement utilise OAuth 2.0 pour contrôler l’accès aux ressources. L’application cliente doit obtenir un jeton du porteur d’authentification valide pour accéder à l’API d’approvisionnement. Le jeton du porteur indique que l’application est autorisée pour une ou plusieurs étendues (rôles) pour l’API approvisionnement. Nous vous recommandons d’utiliser le flux d’informations d’identification du client (conçu pour un processus côté serveur).

Les étendues suivantes sont disponibles pour l’API Provisionnement :

  • ProvisioningAPI.Admin: possibilité d’appeler n’importe quelle opération dans l’API.
  • ProvisioningAPI.Read: possibilité d’appeler n’importe quelle opération de lecture (GET) sur l’API.
  • ProvisioningAPI.Write: possibilité d’appeler n’importe quelle opération d’écriture (PUT, PATCH) sur l’API.
  • ProvisioningAPI.Delete: possibilité d’appeler toute opération de suppression (DELETE) sur l’API.

Pour configurer un flux d’informations d’identification client :

  1. Vérifiez que votre application peut prendre en charge le flux d’informations d’identification du client.
    • Lorsque votre application demande un jeton pour l’API approvisionnement, elle doit utiliser les champs suivants.

      Paramètre Condition Description
      tenant Obligatoire Locataire d’annuaire contenant la passerelle de communication Azure, sous forme de guid ou de nom de domaine.
      scope Obligatoire Étendue de l’autorisation par rapport à l’ID de ressource Azure Communications Gateway. Pour le flux d’informations d’identification du client décrit ici, l’étendue doit être https://func-voiceservice-rp-prod-eastuseuap.azurewebsites.net/.default.
      client_id obligatoire ID d’application (client) attribué à votre application.
    • La roles revendication dans le jeton reçu spécifie les rôles (étendues) auxquels l’application cliente est autorisée à accéder.

    • Les demandes adressées à la plateforme d’approvisionnement Azure Communications Gateway doivent avoir un Authorization en-tête avec ce jeton de porteur.

    • Consultez la documentation relative au flux d’informations d’identification du client pour obtenir des exemples d’utilisation de jetons.

  2. Utilisez le Portail Azure pour inscrire l’application dans le même locataire que votre déploiement Azure Communications Gateway. Consultez Démarrage rapide : Inscrire une application dans le Plateforme d'identités Microsoft - Microsoft Entra | Microsoft Learn.
  3. Attribuez-vous en tant que propriétaire pour l’inscription de l’application. Consultez Affecter un propriétaire d’application.
  4. Configurez l’inscription d’application créée en inscrivant l’application avec des rôles d’application qui utilisent les étendues de l’API approvisionnement, comme décrit précédemment.
  5. En tant qu’administrateur du locataire, autorisez l’application à utiliser les rôles d’application que vous avez attribués. Consultez Accorder le consentement de l’administrateur.

L’API Provisionnement utilise des chaînes d’approbation Microsoft standard pour les certificats de sécurité.

Concepts clés

La plateforme d’approvisionnement dispose de trois ressources clés que l’opérateur peut gérer : les comptes, les numéros et les demandes d’informations.

  • Les ressources de compte sont des descriptions des clients d’opérateur (généralement, une entreprise) et des paramètres par client pour l’approvisionnement des services.
  • Les ressources de nombre appartiennent à un compte. Ils décrivent les nombres, les services (par exemple, le routage direct Microsoft Teams) que les numéros utilisent et toute configuration supplémentaire par numéro.
  • Les ressources RFI (Request for Information) sont des descriptions de clients potentiels pour les opérateurs qui expriment leur intérêt à recevoir le service de l’opérateur par le biais de services principaux spécifiques. Actuellement, seules les RFI produites à partir de Operator Connect et les consentements Téléphonie Teams Mobile sont disponibles.

Par exemple, pour fournir le service de routage direct Microsoft Teams à un client, Contoso, créez une ressource de compte avec l’API approvisionnement pour Contoso. Le compte contient la configuration du routage direct (par exemple, un sous-domaine et les jetons correspondants, nécessaires pour configurer les enregistrements DNS que Microsoft Teams peut utiliser pour valider la configuration du client). Vous devez ensuite ajouter des ressources de nombre au compte et activer chaque nombre pour le routage direct.

Conseil

Vous devez activer le service sur le compte et les numéros dans le compte.

Approvisionnement des services principaux avec la synchronisation de service back-end

Azure Communications Gateway doit disposer d’informations sur les numéros à qui elle fournit le service afin de connecter correctement les appels. Nous vous recommandons d’utiliser l’API d’approvisionnement Azure Communications Gateway pour fournir ces informations à Azure Communications Gateway, mais vous pouvez également utiliser le portail de gestion des nombres. La plupart des services principaux doivent également être provisionnés avec des informations sur les nombres et les comptes à utiliser. Cette exigence signifie souvent que plusieurs projets d’intégration informatique sont nécessaires pour activer de nouveaux services. La plateforme d’approvisionnement d’Azure Communications Gateway a été préinsérée avec certains services principaux pour les approvisionner pour vous, ce qui réduit vos besoins d’intégration informatique. Vous pouvez utiliser cette fonction en activant la synchronisation du service back-end pour les services appropriés. Cela signifie également que toute intégration informatique à la plateforme d’approvisionnement Azure Communications Gateway est réutilisable pour d’autres services principaux.

Par exemple, Operator Connect exige que tous les numéros soient chargés via l’API Operator Connect. Si la synchronisation du service back-end est activée pour Operator Connect, tout nombre provisionné sur Azure Communications Gateway et activé pour Operator Connect est automatiquement provisionné dans Operator Connect, ce qui signifie que vous n’avez pas besoin de l’intégrer à l’API Operator Connect.

L’approvisionnement via la plateforme d’approvisionnement Azure Communications Gateway est facultatif pour certains services où Azure Communications Gateway peut obtenir des informations directement à partir du back-end. Toutefois, certaines fonctionnalités telles que l’ajout d’en-têtes SIP client à des fins de facturation ne seront pas disponibles. Pour tous les services qui ne prennent pas en charge la synchronisation du service back-end, une autre intégration informatique peut être requise directement au service principal. Le status de prise en charge de l’approvisionnement est décrit dans le tableau suivant :

Service back-end Configuration requise pour l’approvisionnement via ACG Provisioning Platform Provisionnement du service back-end pris en charge
Routage direct Obligatoire
Zoom Obligatoire
Azure Operator Call Protection Obligatoire
Operator Connect Facultatif
Téléphonie Teams Mobile Facultatif

La synchronisation avec les services principaux est asynchrone, ce qui signifie que votre demande d’approvisionnement peut réussir avant que le service principal ait été provisionné. Cette status est indiquée dans la réponse de l’API à l’aide du serviceProvisioningStatus champ défini sur pending. Nous vous recommandons d’interroger l’objet pour case activée son status d’approvisionnement jusqu’à ce que ce champ soit défini sur success. Toutes les erreurs liées à l’approvisionnement du système back-end sont mises directement à disposition dans la réponse.

Exemples

Les exemples suivants illustrent des exemples de demandes pour la gestion des RFI, des comptes et des nombres.

Create un compte représentant un client

Utilisez PUT sur le point de accounts/<accountName> terminaison pour créer un compte nommé contoso pour le client Contoso et configurer un ou plusieurs services de communication pour le compte. Utilisez un en-tête If-None-Match pour vérifier qu’une ressource de compte portant ce nom n’existe pas déjà.

Dans l’exemple suivant :

  • Le routage direct est configuré.
  • Le filtrage de l’ID de l’appelant est activé (valeur par défaut).
  • Le sous-domaine du client est contoso.
  • Les valeurs TXT DNS fournies par le client nécessaires à la configuration des enregistrements DNS se trouvent dans les region1Token champs et region2Token .

Demande :

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

Réponse :

{
  "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"
    },
  }
}

Dans l’exemple suivant, nous créons un compte à utiliser uniquement avec Teams Operator Connect, avec la synchronisation back-end activée afin que les informations sur ce compte (telles que les numéros chargés) soient également approvisionnées dans Teams :

Demande :

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

Réponse :

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

Afficher les détails du compte

Utilisez GET sur le accounts/<accountName> point de terminaison pour obtenir les détails du compte. La réponse inclut les champs suivants :

  • Toute la configuration précédemment définie (ou la valeur par défaut, si aucun champ n’a été défini).
  • Nombre d’abonnés pour chacun des services disponibles sur ACG.
  • Status de l’approvisionnement du service back-end, s’il est activé.
  • subdomainStatus, représentant l’état de l’approvisionnement des enregistrements DNS, uniquement pertinent pour le routage direct.
  • En-tête ETag représentant l’état actuel du compte. Vous pouvez utiliser la valeur dans un If-Match en-tête sur les demandes de mise à jour suivantes pour vous assurer que vous ne remplacez pas les modifications apportées par d’autres utilisateurs d’API.

Demande :

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

Réponse :

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

La requête équivalente si le compte a plusieurs services configurés s’affiche comme suit :

Demande :

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

Réponse :

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"
    },
  }
}

Mettre à jour la configuration du compte

Utilisez PUT sur le point de accounts/<accountName> terminaison pour mettre à jour la configuration du compte. Pour vous assurer que la mise à jour ne remplace pas une modification apportée par un autre utilisateur, ajoutez un If-Match en-tête avec l’ETag de la réponse la plus récente pour le compte.

Demande :

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"
    },
  }
}

Réponse :

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"
    },
  }
}

Ajouter un numéro au compte

Utilisez PUT sur le point de account/<accountName>/numbers/<telephoneNumber> terminaison pour ajouter un numéro au compte, activer un ou plusieurs services de communication et ajouter toute autre configuration. Les services de communication choisis doivent également être configurés sur le compte. Utilisez un en-tête If-None-Match pour vérifier qu’une ressource numérique avec ce numéro n’existe pas déjà. Tous les nombres doivent être créés au format E.164.

Dans l’exemple suivant :

  • Le nombre est +123451.
  • La connexion de l’opérateur est activée.
  • La configuration requise pour charger le numéro dans Operator Connect est fournie
  • customSipHeader spécifie qu’Azure Communications Gateway doit ajouter un en-tête avec la valeur exampleHeaderContents aux messages envoyés au réseau d’opérateurs. Le nom de l’en-tête est défini dans le cadre du déploiement d’Azure Communications Gateway.
  • Le serviceProvisioningStatus champ dans la réponse affiche la status de la synchronisation avec le service 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"
  }
}

Réponse :

{
  "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"
  }
}

Vérification de l’approvisionnement status après un certain temps

Utilisez GET après account/<accountName>/numbers/<telephoneNumber> une action d’approvisionnement pour case activée le status du nombre. Si le numéro a été correctement provisionné, le serviceProvisioningStatus champ est mis à jour de à pendingsynced.

Demande :

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

Réponse :

{
  "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"
  }
}

Erreur dans l’approvisionnement du service back-end pour le chargement d’un nombre

Dans cet exemple, l’approvisionnement principal lors du chargement du numéro rencontre une erreur, qui est répercutée sur la réponse. Les messages d’erreur sont transmis en toute transparence à partir des services principaux.

Notes

Initialement lors de l’approvisionnement d’un nombre, il a pending status, qui doit être interrogé à nouveau pour confirmer la réussite/l’échec.

La requête d’origine, qui ne contient pas une valeur pour le usage champ :

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

Réponse de la requête GET après un certain temps :

{  
  "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"
  }

Mettre à jour la configuration d’un nombre

Utilisez PUT sur le point de terminaison pour mettre à jour la account/<accountName>/numbers/<telephoneNumber> configuration d’un nombre. Pour vous assurer que la mise à jour ne remplace pas une modification apportée par un autre utilisateur, ajoutez un en-tête If-Match avec l’ETag de la réponse la plus récente pour le nombre.

Demande :

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

Réponse :

{
  "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"
  }
}

Répertorier les demandes d’informations

Utilisez un GET sur le /teamsRequestsForInformation point de terminaison pour obtenir la liste des consentements Teams qui vous ont été soumis par des clients potentiels.

Demande :

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

Réponse :

{
  "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"
}

Mettre à jour une demande d’informations

Utilisez PATCH sur le /teamsRequestsForInformation/<tenantID> point de terminaison pour mettre à jour la status de l’instance RFI, qui est répercutée dans le service back-end. Operator Connect et Téléphonie Teams Mobile vous permettent d’indiquer la status de la demande au client final afin que la status mise à jour s’affiche dans le Centre de Administration Teams du client.

Requête

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

Répertorier tous les numéros attribués à un compte

Utilisez une requête GET sur le /accounts/<accountName>/numbers point de terminaison pour obtenir une liste des numéros qui ont été provisionnés pour ce compte.

Demande :

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

Réponse pour un compte avec uniquement des numéros de connexion d’opérateur :

{
  "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"
}

Réponse pour un compte avec les numéros Operator Connect et Direct Routing provisionnés :

{
  "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"
}

Répertorier tous les emplacements d’urgence pour un compte spécifique

Utilisez une requête GET sur le /accounts/<accountName>/teamsCivicAddresses point de terminaison pour obtenir la liste complète des adresses civiques configurées dans le centre de Administration Teams pour ce compte. Vous pouvez utiliser le remplissage de cette liste comme lors de la création ou de la locationid mise à jour de nombres dans le compte.

Demande :

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

Réponse :

{
  "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"
}

Supprimer un numéro du compte

Utilisez DELETE sur le point de /accounts/<accountName>/numbers/<telephoneNumber> terminaison pour libérer un numéro à partir d’un locataire. Cette opération annule l’affectation d’un numéro d’un utilisateur s’il est attribué, puis libère le numéro du locataire.

Demande :

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

Réponse :

204 Status Code

Dépannage

  • Le routage direct Teams ne fonctionne pas pour les nombres sur un compte.

    • Vérifiez que le jeton DNS a été validé en envoyant un GET sur le compte, en vérifiant que serviceDetails.teamsDirectRouting a subdomainStatus la valeur Provisioned.
  • J’ai configuré un nombre pour utiliser le routage direct/zoom, mais il ne semble pas fonctionner.

    • Vérifiez que le compte a été configuré pour utiliser le routage direct/zoom et que cette fonctionnalité spécifique est activée pour le nombre.
  • J’ai réussi à contacter l’API, mais après avoir effectué plusieurs demandes, mes connexions commencent à expirer.

    • L’API d’approvisionnement est limitée au taux (à un taux raisonnable par seconde). Espacez vos demandes ou utilisez le point de terminaison de lot pour éviter d’être limité. La limite de débit expire finalement et vous pourrez vous connecter.

Étapes suivantes

Commencez à intégrer l’API d’approvisionnement Azure Communications Gateway.