빠른 시작: 프로그래밍 방식으로 음성 라우팅 구성

Azure Communication Services 직접 라우팅에 대한 아웃바운드 음성 라우팅 규칙을 구성합니다.

필수 조건

참고 항목

GitHub에서 SipRoutingClient에 대한 더 많은 사용 예제를 찾을 수 있습니다.

세션 경계 컨트롤러 추가

  1. 왼쪽 창의 음성 통화 - PSTN 아래에서 직접 라우팅을 선택합니다. Session Border Controller 탭에서 구성을 선택합니다.

  2. SBC에 대한 FQDN 및 신호 포트를 입력합니다. SBC FQDN에 대한 요구 사항은 다음과 같습니다.

    • 먼저 FQDN의 도메인 부분을 확인해야 필수 구성 요소의 앞서 설명한 대로 직접 라우팅 구성에 추가할 수 있습니다.
    • SBC 인증서는 이름과 일치해야 합니다. 와일드카드 인증서가 지원됩니다.
    • FQDN에 대한 *.onmicrosoft.com*.azure.com 도메인을 사용할 수 없습니다.

    요구 사항의 전체 목록은 Azure 직접 라우팅 인프라 요구 사항을 참조하세요.

    Screenshot of adding a session border controller on the panel for configuring direct routing.

  3. 다음을 선택합니다. 모든 항목이 올바르게 설정되면 Azure Portal에서 SBC 상태가 활성으로 표시됩니다.

    Screenshot of SBC connection properties.

Important

전화를 걸거나 받기 전에 SBC 상태가 온라인인지 확인합니다.

음성 라우팅 규칙 만들기

Screenshot of outgoing voice routing configuration.

음성 경로에 이름을 지정하고, 정규식을 사용하여 숫자 패턴을 지정하고, 해당 패턴에 대해 SBC를 선택합니다. 기본 정규식의 몇 가지 예제는 다음과 같습니다.

  • ^\+\d+$: 전화 번호가 더하기로 시작하는 하나 이상의 숫자와 일치하는지 확인합니다.
  • ^\+1(\d{10})$: 전화 번호가 +1 뒤의 10개 숫자와 일치하는지 확인합니다.
  • ^\+1(425|206)(\d{7})$: +1425 또는 +1206로 시작하고 뒤에 7개 숫자가 있는 전화 번호가 일치하는지 확인합니다.
  • ^\+0?1234$: +01234+1234 전화 번호가 둘 다 일치하는지 확인합니다.

정규식에 관한 자세한 내용은 .NET 정규식 개요를 참조하세요.

단일 패턴에 대해 여러 SBC를 선택할 수 있습니다. 이 경우 라우팅 알고리즘은 임의 순서로 선택합니다. 정확한 번호 패턴을 두 번 이상 지정할 수도 있습니다. 행이 높을수록 우선 순위가 높습니다. 해당 행과 연결된 모든 SBC를 사용할 수 없는 경우 다음 행이 선택됩니다. 이 방식으로, 복잡한 라우팅 시나리오를 만듭니다.

직접 라우팅 구성 제거

음성 경로를 삭제하려면:

  1. 왼쪽 창의 음성 통화 - PSTN 아래에서 직접 라우팅으로 이동합니다.
  2. 음성 경로 탭에서 삭제하려는 경로(또는 경로)의 확인란을 선택합니다.
  3. 제거를 선택합니다.

SBC를 삭제하려면:

  1. 왼쪽 창의 음성 통화 - PSTN 아래에서 직접 라우팅으로 이동합니다.
  2. Session Border Controller 탭에서 구성을 선택합니다.
  3. 제거하려는 SBC의 FQDN 및 포트 필드를 지운 후, 다음을 선택합니다.
  4. 음성 경로 탭에서 음성 라우팅 구성을 검토합니다. 필요에 따라 변경한 다음, 저장을 선택합니다.

음성 경로와 연결된 SBC를 제거하면 음성 경로 탭에서 경로에 대해 다른 SBC를 선택할 수 있습니다. SBC가 없는 음성 경로는 삭제됩니다.

