Bagikan melalui


Azure Communication Services (ACS) Job Router SDK untuk JavaScript

Paket ini berisi JavaScript SDK untuk Layanan Router Pekerjaan Azure Communication Services (ACS).

Memulai

Konsep utama

Lihat dokumentasi konsep utama Job Router kami untuk lebih memahami Job Router.

Prasyarat

Menginstal

npm install @azure/communication-job-router

Dukungan browser

Untuk menggunakan pustaka Azure SDK di situs web, Anda perlu mengonversi kode Anda agar berfungsi di dalam browser. Anda melakukan ini menggunakan alat yang disebut bundler. Lihat dokumentasi bundling kami untuk lebih memahami bundling.

Tutorial: Merutekan pekerjaan ke pekerja menggunakan SDK Job Router Azure Communication Services (ACS)

Dalam tutorial ini, Anda akan mempelajari:

  • Cara membuat antrean.
  • Cara membuat pekerja dan menetapkannya ke antrean.
  • Cara merutekan pekerjaan ke pekerja.
  • Cara berlangganan dan menangani peristiwa Job Router.
  • Cara menyelesaikan dan menutup pekerjaan.

Menyiapkan

(Opsional) Menginstal IDE

Instal IDE seperti VSCode atau Webstorm.

Menginstal NodeJS

Instal NodeJS.

Memulai server NodeJS Express

Dalam shell (cmd, PowerShell, Bash, dll.), buat folder yang disebut RouterQuickStart dan di dalam folder ini jalankan npx express-generator. Ini akan menghasilkan proyek Ekspres sederhana yang akan mendengarkan di port 3000.

Contoh

mkdir RouterQuickStart
cd RouterQuickStart
npx express-generator
npm install
DEBUG=routerquickstart:* npm start

Memiliki Sumber Daya ACS

Buat sumber daya ACS di Portal Microsoft Azure atau gunakan sumber daya yang sudah ada.

Menginstal SDK Router Pekerjaan Azure ACS

RouterQuickStart Di folder , instal ACS Job Router SDK dengan mengeksekusi npm install @azure/communication-job-router --save.

Pekerjaan Perutean

Membangun Klien Router Pekerjaan

Pertama kita perlu membuat jobRouterAdministrationClient dan jobRouterClient.

  • jobRouterAdministrationClient menyediakan metode untuk Kebijakan Klasifikasi, Kebijakan Distribusi, Kebijakan Pengecualian, dan Antrean.
  • jobRouterClient menyediakan metode untuk Pekerjaan dan Pekerja.
const {
  JobRouterClient,
  JobRouterAdministrationClient,
} = require("@azure/communication-job-router");

const acsConnectionString =
  "endpoint=https://<YOUR_ACS>.communication.azure.com/;accesskey=<YOUR_ACCESS_KEY>";
const jobRouterClient = new JobRouterClient(acsConnectionString);
const jobRouterAdministrationClient = new JobRouterAdministrationClient(acsConnectionString);

Membuat Kebijakan Distribusi

Kebijakan ini menentukan pekerja mana yang akan menerima penawaran pekerjaan karena pekerjaan didistribusikan dari antrean mereka.

const distributionPolicy = await jobRouterAdministrationClient.createDistributionPolicy(
  "default-distribution-policy-id",
  {
    name: "Default Distribution Policy",
    offerExpiresAfterSeconds: 30,
    mode: {
      objectType: "longest-idle",
      minConcurrentOffers: 1,
      maxConcurrentOffers: 3,
    },
  }
);

Membuat Kebijakan Klasifikasi

Kebijakan ini mengklasifikasikan pekerjaan setelah pembuatan.

const classificationPolicy = await jobRouterAdministrationClient.createClassificationPolicy("default-classification-policy-id", {
  name: "Default Classification Policy",
  fallbackQueueId: salesQueueResponse.Id,
  queueSelectors: [{
    kind: "static",
    labelSelector: { key: "department", labelOperator: "equal", value: "xbox" }
  }],
  workerSelectors: [{
    kind: "static",
    labelSelector: { key: "english", labelOperator: "greaterThan", value: 5 }
  }],
  prioritizationRule: {
    kind: "expression-rule",
    language: "powerFx";
    expression: "If(job.department = \"xbox\", 2, 1)"
  }
});

Membuat Antrean

Antrean ini menawarkan pekerjaan kepada pekerja sesuai dengan kebijakan distribusi yang dibuat sebelumnya.

const salesQueueResponse = await jobRouterAdministrationClient.createQueue("sales-queue-id", {
  name: "Sales",
  distributionPolicyId: distributionPolicy.Id,
  labels: {
    department: "xbox",
  },
});

Membuat Pekerja

Pekerja ini ditetapkan ke antrean "Penjualan" yang dibuat sebelumnya dan memiliki beberapa label.

  • pengaturan availableForOffers ke true berarti pekerja ini siap untuk menerima penawaran pekerjaan.
  • lihat dokumentasi label kami untuk lebih memahami label dan pemilih label.
  // Create worker "Alice".
  const workerAliceId = "773accfb-476e-42f9-a202-b211b41a4ea4";
  const workerAliceResponse = await jobRouterClient.createWorker(workerAliceId, {
    totalCapacity: 120,
    labels: {
      Xbox: 5,
      german: 4
      name: "Alice",
    },
    queueAssignments: { [salesQueueResponse.Id]: {} },
    availableForOffers: true
  });

// Create worker "Bob".
const workerBobId = "21837c88-6967-4078-86b9-1207821a8392";
const workerBobResponse = await jobRouterClient.createWorker(workerBobId, {
  totalCapacity: 100,
  labels: {
    xbox: 5,
    english: 3
    name: "Bob"
  },
  queueAssignments: { [salesQueueResponse]: {} },
  availableForOffers: true
});

