다음을 통해 공유


Azure Communications Gateway 프로비저닝 API

통신 운영자를 위한 Azure Communications Gateway의 프로비저닝 API를 사용하면 고객의 세부 정보와 할당된 번호를 ACG(Azure Communications Gateway)에 프로비전할 수 있습니다. 프로비전 API는 일부 백 엔드 통신 서비스의 흐름 프로비저닝도 지원합니다.

Operator Connect 및 Teams 전화 Mobile을 제외한 모든 사용 사례에는 고객 및 번호 프로비전이 필수입니다(프로비저닝 API 또는 브라우저 기반 번호 관리 포털 사용). Operator Connect 및 Teams 전화 Mobile의 경우 프로비저닝 API 및/또는 숫자 관리 포털의 사용은 선택 사항이며 대신 Operator Connect API와 직접 통합할 수 있습니다.

시작

필수 구성 요소

  • Azure Communications Gateway 애플리케이션이 배포된 테넌트입니다.
  • Azure Portal 리소스에 대한 개요 페이지에 표시되는 Azure Communications Gateway에 대한 FQDN(정규화된 도메인 이름)입니다. API는 의 provapi.<base-domain>포트 443에서 사용할 수 있습니다.
  • Azure Communications Gateway 배포의 일부로 허용 목록에 구성된 대로 API에 대한 액세스를 허용하는 IP 주소가 있는 컴퓨터입니다.

인증 및 권한 부여

프로비저닝 API는 OAuth 2.0 을 사용하여 리소스에 대한 액세스를 제어합니다. 클라이언트 애플리케이션은 프로비저닝 API에 액세스하려면 유효한 인증 전달자 토큰을 가져와야 합니다. 전달자 토큰은 프로비전 API에 대한 하나 이상의 범위(역할)에 대해 애플리케이션에 권한이 부여되었음을 나타냅니다. 클라이언트 자격 증명 흐름(서버 쪽 프로세스용으로 설계됨)을 사용하는 것이 좋습니다.

프로비저닝 API에 사용할 수 있는 범위는 다음과 같습니다.

  • ProvisioningAPI.Admin: API에서 모든 작업을 호출하는 기능입니다.
  • ProvisioningAPI.Read: API에서 모든 읽기(GET) 작업을 호출하는 기능입니다.
  • ProvisioningAPI.Write: API에서 쓰기(PUT, PATCH) 작업을 호출하는 기능입니다.
  • ProvisioningAPI.Delete: API에서 삭제(DELETE) 작업을 호출하는 기능입니다.

클라이언트 자격 증명 흐름을 설정하려면 다음을 수행합니다.

  1. 애플리케이션이 클라이언트 자격 증명 흐름을 지원할 수 있는지 확인합니다.
    • 애플리케이션이 프로비전 API에 대한 토큰을 요청하는 경우 다음 필드를 사용해야 합니다.

      매개 변수 조건 설명
      tenant required Azure Communications Gateway를 포함하는 디렉터리 테넌트(guid 또는 도메인 이름 형식)입니다.
      scope required Azure Communications Gateway 리소스 ID에 대한 권한 부여의 scope. 여기에 설명된 클라이언트 자격 증명 흐름의 경우 scope 이어야 https://func-voiceservice-rp-prod-eastuseuap.azurewebsites.net/.default합니다.
      client_id 필수 앱에 할당된 애플리케이션(클라이언트) ID입니다.
    • 수신된 토큰의 클레임은 roles 클라이언트 애플리케이션에 액세스할 권한이 있는 역할(범위)을 지정합니다.

    • Azure Communications Gateway 프로비저닝 플랫폼에 대한 요청에는 이 전달자 토큰이 있는 Authorization 헤더가 있어야 합니다.

    • 토큰 사용 예제는 클라이언트 자격 증명 흐름 설명서를 참조하세요.

  2. Azure Portal 사용하여 Azure Communications Gateway 배포와 동일한 테넌트에서 애플리케이션을 등록합니다. 빠른 시작: Microsoft ID 플랫폼 앱 등록 - Microsoft Entra | 참조 Microsoft Learn.
  3. 자신을 앱 등록의 소유자로 할당합니다. 애플리케이션 소유자 할당을 참조하세요.
  4. 앞에서 설명한 대로 프로비전 API의 범위를 사용하는 앱 역할에 애플리케이션을 등록하여 만든 앱 등록을 구성합니다.
  5. 테넌트 관리자로서 애플리케이션에서 할당한 앱 역할을 사용하도록 허용합니다. 관리자 동의 부여를 참조하세요.

