API подготовки шлюза коммуникаций Azure

API подготовки Шлюза связи Azure для телекоммуникационных операторов позволяет подготавливать сведения о клиентах и назначенные им номера в Шлюзе связи Azure (ACG). API подготовки также поддерживает последовательность подготовки некоторых внутренних служб связи.

Подготовка клиентов и номеров является обязательной (с помощью API подготовки или портала управления номерами на основе браузера) для всех вариантов использования, кроме Operator Connect и Телефонная система Teams Mobile. Для Operator Connect и Телефонная система Teams Mobile использование API подготовки и (или) портала управления номерами является необязательным. Вместо этого можно интегрировать непосредственно с API Operator Connect.

Начало работы

Предварительные требования

  • Клиент с развернутыми приложениями Шлюза коммуникаций Azure.
  • Полное доменное имя (FQDN) шлюза связи Azure, которое отображается на странице Обзор ресурса в портал Azure. API доступен через порт 443 .provapi.<base-domain>
  • Компьютер с IP-адресом, разрешающим доступ к API, настроенным в списке разрешений при развертывании Шлюза связи Azure.

Аутентификация и авторизация

API подготовки использует OAuth 2.0 для управления доступом к ресурсам. Клиентское приложение должно получить действительный маркер носителя проверки подлинности для доступа к API подготовки. Маркер носителя указывает, что приложение авторизовано для одной или нескольких областей (ролей) для API подготовки. Рекомендуется использовать поток учетных данных клиента (предназначенный для процесса на стороне сервера).

Для API подготовки доступны следующие области:

  • ProvisioningAPI.Admin: возможность вызова любой операции в API.
  • ProvisioningAPI.Read: возможность вызова любой операции чтения (GET) в API.
  • ProvisioningAPI.Write: возможность вызова любой операции записи (PUT, PATCH) в API.
  • ProvisioningAPI.Delete: возможность вызова любой операции удаления (DELETE) в API.

Чтобы настроить поток учетных данных клиента, выполните приведенные далее действия.

  1. Убедитесь, что приложение поддерживает поток учетных данных клиента.
    • Когда приложение запрашивает маркер для API подготовки, оно должно использовать следующие поля.

      Параметр Условие Описание
      tenant обязательно Клиент каталога, содержащий шлюз связи Azure в формате GUID или доменного имени.
      область обязательно Область авторизации для идентификатора ресурса Шлюза связи Azure. Для потока учетных данных клиента, описанного здесь, область должен иметь значение https://func-voiceservice-rp-prod-eastuseuap.azurewebsites.net/.default.
      client_id обязательно Идентификатор приложения (клиента), назначенный вашему приложению.
    • Утверждение roles в полученном маркере указывает роли (области), к которым клиентскому приложению разрешен доступ.

    • Запросы к платформе подготовки шлюза коммуникации Azure должны иметь Authorization заголовок с этим токеном носителя.

    • Примеры использования маркеров см. в документации по потоку учетных данных клиента .

  2. Используйте портал Azure, чтобы зарегистрировать приложение в том же клиенте, что и развертывание Шлюза связи Azure. См. краткое руководство. Регистрация приложения в платформа удостоверений Майкрософт — Microsoft Entra | Microsoft Learn.
  3. Назначьте себя владельцем для регистрации приложения. См . раздел Назначение владельца приложения.
  4. Настройте регистрацию приложения, созданную путем регистрации приложения с ролями приложения, которые используют области для API подготовки, как описано выше.
  5. Как администратор клиента разрешите приложению использовать назначенные ему роли приложения. См. раздел Предоставление согласия администратора.

API подготовки использует стандартные цепочки доверия Майкрософт для сертификатов безопасности.

Основные понятия

Платформа подготовки имеет три ключевых ресурса, которыми оператор может управлять: учетными записями, числами и запросами на получение информации.

  • Ресурсы учетной записи — это описания клиентов-операторов (как правило, предприятия) и параметры для каждого клиента для подготовки служб.
  • Число ресурсов, принадлежащих учетной записи. Они описывают числа, службы (например, прямая маршрутизация Microsoft Teams), которые используются числами, и любую дополнительную конфигурацию на число.
  • Запрос информационных ресурсов (RFI) — это описания потенциальных клиентов для операторов, которые выражают заинтересованность в получении услуг от оператора через определенные серверные службы. В настоящее время доступны только rfis, созданные оператором Connect и согласия Телефонная система Teams Mobile.

Например, чтобы предоставить службу прямой маршрутизации Microsoft Teams клиенту contoso, создайте ресурс учетной записи с помощью API подготовки для Contoso. Учетная запись содержит конфигурацию для прямой маршрутизации (например, поддомен и соответствующие токены, необходимые для настройки записей DNS, которые Microsoft Teams может использовать для проверки конфигурации клиента). Затем необходимо добавить в учетную запись числовые ресурсы и включить каждое число для прямой маршрутизации.