필수 조건

최종 코드

GitHub에서 이 빠른 시작에 대한 최종 코드를 찾습니다.

GitHub에서 SipRoutingClient에 대한 더 많은 사용 예제를 찾을 수도 있습니다.

C# 애플리케이션 만들기

콘솔 창(예: 명령 프롬프트, PowerShell 또는 Bash)에서 dotnet new 명령을 사용하여 새 콘솔 앱을 만듭니다.

    dotnet new console -o DirectRoutingQuickstart

이 명령은 Program.cs라는 원본 파일 하나만 들어 있는 간단한 "Hello World" C# 프로젝트를 만듭니다.

디렉터리를 새로 만든 앱 폴더로 변경하고 dotnet build 명령을 사용하여 애플리케이션을 컴파일합니다.

    cd DirectRoutingQuickstart
    dotnet build

패키지 설치

애플리케이션 디렉터리에 있는 동안 dotnet add package 명령을 사용하여 .NET용 Azure Communication PhoneNumbers 클라이언트 라이브러리를 설치합니다.

    dotnet add package Azure.Communication.PhoneNumbers --version 1.1.0

Program.cs의 맨 위에 using 지시문을 추가하여 네임스페이스를 포함합니다.

using Azure.Communication.PhoneNumbers.SipRouting;

클라이언트 인증

Azure Communication Services 리소스에서 연결 문자열을 사용하여 전화 번호 클라이언트를 인증합니다.

// Get a connection string to the Azure Communication Services resource.
var connectionString = "<connection_string>";
var client = new SipRoutingClient(connectionString);

직접 라우팅 구성 설정

필수 구성 요소에서 도메인 소유권을 확인했습니다. 다음 단계는 트렁크를 만들고(SBC 추가) 음성 경로를 만드는 것입니다.

트렁크 만들기 또는 업데이트

Azure Communication Services 직접 라우팅은 등록된 SBC와의 통신만 허용합니다. SBC를 등록하려면 해당 FQDN 및 포트가 필요합니다.

// Register your SBCs by providing their fully qualified domain names and port numbers.
var usSbcFqdn = "sbc.us.contoso.com";
var euSbcFqdn = "sbc.eu.contoso.com";
var sbcPort = 5061;

var usTrunk = new SipTrunk(usSbcFqdn, sbcPort);
var euTrunk = new SipTrunk(euSbcFqdn, sbcPort);

await client.SetTrunksAsync(new List<SipTrunk> { usTrunk, euTrunk });

경로 만들기 또는 업데이트

아웃바운드 호출에 대한 라우팅 규칙을 제공합니다. 각 규칙은 전화 접속 전화 번호와 일치해야 하는 정규식 패턴과 통화가 라우팅되는 등록된 트렁크의 FQDN이라는 두 부분으로 구성됩니다.

경로 순서에 따라 경로의 우선 순위가 결정됩니다. 통화를 위해 regex와 일치하는 첫 번째 경로가 선택됩니다.

이 예제에서는 +1로 시작하는 번호에 대한 경로 하나와 +로 시작하는 번호에 대한 두 번째 경로를 만듭니다.

var usRoute = new SipTrunkRoute("UsRoute", "^\\+1(\\d{10})$", trunks: new List<string> { usSbcFqdn });
var defaultRoute = new SipTrunkRoute("DefaultRoute", "^\\+\\d+$", trunks: new List<string> { usSbcFqdn, euSbcFqdn });

await client.SetRoutesAsync(new List<SipTrunkRoute> { usRoute, defaultRoute });

직접 라우팅 구성 업데이트

레코드를 동일한 FQDN으로 덮어쓰면 특정 트렁크의 속성을 업데이트할 수 있습니다. 예를 들어 새 SBC 포트 값을 설정할 수 있습니다.

var usTrunk = new SipTrunk("sbc.us.contoso.com", 5063);
await client.SetTrunkAsync(usTrunk);