프로비전 API는 보안 인증서에 표준 Microsoft 신뢰 체인을 사용합니다.

주요 개념

프로비저닝 플랫폼에는 운영자가 관리할 수 있는 세 가지 주요 리소스인 계정, 숫자 및 정보 요청이 있습니다.

  • 계정 리소스는 운영자 고객(일반적으로 엔터프라이즈) 및 서비스 프로비전에 대한 고객별 설정에 대한 설명입니다.
  • 숫자 리소스는 계정에 속합니다. 숫자, 숫자가 사용하는 서비스(예: Microsoft Teams 직접 라우팅) 및 숫자당 추가 구성에 대해 설명합니다.
  • RFI(정보 요청) 리소스는 특정 백 엔드 서비스를 통해 운영자로부터 서비스를 받는 데 관심을 표명하는 운영자의 잠재 고객에 대한 설명입니다. 현재 Operator Connect 및 Teams 전화 Mobile 동의에서 생성된 RFI만 사용할 수 있습니다.

예를 들어 고객 Contoso에게 Microsoft Teams 직접 라우팅 서비스를 제공하려면 Contoso용 프로비저닝 API를 사용하여 계정 리소스를 만듭니다. 계정에는 직접 라우팅에 대한 구성이 포함되어 있습니다(예: Microsoft Teams에서 고객의 구성의 유효성을 검사하는 데 사용할 수 있는 DNS 레코드를 설정하는 데 필요한 하위 도메인 및 해당 토큰). 그런 다음 계정에 숫자 리소스를 추가하고 직접 라우팅에 대해 각 번호를 사용하도록 설정해야 합니다.

계정 및 계정 내 번호 모두에서 서비스를 사용하도록 설정해야 합니다.

백 엔드 서비스 동기화를 사용하여 백 엔드 서비스 프로비전

호출을 제대로 연결하려면 Azure Communications Gateway에 서비스를 제공하는 번호에 대한 정보가 있어야 합니다. Azure Communications Gateway에 이 정보를 제공하기 위해 Azure Communications Gateway 프로비저닝 API를 권장하지만 숫자 관리 포털을 사용할 수도 있습니다. 또한 대부분의 백 엔드 서비스는 사용할 숫자 및 계정에 대한 정보로 프로비전되어야 합니다. 이 요구 사항은 종종 새 서비스를 사용하도록 설정하기 위해 여러 IT 통합 프로젝트가 필요하다는 것을 의미합니다. Azure Communications Gateway 프로비저닝 플랫폼은 일부 백 엔드 서비스와 미리 통합되어 이를 프로비전하여 IT 통합 요구 사항을 줄입니다. 관련 서비스에 백 엔드 서비스 동기화 를 사용하도록 설정하여 이 함수를 사용할 수 있습니다. 이는 또한 Azure Communications Gateway 프로비저닝 플랫폼에 대한 모든 IT 통합을 다른 백 엔드 서비스에 재사용할 수 있음을 의미합니다.

예를 들어 Operator Connect는 모든 숫자가 Operator Connect API를 통해 업로드되도록 요구합니다. Operator Connect에 대해 백 엔드 서비스 동기화를 사용하도록 설정하면 Azure Communications Gateway에 프로비전되고 Operator Connect에 사용하도록 설정된 모든 번호가 Operator Connect에 자동으로 프로비전되므로 Operator Connect API와 통합할 필요가 없습니다.

Azure Communications Gateway 프로비저닝 플랫폼을 통한 프로비저닝은 Azure Communications Gateway가 백 엔드에서 직접 정보를 가져올 수 있는 일부 서비스의 경우 선택 사항입니다. 그러나 청구 목적으로 고객 SIP 헤더 추가와 같은 일부 기능은 사용할 수 없습니다. 백 엔드 서비스 동기화를 지원하지 않는 서비스의 경우 백 엔드 서비스에 직접 다른 IT 통합이 필요할 수 있습니다. 프로비전 지원의 상태 다음 표에 설명되어 있습니다.

백 엔드 서비스 ACG 프로비저닝 플랫폼을 통해 프로비전하기 위한 요구 사항 지원되는 백 엔드 서비스 프로비전
직접 라우팅 필수
Zoom 필수
Azure 연산자 콜 보호 필수
운영자 연결 선택 사항
Teams 전화 Mobile 선택 사항

