Share via


クイックスタート: 音声ルーティングをプログラムで構成する

Azure Communication Services ダイレクト ルーティングの発信音声ルーティング規則を構成します。

前提条件

注意

SipRoutingClient のその他の使用例については、GitHub を参照してください。

セッション ボーダー コントローラーを追加する

  1. 左側のペインの [音声通話 - PSTN] で、[ダイレクト ルーティング] を選択します。 [セッション ボーダー コントローラー] タブで、[構成] を選択します。

  2. SBC の FQDN とシグナリング ポートを入力します。 SBC FQDN の要件は次のとおりです。

    • 前提条件で前述したように、ダイレクト ルーティング構成に 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.

重要

通話を発信または受信する前に、SBC の状態が "オンライン" になっていることを確認します

音声ルーティング規則を作成する

Screenshot of outgoing voice routing configuration.

音声ルートに名前を付け、正規表現を使用して数値パターンを指定し、そのパターンに対して SBC を選択します。 基本的な正規表現の例を次に示します。

  • ^\+\d+$: 先頭に正符号が付いた 1 桁以上の数字の電話番号と一致します。
  • ^\+1(\d{10})$: +1 の後に 10 桁の数字がある電話番号と一致します。
  • ^\+1(425|206)(\d{7})$: 先頭が +1425 または +1206 で、その後に 7 桁の数字が続く電話番号と一致します。
  • ^\+0?1234$: +01234+1234 の両方の電話番号と一致します。

正規表現の詳細については、.NET 正規表現の概要に関する記事を参照してください。

1 つのパターンに対して複数の SBC を選択できます。 そのような場合、それらはルーティング アルゴリズムでランダムな順序で選択されます。 また、正確な数値パターンを複数回指定することもできます。 上の行ほど優先度が高くなります。 その行に関連付けられているすべての SBC が使用できない場合は、次の行が選択されます。 このようにして、複雑なルーティング シナリオが作成されます。

ダイレクト ルーティングの構成を削除する

音声ルートを削除するには:

  1. 左側のペインの [音声通話 - PSTN] で、[ダイレクト ルーティング] に移動します。
  2. [音声ルート] タブで、削除するルート (または複数のルート) のチェックボックスをオンにします。
  3. [削除] を選択します。

SBC を削除するには:

  1. 左側のペインの [音声通話 - PSTN] で、[ダイレクト ルーティング] に移動します。
  2. [セッション ボーダー コントローラー] タブで、[構成] を選択します。
  3. 削除する SBC の FQDN とポートのフィールドをクリアし、その後 [次へ] を選択します。
  4. [音声ルート] タブで、音声ルーティングの構成を確認します。 必要に応じて変更し、[保存] を選択します。

音声ルートに関連付けられている SBC を削除する場合、[音声ルート] タブでそのルートに別の SBC を選択できます。SBC が関連付けられていない音声ルートは削除されます。

前提条件

最終的なコード

このクイックスタートの最終的なコードは GitHub にあります。

また、SipRoutingClient のその他の使用例については、GitHub でも参照できます。

C# アプリケーションを作成する

コンソール ウィンドウ (コマンド プロンプト、PowerShell、Bash など) で、dotnet new コマンドを使用して新しいコンソール アプリを作成します。

    dotnet new console -o DirectRoutingQuickstart

このコマンドにより、1 つのソース ファイルを使用する単純な "Hello World" C# プロジェクトが作成されます。Program.cs

ディレクトリを、新しく作成したアプリ フォルダーに変更し、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 });

ルートの作成または更新

発信呼び出しのルーティング規則を指定します。 各規則は、2 つの部分で構成されます。ダイヤルされた電話番号と一致する必要がある正規表現パターンと、呼び出しがルーティングされる登録されたトランクの FQDN です。

ルートの順序によって、ルートの優先順位が決まります。 RegEx に一致する最初のルートが呼び出し用に選択されます。

この例では、+1 で始まる番号に 1 つのルートを作成し、+ だけで始まる番号に 2 つ目のルートを作成します。

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);

ルーティング規則の作成と更新でも同じ方法を使用します。 ルートを更新するときは、すべてのルートを 1 回の更新で送信します。 新しいルーティング構成では、前のルーティング構成が完全に上書きされます。

ダイレクト ルーティングの構成を削除する

1 つの音声ルートの編集や削除を行うことはできません。 音声ルーティング構成全体を上書きする必要があります。 すべてのルートとトランクを削除する空のリストの例を次に示します。

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

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

音声ルートで使用されていない場合は、次の例を使用して 1 つのトランク (SBC) を削除できます。 SBC が音声ルートに記載されている場合、そのルートを最初に削除します。

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

前提条件

最終的なコード

このクイックスタートの最終的なコードは GitHub にあります。

