Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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
- Langganan Azure.
- Sumber daya Azure Communication Services (ACS).
- Jika Anda perlu membuat sumber daya ACS, Anda dapat menggunakan Portal Microsoft Azure, Azure PowerShell, atau Azure CLI.
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.
jobRouterAdministrationClientmenyediakan metode untuk Kebijakan Klasifikasi, Kebijakan Distribusi, Kebijakan Pengecualian, dan Antrean.jobRouterClientmenyediakan 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.
- Lihat dokumentasi aturan kami untuk lebih memahami aturan prioritas.
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
availableForOffersketrueberarti 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
RouterWorkerOfferIssuedperistiwa 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.
- Navigasikan ke sumber daya ACS Anda di Portal Microsoft Azure dan buka bilah "Peristiwa".
- Tambahkan langganan peristiwa untuk peristiwa "RouterWorkerOfferIssued".
- 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.
Proyek terkait
Azure SDK for JavaScript