Bagikan melalui


Mulai Cepat: Mengirimkan Pekerjaan untuk antrean dan perutean

Mulai menggunakan Azure Communication Services Job Router dengan menyiapkan klien Anda, lalu mengonfigurasi fungsionalitas inti seperti antrean, kebijakan, pekerja, dan Pekerjaan. Untuk mempelajari konsep Perute Pekerjaan lebih lanjut, kunjungi dokumen konseptual Perute Pekerjaan

Prasyarat

Kode Sampel

Anda dapat meninjau dan mengunduh kode sampel untuk mulai cepat ini di GitHub.

Menyiapkan

Membuat aplikasi C# baru

Di jendela konsol (seperti cmd, PowerShell, atau Bash), gunakan perintah dotnet new untuk membuat aplikasi konsol baru dengan nama JobRouterQuickstart. Perintah ini membuat proyek C# "Halo Dunia" sederhana dengan file sumber tunggal: Program.cs.

dotnet new console -o JobRouterQuickstart

Ubah direktori Anda ke folder aplikasi yang baru dibuat dan gunakan perintah dotnet build untuk mengompilasi aplikasi Anda.

cd JobRouterQuickstart
dotnet build

Pasang paket

Instal pustaka klien Azure Communication Job Router untuk .NET dengan NuGet:

dotnet add package Azure.Communication.JobRouter

Anda harus menggunakan pustaka klien Azure Communication Job Router untuk .NET versi 1.0.0 atau lebih tinggi.

Tambahkan direktif using ke bagian atas Program.cs untuk menyertakan namespace layanan Perute Pekerjaan.

using Azure.Communication.JobRouter;

Menginisialisasi klien Job Router dan klien administrasi

Klien Perute Pekerjaan dapat diautentikasi menggunakan string koneksi Anda yang diperoleh dari sumber daya Azure Communication Services di portal Microsoft Azure. Kami menghasilkan klien dan klien administrasi untuk berinteraksi dengan layanan Job Router. Klien admin digunakan untuk menyediakan antrean dan kebijakan, sementara klien digunakan untuk mengirimkan pekerjaan dan mendaftarkan pekerja. Untuk informasi selengkapnya tentang string koneksi, lihat titik akhir 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");

Membuat kebijakan distribusi

Perute Pekerjaan menggunakan kebijakan distribusi untuk memutuskan cara pemberitahuan kepada Pekerja mengenai Pekerjaan yang tersedia dan waktu aktif pemberitahuan, yang dikenal sebagai Penawaran. Buat kebijakan dengan menentukan ID, nama, offerExpiresAfter, dan mode distribusi.

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

Membuat antrean

Buat Antrean menentukan ID, nama, dan berikan ID objek Kebijakan Distribusi yang telah Anda buat di atas.

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

Mengirim pekerjaan

Sekarang, kita dapat mengirimkan pekerjaan langsung ke antrean tersebut, dengan pemilih pekerja yang mengharuskan pekerja memiliki label Some-Skill yang lebih besar dari 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))
        }
    });

Membuat pekerja

Sekarang, kita membuat pekerja untuk menerima pekerjaan dari antrean itu, dengan label Some-Skill yang sama dengan 11 dan kapasitas pada 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
    });

Menerima penawaran

Kita harus mendapatkan RouterWorkerOfferIssued dari langganan Event Grid kita. Namun, kita juga dapat menunggu beberapa detik dan kemudian mengkueri pekerja secara langsung terhadap API JobRouter untuk melihat apakah penawaran dikeluarkan untuk itu.

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

Terima penawaran pekerjaan

Kemudian, pekerja dapat menerima penawaran pekerjaan dengan menggunakan SDK, yang menetapkan pekerjaan kepada pekerja.

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

Menyelesaikan pekerjaan

Setelah pekerja menyelesaikan pekerjaan yang terkait dengan pekerjaan (misalnya, menyelesaikan panggilan), kami menyelesaikan pekerjaan.

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