동일한 방법을 사용하여 라우팅 규칙을 만들고 업데이트합니다. 경로를 업데이트할 때 모든 경로를 단일 업데이트로 보냅니다. 새 라우팅 구성은 이전 라우팅 구성을 완전히 덮어씁니다.

직접 라우팅 구성 제거

단일 음성 경로를 편집하거나 제거할 수 없습니다. 전체 음성 라우팅 구성을 덮어써야 합니다. 다음은 모든 경로와 트렁크를 제거하는 빈 목록의 예입니다.

//delete all configured voice routes
await client.SetRoutesAsync(new List<SipTrunkRoute>());

//delete all trunks
await client.SetTrunksAsync(new List<SipTrunk>());

다음 예제를 사용하여 사용 중인 음성 경로가 없는 경우 단일 트렁크(SBC)를 삭제할 수 있습니다. SBC가 음성 경로에 나열된 경우 먼저 해당 경로를 삭제합니다.

await client.DeleteTrunkAsync("sbc.us.contoso.com");

필수 조건

최종 코드

GitHub에서 이 빠른 시작에 대한 최종 코드를 찾습니다.

GitHub에서 SipRoutingClient에 대한 더 많은 사용 예제를 찾을 수도 있습니다.

Java 애플리케이션 만들기

터미널 또는 명령 창을 엽니다. Java 애플리케이션을 만들 디렉터리로 이동합니다. 그런 다음, 명령을 실행하여 maven-archetype-quickstart 템플릿에서 Java 프로젝트를 생성합니다.

mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

generate 작업은 artifactId 값과 이름이 같은 디렉터리를 만들었습니다. 이 디렉터리 아래에서 src/main/java 디렉터리는 프로젝트 소스 코드를 포함하고, src/test/java 디렉터리는 테스트 원본을 포함하고, pom.xml 파일은 프로젝트의 POM(프로젝트 개체 모델)입니다.

패키지 설치

텍스트 편집기에서 pom.xml 파일을 엽니다. 종속성 그룹에 다음 종속성 요소를 추가합니다.

<dependencies>
	<dependency>
		<groupId>com.azure</groupId>
		<artifactId>azure-communication-phonenumbers</artifactId>
		<version>1.1.0</version>
	</dependency>
</dependencies>

앱 프레임워크 설정

프로젝트 디렉터리에서 다음을 수행합니다.

  1. /src/main/java/com/communication/quickstart 디렉터리로 이동합니다.
  2. 편집기에서 App.java 파일을 엽니다.
  3. System.out.println("Hello world!"); 문을 바꿉니다.
  4. import 지시문을 추가합니다.

시작하려면 다음 코드를 사용합니다.

import com.azure.communication.phonenumbers.siprouting.SipRoutingAsyncClient;
import com.azure.communication.phonenumbers.siprouting.SipRoutingClientBuilder;
import com.azure.communication.phonenumbers.siprouting.models.SipTrunk;
import com.azure.communication.phonenumbers.siprouting.models.SipTrunkRoute;
import static java.util.Arrays.asList;

public class App
{
    public static void main( String[] args ) throws IOException
    {
        System.out.println("Azure Communication Services - Direct Routing Quickstart");
        // Quickstart code goes here
    }
}

클라이언트 인증

SipRoutingClientBuilder를 사용하면 Microsoft Entra 인증을 사용할 수 있습니다.

// You can find your endpoint and access key from your resource in the Azure portal
String endpoint = "https://<RESOURCE_NAME>.communication.azure.com";

SipRoutingAsyncClient sipRoutingAsyncClient = new SipRoutingClientBuilder()
    .endpoint(endpoint)
    .credential(new DefaultAzureCredentialBuilder().build())
    .buildClient();

또는 통신 리소스의 엔드포인트 및 액세스 키를 사용하여 다음을 인증합니다.

// You can find your connection string from your resource in the Azure portal
String connectionString = "endpoint=https://<RESOURCE_NAME>.communication.azure.com/;accesskey=<ACCESS_KEY>";

SipRoutingAsyncClient sipRoutingAsyncClient = new SipRoutingClientBuilder()
    .connectionString(connectionString)
    .buildClient();