また、SipRoutingClient のその他の使用例については、GitHub でも参照できます。

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 ファイルを開きます。 依存関係のグループに、次の dependency 要素を追加します。

<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();

ルートの作成または更新

発信呼び出しのルーティング規則を指定します。 各規則は、2 つの部分で構成されます。ダイヤルされた電話番号と一致する必要がある正規表現パターンと、呼び出しがルーティングされる登録されたトランクの FQDN です。

ルートの順序によって、ルートの優先順位が決まります。 RegEx に一致する最初のルートが呼び出し用に選択されます。

この例では、+1 で始まる番号に 1 つのルートを作成し、+ だけで始まる番号に 2 つ目のルートを作成します。

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));

ルーティング規則の作成と更新でも同じ方法を使用します。 ルートを更新するときは、すべてのルートを 1 回の更新で送信します。 新しいルーティング構成では、前のルーティング構成が完全に上書きされます。

ダイレクト ルーティングの構成を削除する

1 つの音声ルートの編集や削除を行うことはできません。 音声ルーティング構成全体を上書きする必要があります。 すべてのルートとトランクを削除する空のリストの例を次に示します。

2 つのインポートを追加します。

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();

音声ルートで使用されていない場合は、次の例を使用して 1 つのトランク (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 にあります。

また、SipRoutingClient のその他の使用例については、GitHub でも参照できます。

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 Phone Numbers クライアント ライブラリをインストールします。

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

--save オプションを使用すると、--save ファイル内の依存関係としてライブラリが追加されます。

クライアントを認証する

クライアント ライブラリから 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
    }
  ]);

ルートの作成または更新

発信呼び出しのルーティング規則を指定します。 各規則は、2 つの部分で構成されます。ダイヤルされた電話番号と一致する必要がある正規表現パターンと、呼び出しがルーティングされる登録されたトランクの FQDN です。

ルートの順序によって、ルートの優先順位が決まります。 RegEx に一致する最初のルートが呼び出し用に選択されます。

この例では、+1 で始まる番号に 1 つのルートを作成し、+ だけで始まる番号に 2 つ目のルートを作成します。

   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
  });

ルーティング規則の作成と更新でも同じ方法を使用します。 ルートを更新するときは、すべてのルートを 1 回の更新で送信します。 新しいルーティング構成では、前のルーティング構成が完全に上書きされます。

ダイレクト ルーティングの構成を削除する

1 つの音声ルートの編集や削除を行うことはできません。 音声ルーティング構成全体を上書きする必要があります。 すべてのルートとトランクを削除する空のリストの例を次に示します。

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

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

音声ルートで使用されていない場合は、次の例を使用して 1 つのトランク (SBC) を削除できます。 SBC が音声ルートに記載されている場合、そのルートを最初に削除します。

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

コードの実行

node コマンドを使用して、direct-routing-quickstart.js ファイルに追加したコードを実行します。

   node direct-routing-quickstart.js

前提条件

最終的なコード

このクイックスタートの最終的なコードは GitHub にあります。

また、SipRoutingClient のその他の使用例については、GitHub でも参照できます。

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_IDAZURE_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 の完全修飾ドメイン名とポート番号を指定して、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)

ルートの作成または更新

発信呼び出しのルーティング規則を指定します。 各規則は、2 つの部分で構成されます。ダイヤルされた電話番号と一致する必要がある正規表現パターンと、呼び出しがルーティングされる登録されたトランクの FQDN です。

ルートの順序によって、ルートの優先順位が決まります。 RegEx に一致する最初のルートが呼び出し用に選択されます。

この例では、+1 で始まる番号に 1 つのルートを作成し、+ だけで始まる番号に 2 つ目のルートを作成します。

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)

ルーティング規則の作成と更新でも同じ方法を使用します。 ルートを更新するときは、すべてのルートを 1 回の更新で送信します。 新しいルーティング構成では、前のルーティング構成が完全に上書きされます。

ダイレクト ルーティングの構成を削除する

1 つの音声ルートの編集や削除を行うことはできません。 音声ルーティング構成全体を上書きする必要があります。 すべてのルートとトランクを削除する空のリストの例を次に示します。

#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([])

音声ルートで使用されていない場合は、次の例を使用して 1 つのトランク (SBC) を削除できます。 SBC が音声ルートに記載されている場合、そのルートを最初に削除します。

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

コードの実行

コンソール プロンプトから、direct_routing_sample.py ファイルを含むディレクトリに移動します。 その後、次の Python コマンドを実行してアプリを実行します。

python direct_routing_sample.py

リソースをクリーンアップする

Communication Services サブスクリプションをクリーンアップして解除する場合は、リソースまたはリソース グループを削除できます。 リソース グループを削除すると、それに関連付けられている他のリソースも削除されます。 リソースのクリーンアップの詳細情報

次の手順

詳細については、次の記事を参照してください。