Совет

Службу необходимо включить как для учетной записи, так и для номеров в ней.

Подготовка внутренних служб с помощью синхронизации внутренних служб

Шлюз связи Azure должен иметь сведения о номерах, для которых он предоставляет услуги, чтобы правильно подключать вызовы. Мы рекомендуем использовать API подготовки шлюза коммуникаций Azure для предоставления этих сведений в Шлюз связи Azure, но вы также можете использовать портал управления номерами. Большинство серверных служб также должны быть подготовлены с информацией об используемых номерах и учетных записях. Это требование часто означает, что для включения новых служб требуется несколько проектов интеграции ИТ. Платформа подготовки шлюза коммуникации Azure была предварительно интегрирована с некоторыми внутренними службами, чтобы подготовить их для вас, что снижает требования к ИТ-интеграции. Эту функцию можно использовать, включив синхронизацию серверной службы для соответствующих служб. Это также означает, что любая ИТ-интеграция с платформой подготовки Шлюза коммуникации Azure повторно используется для других внутренних служб.

Например, Оператор Connect требует, чтобы все числа отправились через API Operator Connect. Если для Operator Connect включена синхронизация серверной службы, любой номер, подготовленный в Шлюзе связи Azure и включенный для Operator Connect, будет автоматически подготовлен в Operator Connect, то есть вам не нужно интегрироваться с API Operator Connect.

Подготовка через платформу подготовки Шлюза коммуникаций Azure является необязательной для некоторых служб, где шлюз связи Azure может получать сведения непосредственно из серверной части. Однако некоторые функции, такие как добавление заголовков SIP клиента для выставления счетов, будут недоступны. Для служб, не поддерживающих синхронизацию серверной службы, может потребоваться другая интеграция ИТ непосредственно с серверной службой. Состояние поддержки подготовки описано в следующей таблице:

Серверная служба Требование к подготовке через платформу подготовки ACG Поддерживаемая подготовка серверной службы
Прямую маршрутизацию Обязательный
Zoom Обязательный
защита вызовов операторов Azure Обязательный
Operator Connect Необязательно
Телефонная система Teams Mobile Необязательно

Синхронизация с внутренними службами выполняется асинхронно, то есть запрос на подготовку может быть выполнен до подготовки серверной службы. Это состояние обозначается в ответе API с помощью поля , заданного serviceProvisioningStatus как pending. Рекомендуется запрашивать объект, чтобы проверка его состояние подготовки, пока для этого поля не будет задано значение success. Все ошибки при подготовке серверной системы становятся доступными в ответе напрямую.

Примеры

В следующих примерах показаны примеры запросов для управления rfIs, учетными записями и числами.

Create учетной записи, представляющей клиента

Используйте PUT в конечной точке accounts/<accountName> , чтобы создать учетную запись contoso клиента Contoso и настроить для нее одну или несколько служб связи. Используйте заголовок If-None-Match, чтобы убедиться, что ресурс учетной записи с таким именем еще не существует.

В следующем примере:

  • Настроена прямая маршрутизация.
  • Включена проверка идентификатора вызывающего абонента (по умолчанию).
  • Поддомен для клиента — contoso.
  • Предоставленные клиентом значения DNS TXT, необходимые для настройки записей DNS, находятся в region1Token полях и region2Token .

Запрос:

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

Ответ:

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

В следующем примере мы создадим учетную запись для использования только с Teams Operator Connect с включенной внутренней синхронизацией, чтобы сведения об этой учетной записи (например, любые отправленные номера) также подготавливались в Teams:

Запрос:

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

Ответ:

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

Просмотр сведений об учетной записи

Используйте get в конечной точке accounts/<accountName> , чтобы получить сведения об учетной записи. Ответ содержит следующие поля:

  • Вся конфигурация, заданная ранее (или значение по умолчанию, если поле не задано).
  • Подписчики учитываются для каждой службы, доступной в ACG.
  • Состояние подготовки серверной службы, если она включена.
  • subdomainStatus, представляющий состояние подготовки записей DNS, относящееся только к прямой маршрутизации.
  • Заголовок ETag , представляющий текущее состояние учетной записи. Значение в заголовке можно использовать при If-Match последующих запросах на обновление, чтобы не перезаписывать изменения, внесенные другими пользователями API.

Запрос:

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

Ответ:

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

Эквивалентный запрос, если для учетной записи настроено несколько служб, выглядит следующим образом:

Запрос:

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

Ответ:

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

Обновление конфигурации учетной записи

Используйте PUT в конечной точке accounts/<accountName> , чтобы обновить конфигурацию учетной записи. Чтобы убедиться, что обновление не перезаписывает изменения, внесенные другим пользователем, добавьте заголовок If-Match с ETag из последнего ответа для учетной записи.