직접 라우팅 구성 설정

필수 구성 요소에서 도메인 소유권을 확인했습니다. 다음 단계는 트렁크를 만들고(SBC 추가) 음성 경로를 만드는 것입니다.

트렁크 만들기 또는 업데이트

Azure Communication Services 직접 라우팅은 등록된 SBC와의 통신만 허용합니다. SBC를 등록하려면 해당 FQDN 및 포트가 필요합니다.

sipRoutingAsyncClient.setTrunksWithResponse(asList(
	new SipTrunk("sbc.us.contoso.com", 5061),
	new SipTrunk("sbc.eu.contoso.com", 5061)
)).block();

경로 만들기 또는 업데이트

아웃바운드 호출에 대한 라우팅 규칙을 제공합니다. 각 규칙은 전화 접속 전화 번호와 일치해야 하는 정규식 패턴과 통화가 라우팅되는 등록된 트렁크의 FQDN이라는 두 부분으로 구성됩니다.

경로 순서에 따라 경로의 우선 순위가 결정됩니다. 통화를 위해 regex와 일치하는 첫 번째 경로가 선택됩니다.

이 예제에서는 +1로 시작하는 번호에 대한 경로 하나와 +로 시작하는 번호에 대한 두 번째 경로를 만듭니다.

sipRoutingAsyncClient.setRoutes(asList(
	new SipTrunkRoute("UsRoute", "^\\+1(\\d{10})$").setTrunks(asList("sbc.us.contoso.com")),
	new SipTrunkRoute("DefaultRoute", "^\\+\\d+$").setTrunks(asList("sbc.us.contoso.com", "sbc.eu.contoso.com"))
)).block();

직접 라우팅 구성 업데이트

레코드를 동일한 FQDN으로 덮어쓰면 특정 트렁크의 속성을 업데이트할 수 있습니다. 예를 들어 새 SBC 포트 값을 설정할 수 있습니다.

sipRoutingClient.setTrunk(new SipTrunk("sbc.us.contoso.com", 5063));

동일한 방법을 사용하여 라우팅 규칙을 만들고 업데이트합니다. 경로를 업데이트할 때 모든 경로를 단일 업데이트로 보냅니다. 새 라우팅 구성은 이전 라우팅 구성을 완전히 덮어씁니다.

직접 라우팅 구성 제거

단일 음성 경로를 편집하거나 제거할 수 없습니다. 전체 음성 라우팅 구성을 덮어써야 합니다. 다음은 모든 경로와 트렁크를 제거하는 빈 목록의 예입니다.

두 개의 가져오기를 추가합니다.

import java.util.Collections;
import java.util.List;

다음 코드를 사용하여 직접 라우팅 구성을 삭제합니다.

//delete all configured voice routes
System.out.println("Delete all routes");
List<SipTrunkRoute> routes = Collections.<SipTrunkRoute> emptyList();
sipRoutingAsyncClient.setRoutes(routes).block();

//delete all trunks
System.out.println("Delete all trunks");
List<SipTrunk> trunks = Collections.<SipTrunk> emptyList();
sipRoutingAsyncClient.setTrunksWithResponse(trunks).block();

다음 예제를 사용하여 사용 중인 음성 경로가 없는 경우 단일 트렁크(SBC)를 삭제할 수 있습니다. SBC가 음성 경로에 나열된 경우 먼저 해당 경로를 삭제합니다.

sipRoutingClient.deleteTrunk("sbc.us.contoso.com");

코드 실행

pom.xml 파일이 포함된 디렉터리로 이동하고 다음 mvn 명령을 사용하여 프로젝트를 컴파일합니다.

  mvn clean compile

그런 다음, 패키지를 빌드합니다.

  mvn package

다음 mvn 명령을 실행하여 앱을 실행합니다.

  mvn exec:java -Dexec.mainClass="com.communication.quickstart.App" -Dexec.cleanupDaemonThreads=false

필수 조건

최종 코드

GitHub에서 이 빠른 시작에 대한 최종 코드를 찾습니다.

