クイックスタート: キューとルーティングのためにジョブを送信する

Azure Communication Services Job Router の使用を開始するには、クライアントを設定してから、キュー、ポリシー、ワーカー、ジョブなどのコア機能を構成します。 ジョブ ルーターの概念の詳細については、ジョブ ルーターの概念に関するドキュメントを参照してください。

前提条件

サンプル コード

このクイック スタートのサンプル コードは、GitHub で確認してダウンロードできます。

設定

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

コンソール ウィンドウ (cmd、PowerShell、Bash など) で、dotnet new コマンドを使用し、JobRouterQuickstart という名前で新しいコンソール アプリを作成します。 このコマンドにより、1 つのソース ファイルを使用する単純な "Hello World" C# プロジェクトが作成されます。Program.cs

dotnet new console -o JobRouterQuickstart

新しく作成したアプリ フォルダーにディレクトリを変更し、dotnet build コマンドを使用してアプリケーションをコンパイルします。

cd JobRouterQuickstart
dotnet build

パッケージをインストールする

NuGet で .NET 用 Azure Communication Job Router クライアント ライブラリをインストールします。

dotnet add package Azure.Communication.JobRouter

.NET バージョン 1.0.0 以降の Azure Communication Job Router クライアント ライブラリを使用する必要があります。

Program.cs の先頭に以下の using ディレクティブを追加し、JOBRouter の名前空間を含めます。

using Azure.Communication.JobRouter;

Job Router クライアントと管理クライアントを初期化する

ジョブ ルーター クライアントは、Azure portal で Azure Communication Services リソースから取得した接続文字列を使用して認証できます。 Job Router サービスと対話するためにクライアントと管理クライアントの両方を生成します。 管理者クライアントはキューとポリシーのプロビジョニングに使用され、クライアントはジョブの送信とワーカーの登録に使用されます。 接続文字列の詳細については、「access-your-connection-strings-and-service-endpoints」を参照してください。

// Get a connection string to our Azure Communication Services resource.
var routerAdminClient = new JobRouterAdministrationClient("your_connection_string");
var routerClient = new JobRouterClient("your_connection_string");

配布ポリシーを作成する

ジョブ ルーターにより、配布ポリシーが使用され、使用可能なジョブと通知の有効期限 (オファーとも呼ばれます) をワーカーに通知する方法が決定されます。 ID名前offerExpiresAfter、配布のモードを指定して、ポリシーを作成します。

var distributionPolicy = await routerAdminClient.CreateDistributionPolicyAsync(
    new CreateDistributionPolicyOptions(
        distributionPolicyId: "distribution-policy-1",
        offerExpiresAfter: TimeSpan.FromMinutes(1),
        mode: new LongestIdleMode())
    {
        Name = "My distribution policy"
    }
);

キューを作成する

ID名前を指定してキューを作成し、上記で作成した配布ポリシー オブジェクトの ID を指定します。

var queue = await routerAdminClient.CreateQueueAsync(
    new CreateQueueOptions(queueId: "queue-1", distributionPolicyId: distributionPolicy.Value.Id)
    {
        Name = "My Queue" 
    });

ジョブの送信

これで、ジョブをそのキューに直接送信できます。ワーカー セレクターを使用する場合、ワーカーのラベル Some-Skill が 10 より大きい必要があります。

var job = await routerClient.CreateJobAsync(
    new CreateJobOptions(jobId: "job-1", channelId: "voice", queueId: queue.Value.Id)
    {
        Priority = 1,
        RequestedWorkerSelectors =
        {
            new RouterWorkerSelector(key: "Some-Skill", labelOperator: LabelOperator.GreaterThan, value: new RouterValue(10))
        }
    });

ワーカーを作成する

ここで、Some-Skill のラベルを 11、容量を my-channel に指定して、そのキューから作業を受け取るワーカーを作成します。