Siklus Hidup Pekerjaan

Lihat dokumentasi siklus hidup pekerjaan kami untuk lebih memahami siklus hidup pekerjaan.

Membuat Pekerjaan

Pekerjaan ini diantrekan pada antrean "Penjualan" yang dibuat sebelumnya.

const job = await jobRouterClient.createJob("job-id", {
  // e.g. callId or chat threadId
  channelReference: "66e4362e-aad5-4d71-bb51-448672ebf492",
  channelId: "voice",
  priority: 2,
  queueId: salesQueueResponse.Id,
});

(Opsional) Membuat Pekerjaan Dengan Kebijakan Klasifikasi

Pekerjaan ini akan diklasifikasikan dengan kebijakan klasifikasi yang dibuat sebelumnya. Ini juga memiliki label.

const classificationJob = await JobRouterClient.createJob("classification-job-id", {
  // e.g. callId or chat threadId
  channelReference: "66e4362e-aad5-4d71-bb51-448672ebf492",
  channelId: "voice",
  classificationPolicyId: classificationPolicy.Id,
  labels: {
    department: "xbox",
  },
});

Acara

Peristiwa Job Router dikirimkan melalui Azure Event Grid. Lihat dokumentasi Azure Event Grid kami untuk lebih memahami Azure Event Grid.

Dalam contoh sebelumnya:

  • Pekerjaan akan diantrekan ke antrean "Penjualan".
  • Pekerja dipilih untuk menangani pekerjaan, penawaran pekerjaan dikeluarkan untuk pekerja tersebut, dan RouterWorkerOfferIssued peristiwa dikirim melalui Azure Event Grid.

Contoh RouterWorkerOfferIssued bentuk JSON:

{
  "id": "1027db4a-17fe-4a7f-ae67-276c3120a29f",
  "topic": "/subscriptions/{subscription-id}/resourceGroups/{group-name}/providers/Microsoft.Communication/communicationServices/{communication-services-resource-name}",
  "subject": "worker/{worker-id}/job/{job-id}",
  "data": {
    "workerId": "w100",
    "jobId": "7f1df17b-570b-4ae5-9cf5-fe6ff64cc712",
    "channelReference": "test-abc",
    "channelId": "FooVoiceChannelId",
    "queueId": "625fec06-ab81-4e60-b780-f364ed96ade1",
    "offerId": "525fec06-ab81-4e60-b780-f364ed96ade1",
    "offerTimeUtc": "2023-08-17T02:43:30.3847144Z",
    "expiryTimeUtc": "2023-08-17T02:44:30.3847674Z",
    "jobPriority": 5,
    "jobLabels": {
      "Locale": "en-us",
      "Segment": "Enterprise",
      "Token": "FooToken"
    },
    "jobTags": {
      "Locale": "en-us",
      "Segment": "Enterprise",
      "Token": "FooToken"
    }
  },
  "eventType": "Microsoft.Communication.RouterWorkerOfferIssued",
  "dataVersion": "1.0",
  "metadataVersion": "1",
  "eventTime": "2023-08-17T00:55:25.1736293Z"
}

Berlangganan Peristiwa

Salah satu cara untuk berlangganan peristiwa ACS Job Router adalah melalui Portal Microsoft Azure.

  1. Navigasikan ke sumber daya ACS Anda di Portal Microsoft Azure dan buka bilah "Peristiwa".
  2. Tambahkan langganan peristiwa untuk peristiwa "RouterWorkerOfferIssued".
  3. Pilih sarana yang sesuai untuk menerima peristiwa (misalnya Webhook, Azure Functions, Bus Layanan).

Lihat dokumentasi "berlangganan peristiwa Job Router" kami untuk lebih memahami berlangganan peristiwa Job Router.

Rute di aplikasi NodeJS Anda yang menerima peristiwa mungkin terlihat seperti ini:

app.post('/event', (req, res) => {
    req.body.forEach(eventGridEvent => {
        // Deserialize the event data into the appropriate type
        if (eventGridEvent.eventType === "Microsoft.EventGrid.SubscriptionValidationEvent") {
            res.send({ validationResponse: eventGridEvent.data.validationCode };
        } else if (eventGridEvent.eventType === "Microsoft.Azure.CommunicationServices.RouterWorkerOfferIssued") {
           // RouterWorkerOfferIssued handling logic;
        } else if ...
    });
    ...
});

Menerima atau Menolak Penawaran Pekerjaan

Setelah menerima RouterWorkerOfferIssued acara, Anda dapat menerima atau menolak penawaran pekerjaan.

  • workerid - Id pekerja yang menerima penawaran pekerjaan.
  • offerId - Id penawaran yang diterima atau ditolak.
const acceptResponse = await jobRouterClient.acceptJobOffer(workerId, offerId);
// or
const declineResponse = await jobRouterClient.declineJobOffer(workerId, offerId);

Menyelesaikan Pekerjaan

Respons assignmentId yang diterima dari langkah sebelumnya diperlukan untuk menyelesaikan pekerjaan.

await jobRouterClient.completeJob(jobId, assignmentId);

Tutup Pekerjaan

Setelah pekerja menyelesaikan fase pembungkusan pekerjaan jobRouterClient , dapat menutup pekerjaan dan melampirkan kode disposisi ke sana untuk referensi di masa mendatang.

await jobRouterClient.closeJob(jobId, assignmentId, { dispositionCode: "Resolved" });

Langkah berikutnya

Lihat direktori sampel untuk contoh terperinci tambahan dalam menggunakan SDK ini.

Berkontribusi

Jika Anda ingin berkontribusi pada SDK ini, baca panduan berkontribusi untuk mempelajari selengkapnya tentang cara membuat dan menguji kode.