Azure Communication Services (ACS) Job Router SDK för JavaScript
Det här paketet innehåller JavaScript SDK för tjänsten Azure Communication Services (ACS) Job Router.
Komma igång
Viktiga begrepp
Mer information om jobbrouter finns i dokumentationen om nyckelbegrepp för jobbrouter .
Förutsättningar
- En Azure-prenumeration.
- En Azure Communication Services resurs (ACS).
- Om du behöver skapa en ACS-resurs kan du använda Azure-portalen, Azure PowerShell eller Azure CLI.
Installation
npm install @azure/communication-job-router
Stöd för webbläsare
Om du vill använda Azure SDK-bibliotek på en webbplats måste du konvertera koden så att den fungerar i webbläsaren. Du gör detta med hjälp av ett verktyg som kallas bundler. Mer information om paketering finns i vår paketeringsdokumentation .
Självstudie: Dirigera jobb till arbetare med hjälp av jobbrouter-SDK för Azure Communication Services (ACS)
I den här kursen lär du dig:
- Så här skapar du en kö.
- Hur du skapar arbetare och tilldelar dem till en kö.
- Hur du dirigerar jobb till arbetare.
- Så här prenumererar du på och hanterar jobbrouterhändelser.
- Så här slutför och stänger du jobb.
Inrätta
(Valfritt) Installera en IDE
Installera en IDE som VSCode eller Webstorm.
Installera NodeJS
Installera NodeJS.
Starta en NodeJS Express-server
I ett gränssnitt (cmd, PowerShell, Bash osv.) skapar du en mapp med namnet RouterQuickStart
och i den här mappen kör du npx express-generator
. Detta genererar ett enkelt Express-projekt som lyssnar på port 3000
.
Exempel
mkdir RouterQuickStart
cd RouterQuickStart
npx express-generator
npm install
DEBUG=routerquickstart:* npm start
Ha en ACS-resurs
Skapa en ACS-resurs i Azure-portalen eller använd en befintlig resurs.
Installera SDK för Azure ACS-jobbrouter
Installera ACS-jobbrouter-SDK:et RouterQuickStart
i mappen genom att npm install @azure/communication-job-router --save
köra .
Routningsjobb
Konstruera jobbrouterklienter
Först måste vi skapa en jobRouterAdministrationClient
och en jobRouterClient
.
jobRouterAdministrationClient
tillhandahåller metoder för klassificeringsprinciper, distributionsprinciper, undantagsprinciper och köer.jobRouterClient
tillhandahåller metoder för jobb och arbetstagare.
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);
Skapa en distributionsprincip
Den här principen avgör vilka arbetare som ska få jobberbjudanden när jobb distribueras från sina köer.
const distributionPolicy = await jobRouterAdministrationClient.createDistributionPolicy(
"default-distribution-policy-id",
{
name: "Default Distribution Policy",
offerExpiresAfterSeconds: 30,
mode: {
objectType: "longest-idle",
minConcurrentOffers: 1,
maxConcurrentOffers: 3,
},
}
);
Skapa en klassificeringsprincip
Den här principen klassificerar jobb när de skapas.
- Mer information om prioriteringsregler finns i vår regeldokumentation .
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)"
}
});
Skapa en kö
Den här kön erbjuder jobb till arbetare enligt vår tidigare skapade distributionsprincip.
const salesQueueResponse = await jobRouterAdministrationClient.createQueue("sales-queue-id", {
name: "Sales",
distributionPolicyId: distributionPolicy.Id,
labels: {
department: "xbox",
},
});
Skapa arbetare
Dessa arbetare tilldelas till vår tidigare skapade "Sales"-kö och har några etiketter.
- innebär
availableForOffers
atttrue
dessa arbetstagare är redo att acceptera jobberbjudanden. - Läs dokumentationen om etiketter för att bättre förstå etiketter och etikettväljare.
// 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
});
Jobblivscykel
Läs vår dokumentation om jobblivscykeln för att bättre förstå livscykeln för ett jobb.
Skapa ett jobb
Det här jobbet placeras i vår tidigare skapade "Sales"-kö.
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,
});
(Valfritt) Skapa jobb med en klassificeringsprincip
Det här jobbet klassificeras med vår tidigare skapade klassificeringsprincip. Den har också en etikett.
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",
},
});
Händelser
Jobbrouterhändelser levereras via Azure Event Grid. Mer information om Azure Event Grid finns i vår Azure Event Grid dokumentation.
I föregående exempel:
- Jobbet placeras i kön "Försäljning".
- En arbetare väljs för att hantera jobbet, ett jobberbjudande utfärdas till den arbetaren och en
RouterWorkerOfferIssued
händelse skickas via Azure Event Grid.
Exempel på RouterWorkerOfferIssued
JSON-form:
{
"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"
}
Prenumerera på händelser
Ett sätt att prenumerera på ACS-jobbrouterhändelser är via Azure-portalen.
- Gå till acs-resursen i Azure-portalen och öppna bladet Händelser.
- Lägg till en händelseprenumeration för händelsen "RouterWorkerOfferIssued".
- Välj ett lämpligt sätt att ta emot händelsen (t.ex. Webhook, Azure Functions, Service Bus).
Mer information om hur du prenumererar på Jobbrouter-händelser finns i dokumentationen om att prenumerera på jobbrouterhändelser.
Vägen i NodeJS-programmet som tar emot händelser kan se ut ungefär så här:
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 ...
});
...
});
Acceptera eller avvisa jobberbjudandet
När du får en RouterWorkerOfferIssued
händelse kan du acceptera eller avvisa jobberbjudandet.
workerid
- ID:t för den arbetare som accepterar jobberbjudandet.offerId
- ID:t för erbjudandet som accepteras eller avvisas.
const acceptResponse = await jobRouterClient.acceptJobOffer(workerId, offerId);
// or
const declineResponse = await jobRouterClient.declineJobOffer(workerId, offerId);
Slutför jobbet
Det assignmentId
mottagna svaret från föregående steg krävs för att slutföra jobbet.
await jobRouterClient.completeJob(jobId, assignmentId);
Stäng jobbet
När arbetaren har slutfört omslutsfasen för jobbet jobRouterClient
kan jobbet stängas och en borttagningskod kopplas till det för framtida referens.
await jobRouterClient.closeJob(jobId, assignmentId, { dispositionCode: "Resolved" });
Nästa steg
Ta en titt på exempelkatalogen för ytterligare detaljerade exempel på hur du använder denna SDK.
Bidra
Om du vill bidra till denna SDK kan du läsa bidragsguiden om du vill veta mer om hur du skapar och testar koden.
Relaterade projekt
Azure SDK for JavaScript