Tutup pekerjaan

Setelah pekerja siap untuk mengambil pekerjaan baru, pekerja harus menutup pekerjaan. Secara opsional, pekerja dapat memberikan kode disposisi untuk menunjukkan hasil pekerjaan.

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

Menghapus pekerjaan

Setelah pekerjaan ditutup, kita dapat menghapus pekerjaan sehingga kita dapat membuat ulang pekerjaan dengan ID yang sama jika kita menjalankan sampel ini lagi

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

Menjalankan kode

Jalankan aplikasi menggunakan dotnet run dan perhatikan hasilnya.

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

Catatan

Setiap kali Anda menjalankan aplikasi lebih dari sekali, maka Pekerjaan yang baru akan ditempatkan di antrean. Tindakan ini dapat menyebabkan Pekerja ditawari Pekerjaan yang berbeda dari yang telah dibuat saat Anda menjalankan kode di atas. Karena ini dapat membuat condong permintaan Anda, mempertimbangkan untuk menghapus Pekerjaan dalam antrean setiap kali. Lihat dokumentasi SDK tentang cara mengelola Antrean atau Pekerjaan.

Dokumentasi rujukan

Baca tentang serangkaian kemampuan lengkap Azure Communication Services Job Router dari referensi .NET SDK atau referensi REST API.

Prasyarat

Kode Sampel

Anda dapat meninjau dan mengunduh kode sampel untuk mulai cepat ini di GitHub.

Menyiapkan

Membuat aplikasi web baru

Di jendela terminal atau konsol, buat folder baru untuk aplikasi Anda dan navigasikan ke dalamnya.

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

Jalankan npm init untuk membuat file package.json dengan pengaturan default.

npm init -y

Buat file index.js baru tempat Anda akan menambahkan kode untuk mulai cepat ini.

Menginstal paket

Anda harus menggunakan pustaka klien Azure Communication Job Router untuk JavaScript versi 1.0.0 atau lebih tinggi.

Gunakan perintah npm install untuk menginstal Communication Services SDK untuk JavaScript di bawah.

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

Menyiapkan kerangka kerja aplikasi

Dalam file index.js, tambahkan kode berikut. Kita akan menambahkan kode untuk mulai cepat dalam main fungsi.

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

Menginisialisasi klien Job Router

Klien Perute Pekerjaan dapat diautentikasi menggunakan string koneksi Anda yang diperoleh dari sumber daya Azure Communication Services di portal Microsoft Azure. Kami menghasilkan klien untuk berinteraksi dengan layanan Job Router. Untuk informasi selengkapnya tentang string koneksi, lihat titik akhir access-your-connection-strings-and-service-endpoints.

Tambahkan kode berikut di dalam index.jsmain fungsi .

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

Membuat kebijakan distribusi

Job Router menggunakan kebijakan distribusi untuk memutuskan bagaimana pekerja diberi tahu tentang Pekerjaan yang tersedia dan waktu hidup untuk pemberitahuan, yang dikenal sebagai Penawaran. Buat kebijakan dengan menentukan Id, nama, offerExpiresAfterSeconds, dan mode distribusi.

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

Membuat antrean

Buat Antrean menentukan ID, nama, dan berikan ID objek Kebijakan Distribusi yang telah Anda buat di atas.

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

Mengirim pekerjaan

Sekarang, kita dapat mengirimkan pekerjaan langsung ke antrean tersebut, dengan pemilih pekerja yang mengharuskan pekerja memiliki label Some-Skill yang lebih besar dari 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"
});

Membuat pekerja

Sekarang, kita membuat pekerja untuk menerima pekerjaan dari antrean itu, dengan label Some-Skill yang sama dengan 11 dan kapasitas pada 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"
});

Menerima penawaran