var worker = await routerClient.CreateWorkerAsync(
    new CreateWorkerOptions(workerId: "worker-1", capacity: 1)
    {
        Queues = { queue.Value.Id },
        Labels = { ["Some-Skill"] = new RouterValue(11) },
        Channels = { new RouterChannel(channelId: "voice", capacityCostPerJob: 1) },
        AvailableForOffers = true
    });

オファーを受け取る

Event Grid サブスクリプションから RouterWorkerOfferIssued を受け取る必要があります。 ただし、数秒待ってから、JobRouter API に対してワーカーに直接クエリを実行して、オファーが発行されたかどうかを確認することもできます。

await Task.Delay(TimeSpan.FromSeconds(10));
worker = await routerClient.GetWorkerAsync(worker.Value.Id);
foreach (var offer in worker.Value.Offers)
{
    Console.WriteLine($"Worker {worker.Value.Id} has an active offer for job {offer.JobId}");
}

ジョブ オファーを受け入れる

その後、ワーカーは SDK を使用してジョブ オファーを受け入れることができ、これにより、ジョブがワーカーに割り当てられます。

var accept = await routerClient.AcceptJobOfferAsync(workerId: worker.Value.Id, offerId: worker.Value.Offers.FirstOrDefault().OfferId);
Console.WriteLine($"Worker {worker.Value.Id} is assigned job {accept.Value.JobId}");

ジョブを完了する

ワーカーがジョブに関連付けられた作業を完了すると (たとえば、呼び出しを完了する)、ジョブが完了します。

await routerClient.CompleteJobAsync(new CompleteJobOptions(jobId: accept.Value.JobId, assignmentId: accept.Value.AssignmentId));
Console.WriteLine($"Worker {worker.Value.Id} has completed job {accept.Value.JobId}");

ジョブを閉じる

ワーカーが新しいジョブを引き受ける準備ができたら、ワーカーはジョブを閉じる必要があります。 必要に応じて、ワーカーは処理コードを指定してジョブの結果を示すことができます。

await routerClient.CloseJobAsync(new CloseJobOptions(jobId: accept.Value.JobId, assignmentId: accept.Value.AssignmentId) {
    DispositionCode = "Resolved"
});
Console.WriteLine($"Worker {worker.Value.Id} has closed job {accept.Value.JobId}");

ジョブを削除する

ジョブが閉じられたら、ジョブを削除して、このサンプルを再度実行した場合に同じ ID でジョブを再作成できるようにします

await routerClient.DeleteJobAsync(accept.Value.JobId);
Console.WriteLine($"Deleting job {accept.Value.JobId}");

コードの実行

dotnet run を使ってアプリケーションを実行し、結果を確認します。

dotnet run

Azure Communication Services - Job Router Quickstart
Worker worker-1 has an active offer for job job-1
Worker worker-1 is assigned job job-1
Worker worker-1 has completed job job-1
Worker worker-1 has closed job job-1
Deleting job job-1

Note

アプリケーションを 2 回以上実行すると、新しいジョブは毎回キューに配置されます。 これにより、上記のコードを実行したときに作成されるジョブ以外のジョブがワーカーに提供される可能性があります。 これにより、要求がゆがめられる可能性があるため、キュー内のジョブを毎回削除することを検討してください。 キューまたはジョブの管理については、SDK のドキュメントを参照してください。

リファレンス ドキュメント

Azure Communication Services Job Router が備える全機能については、.NET SDK リファレンスまたは REST API リファレンスを参照してください。

前提条件

サンプル コード

このクイック スタートのサンプル コードは、GitHub で確認してダウンロードできます。

設定

新しい Web アプリケーションを作成する

ターミナルまたはコンソール ウィンドウで、アプリケーション用の新しいフォルダーを作成し、そこに移動します。

mkdir acs-router-quickstart && cd acs-router-quickstart

既定の設定で npm init を実行して、package.json ファイルを作成します。

npm init -y

このクイックスタートのコードを追加する新しいファイル index.js を作成します。

パッケージのインストール

JavaScript バージョン 1.0.0 以降の Azure Communication Job Router クライアント ライブラリを使用する必要があります。

npm install コマンドを使用して、次に示した JavaScript 用の Communication Services SDK をインストールします。

