Azure 通訊服務 (ACS) 作業路由器 SDK for JavaScript
此套件包含適用于 Azure 通訊服務 (ACS) 作業路由器服務的 JavaScript SDK。
開始使用
重要概念
請參閱我們的 作業路由器重要概念檔 ,以進一步瞭解作業路由器。
必要條件
- Azure 訂用帳戶。
- Azure 通訊服務 (ACS) 資源。
- 如果您需要建立 ACS 資源,您可以使用Azure 入口網站、Azure PowerShell或Azure CLI。
安裝
npm install @azure/communication-job-router
瀏覽器支援
若要在網站上使用 Azure SDK 程式庫,您必須轉換程式碼以在瀏覽器內運作。 您可以使用稱為 配套工具的工具來執行這項操作。 請參閱我們的 統合檔 ,以進一步瞭解統合。
教學課程:使用 Azure 通訊服務 (ACS) 作業路由器 SDK 將作業路由傳送至背景工作
在本教學課程中,您將了解:
- 如何建立佇列。
- 如何建立背景工作角色,並將其指派給佇列。
- 如何將作業路由傳送至背景工作。
- 如何訂閱及處理作業路由器事件。
- 如何完成和關閉作業。
設定
(選擇性) 安裝 IDE
安裝 NodeJS
安裝 NodeJS。
啟動 NodeJS Express 伺服器
在殼層 (cmd、PowerShell、Bash 等 ) 中,建立名為 RouterQuickStart
的資料夾,並在此資料夾內執行 npx express-generator
。 這會產生會接聽 的 port 3000
簡單 Express 專案。
範例
mkdir RouterQuickStart
cd RouterQuickStart
npx express-generator
npm install
DEBUG=routerquickstart:* npm start
擁有 ACS 資源
在 Azure 入口網站 中建立 ACS 資源,或使用現有的資源。
安裝 Azure ACS 作業路由器 SDK
在 RouterQuickStart
資料夾中,執行 npm install @azure/communication-job-router --save
來安裝 ACS 作業路由器 SDK。
路由作業
建構作業路由器用戶端
首先,我們需要建構 jobRouterAdministrationClient
和 jobRouterClient
。
jobRouterAdministrationClient
提供分類原則、散發原則、例外狀況原則和佇列的方法。jobRouterClient
提供作業和背景工作的方法。
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);
建立散發原則
此原則會決定哪些背景工作會接收作業供應專案,因為工作會分散到其佇列中。
const distributionPolicy = await jobRouterAdministrationClient.createDistributionPolicy(
"default-distribution-policy-id",
{
name: "Default Distribution Policy",
offerExpiresAfterSeconds: 30,
mode: {
objectType: "longest-idle",
minConcurrentOffers: 1,
maxConcurrentOffers: 3,
},
}
);
建立分類原則
此原則會在建立時分類作業。
- 請參閱我們的 規則檔 ,以進一步瞭解優先順序規則。
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)"
}
});
建立佇列
此佇列會根據我們先前建立的散發原則,為背景工作提供工作。
const salesQueueResponse = await jobRouterAdministrationClient.createQueue("sales-queue-id", {
name: "Sales",
distributionPolicyId: distributionPolicy.Id,
labels: {
department: "xbox",
},
});
建立背景工作角色
這些背景工作角色會指派給我們先前建立的「銷售」佇列,並具有一些標籤。
- 設定
availableForOffers
為true
表示這些工作者已準備好接受作業供應專案。 - 請參閱我們的 標籤檔 ,以進一步瞭解標籤和標籤選取器。
// 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
});
作業生命週期
請參閱我們的 作業生命週期檔 ,以進一步瞭解作業的生命週期。
建立作業
此作業會加入我們先前建立的「銷售」佇列。
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,
});
(選擇性) 使用分類原則建立作業
此作業將會使用我們先前建立的分類原則進行分類。 它也具有標籤。
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",
},
});
事件
作業路由器事件會透過Azure 事件方格傳遞。 請參閱我們的Azure 事件方格檔,以進一步瞭解Azure 事件方格。
在上述範例中︰
- 作業會排入佇列至 「Sales」 佇列。
- 系統會選取一個背景工作角色來處理作業、發出作業供應專案給該背景工作角色,並
RouterWorkerOfferIssued
透過Azure 事件方格傳送事件。
範例 RouterWorkerOfferIssued
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"
}
訂閱事件
訂閱 ACS 作業路由器事件的其中一種方式是透過 Azure 入口網站。
- 在 Azure 入口網站中流覽至您的 ACS 資源,然後開啟 [事件] 刀鋒視窗。
- 新增 「RouterWorkerOfferIssued」 事件的事件訂用帳戶。
- 選取適當的方法來接收事件 (,例如 Webhook、Azure Functions、服務匯流排) 。
請參閱我們的 「訂閱作業路由器事件」檔 ,以進一步瞭解訂閱作業路由器事件。
接收事件的 NodeJS 應用程式中的路由看起來可能會像這樣:
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 ...
});
...
});
接受或拒絕作業供應專案
收到 RouterWorkerOfferIssued
事件後,您可以接受或拒絕作業供應專案。
workerid
- 接受作業供應專案的背景工作識別碼。offerId
- 要接受或拒絕之供應專案的識別碼。
const acceptResponse = await jobRouterClient.acceptJobOffer(workerId, offerId);
// or
const declineResponse = await jobRouterClient.declineJobOffer(workerId, offerId);
完成作業
assignmentId
需要從上一個步驟的回應接收,才能完成作業。
await jobRouterClient.completeJob(jobId, assignmentId);
關閉作業
一旦背景工作完成作業的包裝階段, jobRouterClient
就可以關閉作業,並將處置程式碼附加至該作業以供日後參考。
await jobRouterClient.closeJob(jobId, assignmentId, { dispositionCode: "Resolved" });
下一步
請查看 範例 目錄,以取得使用此 SDK 的其他詳細範例。
參與
如果您想要參與此 SDK,請閱讀 參與指南 以深入瞭解如何建置及測試程式碼。