Kita harus mendapatkan RouterWorkerOfferIssued dari langganan Event Grid kita. Namun, kita juga dapat menunggu beberapa detik dan kemudian mengkueri pekerja secara langsung terhadap API JobRouter untuk melihat apakah penawaran dikeluarkan untuk itu.

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

Terima penawaran pekerjaan

Kemudian, pekerja dapat menerima penawaran pekerjaan dengan menggunakan SDK, yang menetapkan pekerjaan kepada pekerja.

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

Menyelesaikan pekerjaan

Setelah pekerja menyelesaikan pekerjaan yang terkait dengan pekerjaan (misalnya, menyelesaikan panggilan), kami menyelesaikan pekerjaan.

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

Tutup pekerjaan

Setelah pekerja siap untuk mengambil pekerjaan baru, pekerja harus menutup pekerjaan. Secara opsional, pekerja dapat memberikan kode disposisi untuk menunjukkan hasil pekerjaan.

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

Menghapus pekerjaan

Setelah pekerjaan ditutup, kita dapat menghapus pekerjaan sehingga kita dapat membuat ulang pekerjaan dengan ID yang sama jika kita menjalankan sampel ini lagi

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

Menjalankan kode

Untuk menjalankan kode, pastikan Anda berada di direktori tempat file Anda index.js berada.

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

Catatan

Setiap kali Anda menjalankan aplikasi lebih dari sekali, maka Pekerjaan yang baru akan ditempatkan di antrean. Tindakan ini dapat menyebabkan Pekerja ditawari Pekerjaan yang berbeda dari yang telah dibuat saat Anda menjalankan kode di atas. Karena ini dapat membuat condong permintaan Anda, mempertimbangkan untuk menghapus Pekerjaan dalam antrean setiap kali. Lihat dokumentasi SDK tentang cara mengelola Antrean atau Pekerjaan.

Dokumentasi rujukan

Baca tentang serangkaian kemampuan lengkap Azure Communication Services Job Router dari referensi JavaScript SDK atau referensi REST API.

Prasyarat

Kode Sampel

Anda dapat meninjau dan mengunduh kode sampel untuk mulai cepat ini di GitHub.

Menyiapkan

Membuat aplikasi Python baru

Di jendela terminal atau konsol, buat folder baru untuk aplikasi Anda dan navigasikan ke dalamnya.

mkdir jobrouter-quickstart && cd jobrouter-quickstart

Pasang paket

Anda harus menggunakan pustaka klien Azure Communication Job Router untuk Python versi 1.0.0 atau lebih tinggi.

Dari prompt konsol, jalankan perintah berikut:

pip install azure-communication-jobrouter

Menyiapkan kerangka kerja aplikasi

Buat file baru yang disebut router-quickstart.py dan tambahkan struktur program dasar.

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

Menginisialisasi klien Job Router dan klien administrasi

Klien Perute Pekerjaan dapat diautentikasi menggunakan string koneksi Anda yang diperoleh dari sumber daya Azure Communication Services di portal Microsoft Azure. Kami menghasilkan klien dan klien administrasi untuk berinteraksi dengan layanan Job Router. Klien admin digunakan untuk menyediakan antrean dan kebijakan, sementara klien digunakan untuk mengirimkan pekerjaan dan mendaftarkan pekerja. Untuk informasi selengkapnya tentang string koneksi, lihat titik akhir 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")

Membuat kebijakan distribusi

Perute Pekerjaan menggunakan kebijakan distribusi untuk memutuskan cara pemberitahuan kepada Pekerja mengenai Pekerjaan yang tersedia dan waktu aktif pemberitahuan, yang dikenal sebagai Penawaran. Buat kebijakan dengan menentukan distribution_policy_id, nama, nilai offer_expires_after_seconds, dan mode distribusi.

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

Membuat antrean

Buat Antrean menentukan ID, nama, dan berikan ID objek Kebijakan Distribusi yang telah Anda buat di atas.

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