npm install @azure-rest/communication-job-router --save

アプリのフレームワークを設定する

index.js ファイルに、次のコードを追加します。 main 関数にクイックスタートのコードを追加します。

const JobRouterClient = require('@azure-rest/communication-job-router').default;

const main = async () => {
  console.log("Azure Communication Services - Job Router Quickstart")

  // Quickstart code goes here

};

main().catch((error) => {
  console.log("Encountered an error");
  console.log(error);
})

Job Router クライアントを初期化する

ジョブ ルーター クライアントは、Azure portal で Azure Communication Services リソースから取得した接続文字列を使用して認証できます。 Job Router サービスとやり取りするクライアントを生成します。 接続文字列の詳細については、「access-your-connection-strings-and-service-endpoints」を参照してください。

index.jsmain 関数内に次のコードを追加します。

const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] ||
    "endpoint=https://<resource-name>.communication.azure.com/;<access-key>";
const client = JobRouterClient(connectionString);

配布ポリシーを作成する

Job Router により、配布ポリシーが使用され、使用可能なジョブと通知の有効期限 (オファーとも呼ばれます) をワーカーに通知する方法が決定されます。 Id名前offerExpiresAfterSeconds、配布のモードを指定して、ポリシーを作成します。

const distributionPolicy = await client.path("/routing/distributionPolicies/{distributionPolicyId}", "distribution-policy-1").patch({
    body: {
        offerExpiresAfterSeconds: 60,
        mode: { kind: "longest-idle" },
        name: "My distribution policy"
    },
    contentType: "application/merge-patch+json"
});

キューを作成する

ID名前を指定してキューを作成し、上記で作成した配布ポリシー オブジェクトの ID を指定します。

const queue = await client.path("/routing/queues/{queueId}", "queue-1").patch({
    body: {
        name: "My Queue",
        distributionPolicyId: distributionPolicy.body.id
    },
    contentType: "application/merge-patch+json"
});

ジョブの送信

これで、ジョブをそのキューに直接送信できます。ワーカー セレクターを使用する場合、ワーカーのラベル Some-Skill が 10 より大きい必要があります。

const job = await client.path("/routing/jobs/{jobId}", "job-1").patch({
    body: {
        channelId: "voice",
        queueId: queue.body.id,
        priority: 1,
        requestedWorkerSelectors: [{ key: "Some-Skill", labelOperator: "greaterThan", value: 10 }]
    },
    contentType: "application/merge-patch+json"
});

ワーカーを作成する

ここで、Some-Skill のラベルを 11、容量を my-channel に指定して、そのキューから作業を受け取るワーカーを作成します。

let worker = await client.path("/routing/workers/{workerId}", "worker-1").patch({
    body:  {
        capacity: 1,
        queues: [queue.body.id],
        labels: { "Some-Skill": 11 },
        channels: [{ channelId: "voice", capacityCostPerJob: 1 }],
        availableForOffers: true
    },
    contentType: "application/merge-patch+json"
});

オファーを受け取る

Event Grid サブスクリプションから RouterWorkerOfferIssued を受け取る必要があります。 ただし、数秒待ってから、JobRouter API に対してワーカーに直接クエリを実行して、オファーが発行されたかどうかを確認することもできます。

await new Promise(r => setTimeout(r, 10000));
worker = await client.path("/routing/workers/{workerId}", worker.body.id).get();
for (const offer of worker.body.offers) {
    console.log(`Worker ${worker.body.id} has an active offer for job ${offer.jobId}`);
}

ジョブ オファーを受け入れる

その後、ワーカーは SDK を使用してジョブ オファーを受け入れることができ、これにより、ジョブがワーカーに割り当てられます。

const accept = await client.path("/routing/workers/{workerId}/offers/{offerId}:accept", worker.body.id, worker.body.offers[0].offerId).post();
console.log(`Worker ${worker.body.id} is assigned job ${accept.body.jobId}`);

ジョブを完了する