GitHub에서 SipRoutingClient에 대한 더 많은 사용 예제를 찾을 수도 있습니다.

Node.js 애플리케이션 만들기

터미널 또는 명령 창을 열어 앱에 대한 새 디렉터리를 만들고 이 디렉터리로 이동합니다.

    mkdir direct-routing-quickstart && cd direct-routing-quickstart

npm init -y를 실행하여 기본 설정으로 package.json 파일을 만듭니다.

   npm init -y

사용자가 만든 디렉터리의 루트에 direct-routing-quickstart.js라는 파일을 만듭니다. 다음 조각을 추가합니다.

async function main() {
    // quickstart code will go here
}

main();

패키지 설치

npm install 명령을 사용하여 JavaScript용 Azure Communication Services 전화 번호 클라이언트 라이브러리를 설치합니다.

   npm install @azure/communication-phone-numbers --save

--save 옵션은 라이브러리를 package.json 파일의 종속성으로 추가합니다.

클라이언트 인증

클라이언트 라이브러리에서 SipRoutingClient를 가져와서 연결 문자열로 인스턴스화합니다. 이 코드는 COMMUNICATION_SERVICES_CONNECTION_STRING이라는 환경 변수에서 리소스에 대한 연결 문자열을 검색합니다. 리소스의 연결 문자열을 관리하는 방법을 알아봅니다.

direct-routing-quickstart.js에 다음 코드를 추가합니다.

const { SipRoutingClient } = require('@azure/communication-phone-numbers');

// This code demonstrates how to fetch your connection string
// from an environment variable.
const connectionString = process.env['COMMUNICATION_SERVICES_CONNECTION_STRING'];

// Instantiate the phone numbers client
const sipRoutingClient = new SipRoutingClient(connectionString);

직접 라우팅 구성 설정

필수 구성 요소에서 도메인 소유권을 확인했습니다. 다음 단계는 트렁크를 만들고(SBC 추가) 음성 경로를 만드는 것입니다.

트렁크 만들기 또는 업데이트

Azure Communication Services 직접 라우팅은 등록된 SBC와의 통신만 허용합니다. SBC를 등록하려면 해당 FQDN 및 포트가 필요합니다.

  await client.setTrunks([
    {
      fqdn: 'sbc.us.contoso.com',
      sipSignalingPort: 5061
    },{
      fqdn: 'sbc.eu.contoso.com',
      sipSignalingPort: 5061
    }
  ]);

경로 만들기 또는 업데이트

아웃바운드 호출에 대한 라우팅 규칙을 제공합니다. 각 규칙은 전화 접속 전화 번호와 일치해야 하는 정규식 패턴과 통화가 라우팅되는 등록된 트렁크의 FQDN이라는 두 부분으로 구성됩니다.

경로 순서에 따라 경로의 우선 순위가 결정됩니다. 통화를 위해 regex와 일치하는 첫 번째 경로가 선택됩니다.

이 예제에서는 +1로 시작하는 번호에 대한 경로 하나와 +로 시작하는 번호에 대한 두 번째 경로를 만듭니다.

   await client.setRoutes([
    {
      name: "UsRoute",
      description: "route's description",
      numberPattern: "^\+1(\d{10})$",
      trunks: [ 'sbc.us.contoso.com' ]
    },{
      name: "DefaultRoute",
      description: "route's description",
      numberPattern: "^\+\d+$",
      trunks: [ 'sbc.us.contoso.com', 'sbc.eu.contoso.com']
    }
  ]);

직접 라우팅 구성 업데이트

레코드를 동일한 FQDN으로 덮어쓰면 특정 트렁크의 속성을 업데이트할 수 있습니다. 예를 들어 새 SBC 포트 값을 설정할 수 있습니다.

  await client.setTrunk({
    fqdn: 'sbc.us.contoso.com',
    sipSignalingPort: 5063
  });

동일한 방법을 사용하여 라우팅 규칙을 만들고 업데이트합니다. 경로를 업데이트할 때 모든 경로를 단일 업데이트로 보냅니다. 새 라우팅 구성은 이전 라우팅 구성을 완전히 덮어씁니다.