Mengirim pekerjaan

Sekarang, kita dapat mengirimkan pekerjaan langsung ke antrean tersebut, dengan pemilih pekerja yang mengharuskan pekerja memiliki label Some-Skill yang lebih besar dari 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
        )
    ])

Membuat pekerja

Sekarang, kita membuat pekerja untuk menerima pekerjaan dari antrean itu, dengan label Some-Skill yang sama dengan 11 dan kapasitas pada 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
)

Menerima penawaran

Kita harus mendapatkan RouterWorkerOfferIssued dari langganan Event Grid kita. Namun, kita juga dapat menunggu beberapa detik dan kemudian mengkueri pekerja secara langsung terhadap API JobRouter untuk melihat apakah penawaran dikeluarkan untuk itu.

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

Terima penawaran pekerjaan

Kemudian, pekerja dapat menerima penawaran pekerjaan dengan menggunakan SDK, yang menetapkan pekerjaan kepada pekerja.

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

Menyelesaikan pekerjaan

Setelah pekerja menyelesaikan pekerjaan yang terkait dengan pekerjaan (misalnya, menyelesaikan panggilan), kami menyelesaikan pekerjaan.

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

Tutup pekerjaan

Setelah pekerja siap untuk mengambil pekerjaan baru, pekerja harus menutup pekerjaan. Secara opsional, pekerja dapat memberikan kode disposisi untuk menunjukkan hasil pekerjaan.

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

Menghapus pekerjaan

Setelah pekerjaan ditutup, kita dapat menghapus pekerjaan sehingga kita dapat membuat ulang pekerjaan dengan ID yang sama jika kita menjalankan sampel ini lagi

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

Menjalankan kode

Untuk menjalankan kode, pastikan Anda berada di direktori tempat file Anda router-quickstart.py berada.

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

Catatan

Setiap kali Anda menjalankan aplikasi lebih dari sekali, maka Pekerjaan yang baru akan ditempatkan di antrean. Tindakan ini dapat menyebabkan Pekerja ditawari Pekerjaan yang berbeda dari yang telah dibuat saat Anda menjalankan kode di atas. Karena ini dapat membuat condong permintaan Anda, mempertimbangkan untuk menghapus Pekerjaan dalam antrean setiap kali. Lihat dokumentasi SDK tentang cara mengelola Antrean atau Pekerjaan.

Dokumentasi rujukan

Baca tentang serangkaian kemampuan lengkap Azure Communication Services Job Router dari referensi Python SDK atau referensi REST API.

Prasyarat

Kode Sampel

Anda dapat meninjau dan mengunduh kode sampel untuk mulai cepat ini di GitHub.

Menyiapkan

Membuat aplikasi Java baru

Di jendela konsol (seperti cmd, PowerShell, atau Bash), gunakan perintah di mvn bawah ini untuk membuat aplikasi konsol baru dengan nama router-quickstart. Perintah ini membuat proyek Java "Halo Dunia" sederhana dengan satu file sumber: App.java.

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

Sertakan paket

Anda harus menggunakan pustaka klien Azure Communication Job Router untuk Java versi 1.0.0 atau lebih tinggi.

Sertakan file BOM

Sertakan azure-sdk-bom ke proyek Anda untuk mengambil dependensi pada versi Ketersediaan Umum (GA) pustaka. Dalam cuplikan berikut, ganti tempat penampung {bom_version_to_target} dengan nomor versi. Untuk mempelajari selengkapnya tentang BOM, lihat readme BOM Azure SDK.

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

lalu sertakan dependensi langsung di bagian dependensi tanpa tag versi.

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

Sertakan dependensi langsung

Jika Anda ingin mengambil dependensi pada versi pustaka tertentu yang tidak ada di BOM, tambahkan dependensi langsung ke proyek Anda sebagai berikut.

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

Menyiapkan kerangka kerja aplikasi