ワーカーがジョブに関連付けられた作業を完了すると (たとえば、呼び出しを完了する)、ジョブが完了します。

await client.path("/routing/jobs/{jobId}/assignments/{assignmentId}:complete", accept.body.jobId, accept.body.assignmentId).post();
console.log(`Worker ${worker.body.id} has completed job ${accept.body.jobId}`);

ジョブを閉じる

ワーカーが新しいジョブを引き受ける準備ができたら、ワーカーはジョブを閉じる必要があります。 必要に応じて、ワーカーは処理コードを指定してジョブの結果を示すことができます。

await client.path("/routing/jobs/{jobId}/assignments/{assignmentId}:close", accept.body.jobId, accept.body.assignmentId).post({
    body: { dispositionCode: "Resolved" }
});
console.log(`Worker ${worker.body.id} has closed job ${accept.body.jobId}`);

ジョブを削除する

ジョブが閉じられたら、ジョブを削除して、このサンプルを再度実行した場合に同じ ID でジョブを再作成できるようにします

await client.path("/routing/jobs/{jobId}", accept.body.jobId).delete();
console.log(`Deleting job ${accept.body.jobId}`);

コードの実行

コードを実行するには、index.js ファイルがあるディレクトリにいることを確認します。

node index.js

Azure Communication Services - Job Router Quickstart
Worker worker-1 has an active offer for job job-1
Worker worker-1 is assigned job job-1
Worker worker-1 has completed job job-1
Worker worker-1 has closed job job-1
Deleting job job-1

Note

アプリケーションを 2 回以上実行すると、新しいジョブは毎回キューに配置されます。 これにより、上記のコードを実行したときに作成されるジョブ以外のジョブがワーカーに提供される可能性があります。 これにより、要求がゆがめられる可能性があるため、キュー内のジョブを毎回削除することを検討してください。 キューまたはジョブの管理については、SDK のドキュメントを参照してください。

リファレンス ドキュメント

Azure Communication Services Job Router が備える全機能については、JavaScript SDK リファレンスまたは REST API リファレンスを参照してください。

前提条件

サンプル コード

このクイック スタートのサンプル コードは、GitHub で確認してダウンロードできます。

設定

新しい Python アプリケーションを作成する

ターミナルまたはコンソール ウィンドウで、アプリケーション用の新しいフォルダーを作成し、そこに移動します。

mkdir jobrouter-quickstart && cd jobrouter-quickstart

パッケージをインストールする

Python バージョン 1.0.0 以降の Azure Communication Job Router クライアント ライブラリを使用する必要があります。

コンソール プロンプトで、次のコマンドを実行します。

pip install azure-communication-jobrouter

アプリのフレームワークを設定する

router-quickstart.py という名前の新しいファイルを作成し、基本的なプログラム構造を追加します。

import time
from azure.communication.jobrouter import (
    JobRouterClient,
    JobRouterAdministrationClient
)
from azure.communication.jobrouter.models import (
    LongestIdleMode,
    RouterWorkerSelector,
    LabelOperator,
    RouterChannel,
    CloseJobOptions
)

class RouterQuickstart(object):
    print("Azure Communication Services - Job Router Quickstart")
    #Job Router method implementations goes here

if __name__ == '__main__':
    router = RouterQuickstart()

Job Router クライアントと管理クライアントを初期化する

ジョブ ルーター クライアントは、Azure portal で Azure Communication Services リソースから取得した接続文字列を使用して認証できます。 Job Router サービスと対話するためにクライアントと管理クライアントの両方を生成します。 管理者クライアントはキューとポリシーのプロビジョニングに使用され、クライアントはジョブの送信とワーカーの登録に使用されます。 接続文字列の詳細については、「access-your-connection-strings-and-service-endpoints」を参照してください。

# Get a connection string to our Azure Communication Services resource.
router_admin_client = JobRouterAdministrationClient.from_connection_string(conn_str = "your_connection_string")
router_client = JobRouterClient.from_connection_string(conn_str = "your_connection_string")

配布ポリシーを作成する

