Klientská knihovna AZURECommunicationRoutingService REST pro JavaScript
Azure Communication Routing Service
Při používání této knihovny se prosím hodně spolehněte na naše klientské dokumenty REST .
Klíčové odkazy:
Začínáme
Aktuálně podporovaná prostředí
- LtS verze Node.js
Požadavky
- Abyste mohli tento balíček používat, musíte mít předplatné Azure .
Mít prostředek služby ACS
Vytvořte prostředek služby ACS na webu Azure Portal nebo použijte existující prostředek.
Nainstalujte balíček @azure-rest/communication-job-router
.
Nainstalujte klientskou knihovnu REST REST služby AzureCommunicationRoutingService pro JavaScript pomocí npm
příkazu :
npm install @azure-rest/communication-job-router
Vytvoření a ověření AzureCommunicationRoutingServiceClient
Pokud chcete použít přihlašovací údaje tokenu Azure Active Directory (AAD), zadejte instanci požadovaného typu přihlašovacích údajů získané z knihovny @azure/identity .
Pokud se chcete ověřit pomocí AAD, musíte nejprve npm
nainstalovat @azure/identity
Po nastavení můžete zvolit, který typ přihlašovacích údajů se @azure/identity
má použít.
Jako příklad lze k ověření klienta použít DefaultAzureCredential .
Nastavte hodnoty ID klienta, ID tenanta a tajného klíče klienta aplikace AAD jako proměnné prostředí: AZURE_CLIENT_ID, AZURE_TENANT_ID AZURE_CLIENT_SECRET
Kurz: Směrování úloh do pracovních procesů pomocí sady REST SDK směrovače úloh Azure Communication Services (ACS)
V tomto kurzu se dozvíte:
- Postup vytvoření fronty
- Jak vytvořit pracovní procesy a přiřadit je do fronty.
- Jak směrovat úlohy na pracovní procesy.
- Postup přihlášení k odběru a zpracování událostí směrovače úloh
- Postup dokončení a zavření úloh
Spuštění serveru NodeJS Express
V prostředí (cmd, PowerShell, Bash atd.) vytvořte složku s názvem RouterQuickStart
a v této složce spusťte npx express-generator
příkaz . Tím se vygeneruje jednoduchý projekt Express, který bude naslouchat na port 3000
.
Příklad
mkdir RouterQuickStart
cd RouterQuickStart
npx express-generator
npm install
DEBUG=routerquickstart:* npm start
Instalace sady SDK pro směrovač úloh Azure ACS
Do složky RouterQuickStart
nainstalujte sadu SDK pro směrovač úloh služby ACS spuštěním npm install @azure-rest/communication-job-router --save
příkazu .
Úlohy směrování
Vytvoření AzureCommunicationRoutingServiceClient
Nejprve musíme vytvořit AzureCommunicationRoutingServiceClient
objekt .
const JobRouterClient = require("@azure-rest/communication-job-router").default;
const connectionString = "endpoint=https://<YOUR_ACS>.communication.azure.com/;accesskey=<YOUR_ACCESS_KEY>";
const routerClient = JobRouterClient(connectionString);
Vytvoření zásady distribuce
Tato zásada určuje, kteří pracovníci budou dostávat nabídky úloh, když se úlohy distribuují mimo jejich fronty.
const distributionPolicy = await routerClient.path("/routing/distributionPolicies/{id}", "distributionPolicy-1").patch({
contentType: "application/merge-patch+json",
body: {
name: "distribution-policy-123",
offerExpiresAfterSeconds: 30,
mode: {
kind: "longestIdle",
minConcurrentOffers: 1,
maxConcurrentOffers: 3,
},
}
});
Vytvoření fronty
Tato fronta nabízí úlohy pracovním procesům podle našich dříve vytvořených zásad distribuce.
const salesQueueId = "queue-123";
await routerClient.path("/routing/queues/{id}", salesQueueId).patch({
contentType: "application/merge-patch+json",
body: {
distributionPolicyId: distributionPolicy.body.id,
name: "Main",
labels: {},
}
});
Vytvořit pracovní procesy
Tito pracovníci jsou přiřazeni k dříve vytvořené frontě "Prodej" a mají některé popisky.
- nastavení
availableForOffers
znamenátrue
, že tito pracovníci jsou připraveni přijímat nabídky pracovních míst. - Pokud chcete lépe porozumět popiskům a selektorům štítků, přečtěte si naši dokumentaci k popiskům.
// Create worker "Alice".
const workerAliceId = "773accfb-476e-42f9-a202-b211b41a4ea4";
const workerAliceResponse = await routerClient.path("/routing/workers/{workerId}", workerAliceId).patch({
contentType: "application/merge-patch+json",
body: {
capacity: 120,
queues: [salesQueueId],
labels: {
Xbox: 5,
german: 4,
name: "Alice"
},
channels: [
{
channelId: "CustomChatChannel",
capacityCostPerJob: 10,
},
{
channelId: "CustomVoiceChannel",
capacityCostPerJob: 100,
},
],
}
});
// Create worker "Bob".
const workerBobId = "21837c88-6967-4078-86b9-1207821a8392";
const workerBobResponse = await routerClient.path("/routing/workers/{workerId}", workerBobId).patch({
contentType: "application/merge-patch+json",
body: {
capacity: 100,
queues: [salesQueueId],
labels: {
Xbox: 5,
english: 3,
name: "Alice"
},
channels: [
{
channelId: "CustomChatChannel",
capacityCostPerJob: 10,
},
{
channelId: "CustomVoiceChannel",
capacityCostPerJob: 100,
},
],
}
});
Životní cyklus úlohy
Pokud chcete lépe porozumět životnímu cyklu úlohy, přečtěte si naši dokumentaci k životnímu cyklu úlohy.
Vytvoření úlohy
Tato úloha je zařazena do fronty dříve vytvořené fronty Sales.
const jobId = "router-job-123";
const result = await routerClient.path("/routing/jobs/{id}", jobId).patch({
contentType: "application/merge-patch+json",
body: {
channelReference: "66e4362e-aad5-4d71-bb51-448672ebf492",
channelId: "voice",
priority: 2,
queueId: "salesQueueId",
labels: {},
}
});
(Volitelné) Vytvoření úlohy pomocí zásad klasifikace
Vytvoření zásady klasifikace
Tato zásada klasifikuje úlohy při vytváření.
- Pokud chcete lépe porozumět pravidlům stanovení priorit, přečtěte si naši dokumentaci k pravidlům .
const classificationPolicyId = "classification-policy-123";
const result = await routerClient.path("/routing/classificationPolicies/{id}", classificationPolicyId).patch({
contentType: "application/merge-patch+json",
body: {
name: "Default Classification Policy",
fallbackQueueId: salesQueueId,
queueSelectorAttachments: [
{
kind: "static",
queueSelector: { key: "department", labelOperator: "equal", value: "xbox" }
},
],
workerSelectorAttachments: [{
kind: "static",
workerSelector: { key: "english", labelOperator: "greaterThan", value: 5 }
}],
prioritizationRule: {
kind: "expression",
language: "powerFx",
expression: "If(job.department = \"xbox\", 2, 1)"
}
}
});
Vytvoření a klasifikace úlohy
Tato úloha se klasifikuje pomocí dříve vytvořených zásad klasifikace. Má také popisek.
const result = await routerClient.path("/routing/jobs/{id}", jobId).patch({
contentType: "application/merge-patch+json",
body: {
channelReference: "66e4362e-aad5-4d71-bb51-448672ebf492",
channelId: "voice",
classificationPolicyId: classificationPolicy.id,
labels: {
department: "xbox"
},
}
});
``
## Events
Job Router events are delivered via Azure Event Grid. Refer to our [Azure Event Grid documentation](/azure/event-grid/overview) to better understand Azure Event Grid.
In the previous example:
- The job gets enqueued to the “Sales" queue.
- A worker is selected to handle the job, a job offer is issued to that worker, and a `RouterWorkerOfferIssued` event is sent via Azure Event Grid.
Example `RouterWorkerOfferIssued` JSON shape:
```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"
}
Přihlášení k odběru událostí
Jedním ze způsobů, jak se přihlásit k odběru událostí směrovače úloh ACS, je prostřednictvím webu Azure Portal.
- Na webu Azure Portal přejděte k prostředku služby ACS a otevřete okno Události.
- Přidejte odběr události pro událost RouterWorkerOfferIssued.
- Vyberte vhodný způsob přijetí události (např. Webhook, Azure Functions, Service Bus).
Pokud chcete lépe porozumět přihlášení k odběru událostí směrovače úloh, přečtěte si naši dokumentaci k odběru událostí směrovače úloh.
Trasa ve vaší aplikaci NodeJS, která přijímá události, může vypadat přibližně takto:
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 ...
});
...
});
Přijetí nebo odmítnutí nabídky práce
Jakmile obdržíte RouterWorkerOfferIssued
událost, můžete nabídku práce přijmout nebo odmítnout.
workerid
– ID pracovníka, který přijímá nabídku práce.offerId
– ID akceptované nebo odmítnuté nabídky.
const acceptResponse = await routerClient.path("/routing/workers/{workerId}/offers/{offerId}:accept", workerId, offerId).post();
// or
const declineResponse = await routerClient.path("/routing/workers/{workerId}/offers/{offerId}:decline", workerId, offerId).post();
Dokončení úlohy
K assignmentId
dokončení úlohy se vyžaduje odpověď přijatá z předchozího kroku.
const completeJob = await routerClient.path("/routing/jobs/{id}/assignments/{assignmentId}:complete", jobId, acceptResponse.body.assignmentId).post({
body: {
note: `Job has been completed by ${workerId} at ${new Date()}`
}
});
Zavření úlohy
Jakmile pracovní proces dokončí zabalovací fázi úlohy, jobRouterClient
může úlohu zavřít a připojit k ní dispoziční kód pro budoucí použití.
const closeJob = await routerClient.path("/routing/jobs/{id}/assignments/{assignmentId}:close", jobId, acceptResponse.body.assignmentId).post({
body: {
note: `Job has been closed by ${workerId} at ${new Date()}`
}
});
Řešení potíží
protokolování
Povolení protokolování může pomoct odhalit užitečné informace o selháních. Pokud chcete zobrazit protokol požadavků a odpovědí HTTP, nastavte proměnnou AZURE_LOG_LEVEL
prostředí na info
. Případně je možné protokolování povolit za běhu voláním setLogLevel
v :@azure/logger
const { setLogLevel } = require("@azure/logger");
setLogLevel("info");
Podrobnější pokyny k povolení protokolů najdete v dokumentaci k balíčkům @azure/protokolovacího nástroje.
Azure SDK for JavaScript