Buka direktori /src/main/java/com/communication/quickstart dan buka App.java file. Tambahkan kode berikut:

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

Menginisialisasi klien Job Router dan klien administrasi

Klien Perute Pekerjaan dapat diautentikasi menggunakan string koneksi Anda yang diperoleh dari sumber daya Azure Communication Services di portal Microsoft Azure. Kami menghasilkan klien dan klien administrasi untuk berinteraksi dengan layanan Job Router. Klien admin digunakan untuk menyediakan antrean dan kebijakan, sementara klien digunakan untuk mengirimkan pekerjaan dan mendaftarkan pekerja. Untuk informasi selengkapnya tentang string koneksi, lihat titik akhir 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();

Membuat kebijakan distribusi

Perute Pekerjaan menggunakan kebijakan distribusi untuk memutuskan cara pemberitahuan kepada Pekerja mengenai Pekerjaan yang tersedia dan waktu aktif pemberitahuan, yang dikenal sebagai Penawaran. Buat kebijakan dengan menentukan ID, nama, offerExpiresAfter, dan mode distribusi.

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

Membuat antrean

Buat Antrean menentukan ID, nama, dan berikan ID objek Kebijakan Distribusi yang telah Anda buat di atas.

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

Mengirim pekerjaan

Sekarang, kita dapat mengirimkan pekerjaan langsung ke antrean tersebut, dengan pemilih pekerja yang mengharuskan pekerja memiliki label Some-Skill yang lebih besar dari 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)))));

Membuat pekerja

Sekarang, kita membuat pekerja untuk menerima pekerjaan dari antrean itu, dengan label Some-Skill yang sama dengan 11 dan kapasitas pada 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))));

Menerima penawaran

Kita harus mendapatkan RouterWorkerOfferIssued dari langganan Event Grid kita. Namun, kita juga dapat menunggu beberapa detik dan kemudian mengkueri pekerja secara langsung terhadap API JobRouter untuk melihat apakah penawaran dikeluarkan untuk itu.

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

Terima penawaran pekerjaan

Kemudian, pekerja dapat menerima penawaran pekerjaan dengan menggunakan SDK, yang menetapkan pekerjaan kepada pekerja.

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

Menyelesaikan pekerjaan

Setelah pekerja menyelesaikan pekerjaan yang terkait dengan pekerjaan (misalnya, menyelesaikan panggilan), kami menyelesaikan pekerjaan.

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

Tutup pekerjaan

Setelah pekerja siap untuk mengambil pekerjaan baru, pekerja harus menutup pekerjaan.

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

Menghapus pekerjaan

Setelah pekerjaan ditutup, kita dapat menghapus pekerjaan sehingga kita dapat membuat ulang pekerjaan dengan ID yang sama jika kita menjalankan sampel ini lagi

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

Menjalankan kode

Untuk menjalankan kode, buka direktori yang berisi pom.xml file dan kompilasi program.

mvn compile

Kemudian, buat paket:

mvn package

Menjalankan aplikasi

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

Output yang diharapkan menjelaskan setiap tindakan yang diselesaikan:

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

Catatan

Setiap kali Anda menjalankan aplikasi lebih dari sekali, maka Pekerjaan yang baru akan ditempatkan di antrean. Tindakan ini dapat menyebabkan Pekerja ditawari Pekerjaan yang berbeda dari yang telah dibuat saat Anda menjalankan kode di atas. Karena ini dapat membuat condong permintaan Anda, mempertimbangkan untuk menghapus Pekerjaan dalam antrean setiap kali. Lihat dokumentasi SDK tentang cara mengelola Antrean atau Pekerjaan.

Dokumentasi rujukan

Baca tentang serangkaian kemampuan lengkap Azure Communication Services Job Router dari referensi Java SDK atau referensi REST API.

Langkah berikutnya

Menjelajahi tutorial Panduan Perute Pekerjaan