ジョブ ルーターにより、配布ポリシーが使用され、使用可能なジョブと通知の有効期限 (オファーとも呼ばれます) をワーカーに通知する方法が決定されます。 distribution_policy_id名前offer_expires_after_seconds 値、および 配布 モード を指定して、ポリシーを作成します。

distribution_policy = router_admin_client.upsert_distribution_policy(
    distribution_policy_id ="distribution-policy-1",
    offer_expires_after_seconds = 60,
    mode = LongestIdleMode(),
    name = "My distribution policy")

キューを作成する

ID名前を指定してキューを作成し、上記で作成した配布ポリシー オブジェクトの ID を指定します。

queue = router_admin_client.upsert_queue(
    queue_id = "queue-1",
    name = "My Queue",
    distribution_policy_id = distribution_policy.id)

ジョブの送信

これで、ジョブをそのキューに直接送信できます。ワーカー セレクターを使用する場合、ワーカーのラベル Some-Skill が 10 より大きい必要があります。

job = router_client.upsert_job(
    job_id = "job-1",
    channel_id = "voice",
    queue_id = queue.id,
    priority = 1,
    requested_worker_selectors = [
        RouterWorkerSelector(
            key = "Some-Skill",
            label_operator = LabelOperator.GREATER_THAN,
            value = 10
        )
    ])

ワーカーを作成する

ここで、Some-Skill のラベルを 11、容量を my-channel に指定して、そのキューから作業を受け取るワーカーを作成します。

worker = router_client.upsert_worker(
    worker_id = "worker-1",
    capacity = 1,
    queues = ["queue-1"],
    labels = {
        "Some-Skill": 11
    },
    channels = [RouterChannel(channel_id = "voice", capacity_cost_per_job = 1)],
    available_for_offers = True
)

オファーを受け取る

Event Grid サブスクリプションから RouterWorkerOfferIssued を受け取る必要があります。 ただし、数秒待ってから、JobRouter API に対してワーカーに直接クエリを実行して、オファーが発行されたかどうかを確認することもできます。

time.sleep(10)
worker = router_client.get_worker(worker_id = worker.id)
for offer in worker.offers:
    print(f"Worker {worker.id} has an active offer for job {offer.job_id}")

ジョブ オファーを受け入れる

その後、ワーカーは SDK を使用してジョブ オファーを受け入れることができ、これにより、ジョブがワーカーに割り当てられます。

accept = router_client.accept_job_offer(worker_id = worker.id, offer_id = worker.offers[0].offer_id)
print(f"Worker {worker.id} is assigned job {accept.job_id}")

ジョブを完了する

ワーカーがジョブに関連付けられた作業を完了すると (たとえば、呼び出しを完了する)、ジョブが完了します。

router_client.complete_job(job_id = job.id, assignment_id = accept.assignment_id)
print(f"Worker {worker.id} has completed job {accept.job_id}")

ジョブを閉じる

ワーカーが新しいジョブを引き受ける準備ができたら、ワーカーはジョブを閉じる必要があります。 必要に応じて、ワーカーは処理コードを指定してジョブの結果を示すことができます。

router_client.close_job(job_id = job.id, assignment_id = accept.assignment_id, options = CloseJobOptions(disposition_code = "Resolved"))
print(f"Worker {worker.id} has closed job {accept.job_id}")

ジョブを削除する

ジョブが閉じられたら、ジョブを削除して、このサンプルを再度実行した場合に同じ ID でジョブを再作成できるようにします

router_client.delete_job(accept.job_id)
print(f"Deleting {accept.job_id}")

コードの実行

コードを実行するには、router-quickstart.py ファイルがあるディレクトリにいることを確認します。

python router-quickstart.py

Azure Communication Services - Job Router Quickstart
Worker worker-1 has an active offer for job job-1
Worker worker-1 is assigned job job-1
Worker worker-1 has completed job job-1
Worker worker-1 has closed job job-1
Deleting job job-1

Note

