sada SDK směrovače úloh Azure Communication Services (ACS) pro JavaScript
Tento balíček obsahuje sadu JavaScript SDK pro službu směrovače úloh Azure Communication Services (ACS).
začínáme
Klíčové koncepty
Pokud chcete lépe porozumět směrovači úloh, přečtěte si dokumentaci ke klíčovým konceptům směrovače úloh.
Požadavky
- Předplatné Azure
- Prostředek Azure Communication Services (ACS).
- Pokud potřebujete vytvořit prostředek služby ACS, můžete použít Azure Portal, Azure PowerShell nebo Azure CLI.
Instalace
npm install @azure/communication-job-router
Podpora prohlížečů
Pokud chcete používat knihovny Sady Azure SDK na webu, musíte kód převést tak, aby fungoval v prohlížeči. Provedete to pomocí nástroje, který se nazývá bundler. Pokud chcete lépe porozumět sdružování, přečtěte si naši dokumentaci k sdružování .
Kurz: Směrování úloh do pracovních procesů pomocí sady 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
Nastavení
(Volitelné) Instalace integrovaného vývojového prostředí (IDE)
Nainstalujte integrované vývojové prostředí (IDE), jako je VSCode nebo Webstorm.
Instalace NodeJS
Nainstalujte NodeJS.
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
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.
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/communication-job-router --save
příkazu .
Úlohy směrování
Klienti směrovačů úloh konstruktoru
Nejprve musíme vytvořit jobRouterAdministrationClient
a jobRouterClient
.
jobRouterAdministrationClient
poskytuje metody pro zásady klasifikace, zásady distribuce, zásady výjimek a fronty.jobRouterClient
poskytuje metody pro úlohy a pracovní procesy.
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);
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 jobRouterAdministrationClient.createDistributionPolicy(
"default-distribution-policy-id",
{
name: "Default Distribution Policy",
offerExpiresAfterSeconds: 30,
mode: {
objectType: "longest-idle",
minConcurrentOffers: 1,
maxConcurrentOffers: 3,
},
}
);
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 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)"
}
});
Vytvoření fronty
Tato fronta nabízí úlohy pracovním procesům podle našich dříve vytvořených zásad distribuce.
const salesQueueResponse = await jobRouterAdministrationClient.createQueue("sales-queue-id", {
name: "Sales",
distributionPolicyId: distributionPolicy.Id,
labels: {
department: "xbox",
},
});
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 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
});
Ž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 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,
});
(Volitelné) Vytvoření úlohy pomocí zásad klasifikace
Tato úloha se klasifikuje pomocí dříve vytvořených zásad klasifikace. Má také popisek.
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",
},
});
Události
Události směrovače úloh se doručují prostřednictvím Azure Event Grid. Pokud chcete lépe porozumět Azure Event Grid, podívejte se do naší dokumentace k Azure Event Grid.
V předchozím příkladu:
- Úloha se začte do fronty Sales.
- Pro zpracování úlohy je vybrán pracovní proces, je mu vystavena nabídka úlohy a
RouterWorkerOfferIssued
událost se odešle prostřednictvím Azure Event Grid.
Příklad RouterWorkerOfferIssued
obrazce 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 jobRouterClient.acceptJobOffer(workerId, offerId);
// or
const declineResponse = await jobRouterClient.declineJobOffer(workerId, offerId);
Dokončení úlohy
K assignmentId
dokončení úlohy se vyžaduje odpověď přijatá z předchozího kroku.
await jobRouterClient.completeJob(jobId, assignmentId);
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í.
await jobRouterClient.closeJob(jobId, assignmentId, { dispositionCode: "Resolved" });
Další kroky
Další podrobné příklady použití této sady SDK najdete v adresáři samples .
Přispívání
Pokud chcete přispět k této sadě SDK, přečtěte si prosím průvodce přispívání , kde se dozvíte více o tom, jak sestavit a otestovat kód.
Související projekty
Azure SDK for JavaScript