백 엔드 서비스에 동기화는 비동기적입니다. 즉, 백 엔드 서비스가 프로비전되기 전에 프로비전 요청이 성공할 수 있습니다. 이 상태 로 설정된 pending필드를 사용하여 API 응답에서 serviceProvisioningStatus 표시됩니다. 이 필드가 로 설정될 때까지 개체를 쿼리하여 프로비저닝 상태 검사 것이 success좋습니다. 백 엔드 시스템 프로비전의 오류는 응답에서 직접 사용할 수 있습니다.

예제

다음 예제에서는 RFI, 계정 및 숫자를 관리하기 위한 샘플 요청을 보여 줍니다.

고객을 나타내는 계정 Create

엔드포인트에서 PUT을 accounts/<accountName> 사용하여 고객 Contoso용으로 명명된 contoso 계정을 만들고 계정에 대해 하나 이상의 통신 서비스를 구성합니다. If-None-Match 헤더를 사용하여 이 이름의 계정 리소스가 아직 없는지 확인합니다.

다음 예제에서는

  • 직접 라우팅이 구성됩니다.
  • 호출자 ID 스크리닝이 사용하도록 설정됩니다(기본값).
  • 고객의 하위 도메인은 입니다 contoso.
  • DNS 레코드를 설정하는 데 필요한 고객이 제공한 DNS TXT 값은 및 region2Token 필드에 있습니다region1Token.

요청:

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에 프로비전되도록 백 엔드 동기화를 사용하도록 설정된 Teams 운영자 Connect에서만 사용할 계정을 만듭니다.

요청:

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> 사용하여 계정에 대한 구성을 업데이트합니다. 업데이트가 다른 사용자의 변경 내용을 덮어쓰지 않도록 하려면 계정에 대한 최신 응답에서 ETag를 사용하여 헤더를 추가 If-Match 합니다.

요청:

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.
  • 연산자 연결을 사용할 수 있습니다.
  • Operator Connect에 번호를 업로드하는 데 필요한 구성이 제공됩니다.
  • customSipHeader 는 Azure Communications Gateway가 연산자 네트워크로 전송된 메시지에 값 exampleHeaderContents 이 있는 헤더를 추가하도록 지정합니다. 헤더 이름은 Azure Communications Gateway 배포의 일부로 설정됩니다.
  • 응답의 필드에는 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 경우 필드는 에서 로 pendingsynced업데이트됩니다.

요청:

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> 사용하여 숫자에 대한 구성을 업데이트합니다. 업데이트가 다른 사용자의 변경 내용을 덮어쓰지 않도록 하려면 숫자에 대한 최신 응답에서 ETag를 사용하여 If-Match 헤더를 추가합니다.

요청:

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의 상태 업데이트합니다. Operator 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"
      }
    }
}

계정에 할당된 모든 숫자 나열

엔드포인트에서 /accounts/<accountName>/numbers GET 요청을 사용하여 해당 계정에 대해 프로비전된 숫자 목록을 가져옵니다.

요청:

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 및 직접 라우팅 번호가 프로비전된 계정에 대한 응답:

{
  "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 관리 Center에 구성된 전체 시민 주소 목록을 가져옵니다. 계정 내에서 숫자를 만들거나 업데이트할 때 이 목록의 모집단을 로 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 직접 라우팅이 계정의 숫자에 대해 작동하지 않습니다.

    • 계정에서 GET을 전송하여 DNS 토큰의 유효성이 검사되었는지 확인하고 이 serviceDetails.teamsDirectRoutingsubdomainStatus 와 같은지 확인합니다 Provisioned.
  • 직접 라우팅/확대/축소를 사용하도록 숫자를 구성했지만 작동하지 않는 것 같습니다.

    • 계정이 직접 라우팅/확대/축소를 사용하도록 구성되어 있고 이 특정 기능이 사용하도록 설정되어 있는지 확인합니다.
  • API에 연결할 수 있었지만 여러 요청을 수행한 후 연결이 시간 초과를 시작합니다.

    • 프로비저닝 API는 속도가 제한됩니다(적절한 초당 속도). 속도 제한을 방지하기 위해 요청 공간을 늘리거나 일괄 처리 엔드포인트를 사용합니다. 속도 제한은 결국 시간 초과되며 연결할 수 있습니다.

다음 단계

Azure Communications Gateway 프로비저닝 API와 통합을 시작합니다.