アプリケーションを 2 回以上実行すると、新しいジョブは毎回キューに配置されます。 これにより、上記のコードを実行したときに作成されるジョブ以外のジョブがワーカーに提供される可能性があります。 これにより、要求がゆがめられる可能性があるため、キュー内のジョブを毎回削除することを検討してください。 キューまたはジョブの管理については、SDK のドキュメントを参照してください。

リファレンス ドキュメント

Azure Communication Services Job Router が備える全機能については、Python SDK リファレンスまたは REST API リファレンスを参照してください。

前提条件

サンプル コード

このクイック スタートのサンプル コードは、GitHub で確認してダウンロードできます。

設定

新しい Java アプリケーションを作成する

cmd、PowerShell、Bash などのコンソール ウィンドウで mvn コマンドを使用して、新しいコンソール アプリを router-quickstart という名前で作成します。 このコマンドにより、1 つのソース ファイル (App.java) を含む単純な "Hello World" Java プロジェクトが作成されます。

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

パッケージを組み込む

Java バージョン 1.0.0 以降の Azure Communication Job Router クライアント ライブラリを使用する必要があります。

BOM ファイルを含める

azure-sdk-bomをプロジェクトに追加して、ライブラリの一般提供 (GA) バージョンに依存するようにします。 次のスニペットでは、{bom_version_to_target} プレースホルダーをバージョン番号に置き換えます。 BOM の詳細については、 AZURE SDK BOM の readmeを参照してください。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-sdk-bom</artifactId>
            <version>{bom_version_to_target}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

次に、バージョン タグのない依存関係セクションに直接依存関係を含めます。

<dependencies>
  <dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-communication-jobrouter</artifactId>
  </dependency>
</dependencies>

直接依存関係を含める

BOM に存在しない特定のバージョンのライブラリに依存関係を持たせる場合は、次のようにプロジェクトに直接依存関係を追加します。

<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-communication-jobrouter</artifactId>
  <version>1.0.0</version>
</dependency>

アプリのフレームワークを設定する

/src/main/java/com/communication/quickstart ディレクトリに移動し、App.java ファイルを開きます。 次のコードを追加します。

package com.communication.quickstart;

import com.azure.communication.jobrouter.JobRouterAdministrationClient;
import com.azure.communication.jobrouter.JobRouterAdministrationClientBuilder;
import com.azure.communication.jobrouter.JobRouterClient;
import com.azure.communication.jobrouter.JobRouterClientBuilder;
import com.azure.communication.jobrouter.*;
import com.azure.communication.jobrouter.models.*;

import java.time.Duration;
import java.util.List;
import java.util.Map;

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

Job Router クライアントと管理クライアントを初期化する

ジョブ ルーター クライアントは、Azure portal で Azure Communication Services リソースから取得した接続文字列を使用して認証できます。 Job Router サービスと対話するためにクライアントと管理クライアントの両方を生成します。 管理者クライアントはキューとポリシーのプロビジョニングに使用され、クライアントはジョブの送信とワーカーの登録に使用されます。 接続文字列の詳細については、「access-your-connection-strings-and-service-endpoints」を参照してください。

// Get a connection string to our Azure Communication Services resource.
JobRouterAdministrationClient routerAdminClient = new JobRouterAdministrationClientBuilder().connectionString("your_connection_string").buildClient();
JobRouterClient routerClient = new JobRouterClientBuilder().connectionString("your_connection_string").buildClient();

配布ポリシーを作成する

ジョブ ルーターにより、配布ポリシーが使用され、使用可能なジョブと通知の有効期限 (オファーとも呼ばれます) をワーカーに通知する方法が決定されます。 ID名前offerExpiresAfter、配布のモードを指定して、ポリシーを作成します。

DistributionPolicy distributionPolicy = routerAdminClient.createDistributionPolicy(
    new CreateDistributionPolicyOptions("distribution-policy-1", Duration.ofMinutes(1), new LongestIdleMode())
        .setName("My distribution policy"));

キューを作成する

ID名前を指定してキューを作成し、上記で作成した配布ポリシー オブジェクトの ID を指定します。