직접 라우팅 구성 제거

단일 음성 경로를 편집하거나 제거할 수 없습니다. 전체 음성 라우팅 구성을 덮어써야 합니다. 다음은 모든 경로와 트렁크를 제거하는 빈 목록의 예입니다.

//delete all configured voice routes
console.log("Deleting all routes...");
await client.setRoutes([]);

//delete all trunks
console.log("Deleting all trunks...");
await client.setTrunks([]);

다음 예제를 사용하여 사용 중인 음성 경로가 없는 경우 단일 트렁크(SBC)를 삭제할 수 있습니다. SBC가 음성 경로에 나열된 경우 먼저 해당 경로를 삭제합니다.

   await client.deleteTrunk('sbc.us.contoso.com');

코드 실행

node 명령을 사용하여 direct-routing-quickstart.js 파일에 추가한 코드를 실행합니다.

   node direct-routing-quickstart.js

필수 조건

최종 코드

GitHub에서 이 빠른 시작에 대한 최종 코드를 찾습니다.

GitHub에서 SipRoutingClient에 대한 더 많은 사용 예제를 찾을 수도 있습니다.

Python 애플리케이션 만들기

터미널 또는 명령 창을 엽니다. 앱에 대한 새 디렉터리를 만든 다음, 해당 디렉터리로 이동합니다.

mkdir direct-routing-quickstart && cd direct-routing-quickstart

텍스트 편집기를 사용하여 direct_routing_sample.py라는 파일을 프로젝트 루트 디렉터리에 만들고 다음 코드를 추가합니다.

import os
from azure.communication.phonenumbers.siprouting import SipRoutingClient, SipTrunk, SipTrunkRoute

try:
   print('Azure Communication Services - Direct Routing Quickstart')
   # Quickstart code goes here
except Exception as ex:
   print('Exception:')
   print(ex)

다음 섹션에서 나머지 빠른 시작 코드를 추가합니다.

패키지 설치

애플리케이션 디렉터리에 있는 동안 pip install 명령을 사용하여 Python용 Azure Communication Services 관리 클라이언트 라이브러리를 설치합니다.

pip install azure-communication-phonenumbers==1.1.0

클라이언트 인증

SipRoutingClient를 사용하면 Microsoft Entra 인증을 사용할 수 있습니다. DefaultAzureCredential 개체를 사용하면 가장 손쉽게 Microsoft Entra ID를 시작할 수 있으며, pip install 명령을 사용하여 설치할 수 있습니다.

pip install azure-identity

DefaultAzureCredential 개체를 만들려면 등록된 Microsoft Entra 애플리케이션에서 AZURE_CLIENT_ID, AZURE_CLIENT_SECRETAZURE_TENANT_ID가 해당 값을 사용하여 환경 변수로 이미 등록되어 있어야 합니다. 이러한 환경 변수를 빠르게 가져오는 방법은 Microsoft Entra ID를 사용한 인증을 참조하세요.

azure-identity 라이브러리를 설치한 후 클라이언트 인증을 계속할 수 있습니다.

import os
from azure.communication.phonenumbers.siprouting import SipRoutingClient
from azure.identity import DefaultAzureCredential

# You can find your endpoint from your resource in the Azure portal
endpoint = 'https://<RESOURCE_NAME>.communication.azure.com'
try:
    print('Azure Communication Services - Direct Routing Quickstart')
    credential = DefaultAzureCredential()
    sip_routing_client = SipRoutingClient(endpoint, credential)
except Exception as ex:
    print('Exception:')
    print(ex)

또는 통신 리소스의 엔드포인트 및 액세스 키를 사용하여 다음을 인증할 수 있습니다.

import os
from azure.communication.phonenumbers.siprouting import SipRoutingClient

# You can find your connection string from your resource in the Azure portal
connection_string = 'https://<RESOURCE_NAME>.communication.azure.com/;accesskey=<YOUR_ACCESS_KEY>'
try:
    print('Azure Communication Services - Direct Routing Quickstart')
    sip_routing_client = SipRoutingClient.from_connection_string(connection_string)