Запрос:

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

Ответ:

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

Добавление одного номера в учетную запись

Используйте PUT в конечной точке account/<accountName>/numbers/<telephoneNumber> , чтобы добавить номер в учетную запись, включить одну или несколько служб связи и добавить любую другую конфигурацию. Выбранные службы связи также должны быть настроены в учетной записи. Используйте заголовок If-None-Match, чтобы убедиться, что ресурс с этим числом еще не существует. Все числа должны быть созданы в формате E.164.

В следующем примере:

  • Число равно +123451.
  • Оператор connect включен.
  • Предоставляется конфигурация, необходимая для отправки номера в Operator Connect.
  • customSipHeader указывает, что Шлюз связи Azure должен добавить заголовок со значением exampleHeaderContents в сообщения, отправленные в сеть оператора. Имя заголовка задается при развертывании Шлюза связи Azure.
  • В serviceProvisioningStatus поле в ответе отображается состояние синхронизации с серверной службой.
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"
  }
}

Ответ:

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

Проверка состояния подготовки через некоторое время

Используйте get в после account/<accountName>/numbers/<telephoneNumber> действия подготовки, чтобы проверка состояние номера. Если номер был успешно подготовлен, serviceProvisioningStatus поле обновляется с pending до synced.

Запрос:

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

Ответ:

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

Ошибка при подготовке серверной службы для отправки номера

В этом примере при подготовке серверной части при отправке числа возникает ошибка, которая отражается обратно в ответе. Сообщения об ошибках передаются прозрачно из внутренних служб.

Примечание

Изначально при подготовке номера у него есть pending состояние, которое необходимо запросить еще раз, чтобы подтвердить успешность или сбой.

Исходный запрос, в котором отсутствует значение для usage поля:

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

Через некоторое время ответ из запроса GET:

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

Обновление конфигурации для номера

Используйте put в конечной точке account/<accountName>/numbers/<telephoneNumber> , чтобы обновить конфигурацию для номера. Чтобы убедиться, что обновление не перезаписывает изменения, внесенные другим пользователем, добавьте заголовок If-Match с ETag из последнего ответа на номер.

Запрос:

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

Ответ:

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

Перечисление запросов на получение информации

Используйте get в конечной точке /teamsRequestsForInformation , чтобы получить список согласий Teams, которые были отправлены вам потенциальными клиентами.

Запрос:

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

Ответ:

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

Обновление запроса на получение информации

Используйте patch в конечной точке /teamsRequestsForInformation/<tenantID> , чтобы обновить состояние RFI, которое отражается во внутренней службе. Оператор Connect и Телефонная система Teams Mobile позволяет указать состояние запроса конечному клиенту, чтобы обновленное состояние отображалось в Центре Администратор Teams клиента.

Запрос

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

Ответ

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

Вывод списка всех номеров, назначенных учетной записи

Используйте запрос GET к конечной точке /accounts/<accountName>/numbers , чтобы получить список номеров, подготовленных для этой учетной записи.

Запрос:

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

Ответ для учетной записи только с номерами 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"
}

Ответ для учетной записи с подготовленными номерами operator Connect и Direct Routing:

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

Список всех расположений для экстренного реагирования для определенной учетной записи

Используйте запрос GET к конечной точке/accounts/<accountName>/teamsCivicAddresses, чтобы получить полный список гражданских адресов, настроенных в Центре Администратор Teams для этой учетной записи. Вы можете использовать заполнение этого списка в locationid качестве при создании или обновлении номеров в учетной записи.

Запрос:

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

Ответ:

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

Удаление номера из учетной записи

Используйте delete в конечной точке /accounts/<accountName>/numbers/<telephoneNumber> , чтобы освободить номер из клиента. Эта операция отменит назначение номера от пользователя, если он назначен, а затем освободит номер из клиента.

Запрос:

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

Ответ:

204 Status Code

Устранение неполадок

  • Прямая маршрутизация Teams не работает для номеров в учетной записи.

    • Убедитесь, что маркер DNS проверен, отправив get в учетную запись, убедившись, что serviceDetails.teamsDirectRouting имеет subdomainStatus значение Provisioned.
  • Я настроили число для использования прямой маршрутизации или масштабирования, но, похоже, это не работает.

    • Убедитесь, что учетная запись настроена для использования прямой маршрутизации или масштабирования и что в номере включена эта функция.
  • Мне удалось связаться с API, но после выполнения нескольких запросов время ожидания моих подключений начинается.

    • API подготовки ограничен по скорости (до разумной скорости в секунду). Размейте запросы или используйте пакетную конечную точку, чтобы избежать ограничения скорости. Ограничение скорости в конечном итоге истекает, и вы сможете подключиться.

Дальнейшие действия

Начните интеграцию с API подготовки шлюза коммуникации Azure.