RouterQueue queue = routerAdminClient.createQueue(
    new CreateQueueOptions("queue-1", distributionPolicy.getId()).setName("My queue")
);

ジョブの送信

これで、ジョブをそのキューに直接送信できます。ワーカー セレクターを使用する場合、ワーカーのラベル Some-Skill が 10 より大きい必要があります。

RouterJob job = routerClient.createJob(new CreateJobOptions("job-1", "voice", queue.getId())
    .setPriority(1)
    .setRequestedWorkerSelectors(List.of(
        new RouterWorkerSelector("Some-Skill", LabelOperator.GREATER_THAN, new RouterValue(10)))));

ワーカーを作成する

ここで、Some-Skill のラベルを 11、容量を my-channel に指定して、そのキューから作業を受け取るワーカーを作成します。

RouterWorker worker = routerClient.createWorker(
    new CreateWorkerOptions("worker-1", 1)
        .setQueues(List.of(queue.getId()))
        .setLabels(Map.of("Some-Skill", new RouterValue(11)))
        .setChannels(List.of(new RouterChannel("voice", 1))));

オファーを受け取る

Event Grid サブスクリプションから RouterWorkerOfferIssued を受け取る必要があります。 ただし、数秒待ってから、JobRouter API に対してワーカーに直接クエリを実行して、オファーが発行されたかどうかを確認することもできます。

Thread.sleep(10000);
worker = routerClient.getWorker(worker.getId());
for (RouterJobOffer offer : worker.getOffers()) {
    System.out.printf("Worker %s has an active offer for job %s\n", worker.getId(), offer.getJobId());
}

ジョブ オファーを受け入れる

その後、ワーカーは SDK を使用してジョブ オファーを受け入れることができ、これにより、ジョブがワーカーに割り当てられます。

AcceptJobOfferResult accept = routerClient.acceptJobOffer(worker.getId(), worker.getOffers().get(0).getOfferId());
System.out.printf("Worker %s is assigned job %s\n", worker.getId(), accept.getJobId());

ジョブを完了する

ワーカーがジョブに関連付けられた作業を完了すると (たとえば、呼び出しを完了する)、ジョブが完了します。

routerClient.completeJobWithResponse(accept.getJobId(), accept.getAssignmentId(), null);
System.out.printf("Worker %s has completed job %s\n", worker.getId(), accept.getJobId());

ジョブを閉じる

ワーカーが新しいジョブを引き受ける準備ができたら、ワーカーはジョブを閉じる必要があります。

routerClient.closeJobWithResponse(accept.getJobId(), accept.getAssignmentId(), null);
System.out.printf("Worker %s has closed job %s\n", worker.getId(), accept.getJobId());

ジョブを削除する

ジョブが閉じられたら、ジョブを削除して、このサンプルを再度実行した場合に同じ ID でジョブを再作成できるようにします

routerClient.deleteJob(accept.getJobId());
System.out.printf("Deleting job %s\n", accept.getJobId());

コードの実行

コードを実行するには、pom.xml ファイルを含むディレクトリに移動し、プログラムをコンパイルします。

mvn compile

次に、パッケージをビルドします

mvn package

アプリを実行する

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

想定される出力には、完了した各アクションが表示されます。

Azure Communication Services - Job Router Quickstart
Worker worker-1 has an active offer for job job-1
Worker worker-1 is assigned job job-1
Worker worker-1 has completed job job-1
Worker worker-1 has closed job job-1
Deleting job job-1

Note

アプリケーションを 2 回以上実行すると、新しいジョブは毎回キューに配置されます。 これにより、上記のコードを実行したときに作成されるジョブ以外のジョブがワーカーに提供される可能性があります。 これにより、要求がゆがめられる可能性があるため、キュー内のジョブを毎回削除することを検討してください。 キューまたはジョブの管理については、SDK のドキュメントを参照してください。

リファレンス ドキュメント

Azure Communication Services Job Router が備える全機能については、Java SDK リファレンスまたは REST API リファレンスを参照してください。

次の手順

Job Router の操作方法に 関する チュートリアル を確認する