except Exception as ex:
    print('Exception:')
    print(ex)

직접 라우팅 구성 설정

필수 구성 요소에서 도메인 소유권을 확인했습니다. 다음 단계는 트렁크를 만들고(SBC 추가) 음성 경로를 만드는 것입니다.

트렁크 만들기 또는 업데이트

정규화된 도메인 이름 및 포트 번호를 제공하여 SBC를 등록합니다.

new_trunks = [SipTrunk(fqdn="sbc.us.contoso.com", sip_signaling_port=1234), SipTrunk(fqdn="sbc.eu.contoso.com", sip_signaling_port=1234)]
sip_routing_client.set_trunks(new_trunks)

경로 만들기 또는 업데이트

아웃바운드 호출에 대한 라우팅 규칙을 제공합니다. 각 규칙은 전화 접속 전화 번호와 일치해야 하는 정규식 패턴과 통화가 라우팅되는 등록된 트렁크의 FQDN이라는 두 부분으로 구성됩니다.

경로 순서에 따라 경로의 우선 순위가 결정됩니다. 통화를 위해 regex와 일치하는 첫 번째 경로가 선택됩니다.

이 예제에서는 +1로 시작하는 번호에 대한 경로 하나와 +로 시작하는 번호에 대한 두 번째 경로를 만듭니다.

us_route = SipTrunkRoute(name="UsRoute", description="Handle US numbers '+1'", number_pattern="^\\+1(\\d{10})$", trunks=["sbc.us.contoso.com"])
def_route = SipTrunkRoute(name="DefaultRoute", description="Handle all numbers", number_pattern="^\\+\\d+$", trunks=["sbc.us.contoso.com","sbc.eu.contoso.com"])
new_routes = [us_route, def_route]
sip_routing_client.set_routes(new_routes)

직접 라우팅 구성 업데이트

레코드를 동일한 FQDN으로 덮어쓰면 특정 트렁크의 속성을 업데이트할 수 있습니다. 예를 들어 새 SBC 포트 값을 설정할 수 있습니다.

new_trunk = SipTrunk(fqdn="sbc.us.contoso.com", sip_signaling_port=5063)
sip_routing_client.set_trunk(new_trunk)

동일한 방법을 사용하여 라우팅 규칙을 만들고 업데이트합니다. 경로를 업데이트할 때 모든 경로를 단일 업데이트로 보냅니다. 새 라우팅 구성은 이전 라우팅 구성을 완전히 덮어씁니다.

직접 라우팅 구성 제거

단일 음성 경로를 편집하거나 제거할 수 없습니다. 전체 음성 라우팅 구성을 덮어써야 합니다. 다음은 모든 경로와 트렁크를 제거하는 빈 목록의 예입니다.

#delete all configured voice routes
print('Deleting all routes...')
sip_routing_client.set_routes([])

#delete all trunks
print('Deleting all trunks...')
sip_routing_client.set_trunks([])

다음 예제를 사용하여 사용 중인 음성 경로가 없는 경우 단일 트렁크(SBC)를 삭제할 수 있습니다. SBC가 음성 경로에 나열된 경우 먼저 해당 경로를 삭제합니다.

sip_routing_client.delete_trunk("sbc.us.contoso.com")

코드 실행

콘솔 프롬프트에서 direct_routing_sample.py 파일이 포함된 디렉터리로 이동합니다. 그런 후, 다음 Python 명령을 실행하여 앱을 실행합니다.

python direct_routing_sample.py

리소스 정리

Communication Services 구독을 정리하고 제거하려면 리소스 또는 리소스 그룹을 삭제하면 됩니다. 리소스 그룹을 삭제하면 해당 리소스 그룹에 연결된 다른 모든 리소스가 함께 삭제됩니다. 리소스 정리에 대해 자세히 알아봅니다.

다음 단계

자세한 내용은 다음 문서를 참조하세요.