AzureCommunicationRoutingService REST-clientbibliotheek voor JavaScript
Azure Communication Routing Service
Vertrouw sterk op onze REST-clientdocumenten om deze bibliotheek te gebruiken
Belangrijke koppelingen:
Aan de slag
Momenteel ondersteunde omgevingen
- LTS-versies van Node.js
Vereisten
- U moet een Azure-abonnement hebben om dit pakket te kunnen gebruiken.
Een ACS-resource hebben
Maak een ACS-resource in Azure Portal of gebruik een bestaande resource.
Installeer het pakket @azure-rest/communication-job-router
Installeer de REST-clientbibliotheek van de Rest-client van AzureCommunicationRoutingService voor JavaScript met npm
:
npm install @azure-rest/communication-job-router
Een maken en verifiëren AzureCommunicationRoutingServiceClient
Als u een AAD-tokenreferentie (Azure Active Directory) wilt gebruiken, geeft u een exemplaar op van het gewenste referentietype dat is verkregen uit de @azure-/identiteitsbibliotheek .
Als u zich wilt verifiëren met AAD, moet u eerst npm
installeren @azure/identity
Na de installatie kunt u kiezen welk type referentie@azure/identity
u wilt gebruiken.
Als voorbeeld kan DefaultAzureCredential worden gebruikt om de client te verifiëren.
Stel de waarden van de client-id, tenant-id en clientgeheim van de AAD-toepassing in als omgevingsvariabelen: AZURE_CLIENT_ID, AZURE_TENANT_ID AZURE_CLIENT_SECRET
Zelfstudie: Taken naar werkrollen routeren met behulp van de Azure Communication Services (ACS) Job Router Rest SDK
In deze zelfstudie leert u het volgende:
- Een wachtrij maken.
- Werkrollen maken en deze toewijzen aan een wachtrij.
- Taken doorsturen naar werkrollen.
- Hoe u zich kunt abonneren op taakrouter-gebeurtenissen en deze afhandelen.
- Taken voltooien en sluiten.
Een NodeJS Express-server starten
Maak in een shell (cmd, PowerShell, Bash, enzovoort) een map met de naam RouterQuickStart
en voer in deze map uit npx express-generator
. Hiermee wordt een eenvoudig Express-project gegenereerd dat luistert op port 3000
.
Voorbeeld
mkdir RouterQuickStart
cd RouterQuickStart
npx express-generator
npm install
DEBUG=routerquickstart:* npm start
De Azure ACS-taakrouter-SDK installeren
Installeer in de RouterQuickStart
map de ACS Job Router SDK door uit te npm install @azure-rest/communication-job-router --save
voeren.
Routeringstaken
AzureCommunicationRoutingServiceClient maken
Eerst moeten we een AzureCommunicationRoutingServiceClient
maken.
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);
Een distributiebeleid maken
Met dit beleid wordt bepaald welke werknemers jobaanbiedingen ontvangen wanneer taken buiten hun wachtrijen worden verdeeld.
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,
},
}
});
Een wachtrij maken
Deze wachtrij biedt taken aan werknemers volgens ons eerder gemaakte distributiebeleid.
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: {},
}
});
Werkrollen maken
Deze werknemers worden toegewezen aan de eerder gemaakte wachtrij 'Verkoop' en hebben enkele labels.
- ingesteld op
availableForOffers
betekenttrue
dat deze werknemers klaar zijn om vacatures te accepteren. - raadpleeg onze documentatie over labels voor een beter begrip van labels en labelkiezers.
// 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,
},
],
}
});
Taaklevenscyclus
Raadpleeg onze documentatie over de levenscyclus van een taak voor meer inzicht in de levenscyclus van een taak.
Een taak maken
Deze taak is toegevoegd aan de eerder gemaakte wachtrij 'Verkoop'.
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: {},
}
});
(Optioneel) Taak maken met een classificatiebeleid
Een classificatiebeleid maken
Dit beleid classificeert taken bij het maken.
- Raadpleeg onze documentatie over regels voor meer informatie over prioriteitsregels.
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)"
}
}
});
Taak maken en classificeren
Deze taak wordt geclassificeerd met het eerder gemaakte classificatiebeleid. Het heeft ook een label.
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"
}
Abonneren op gebeurtenissen
Een manier om u te abonneren op acs-taakrouter-gebeurtenissen is via de Azure-portal.
- Navigeer naar uw ACS-resource in Azure Portal en open de blade Gebeurtenissen.
- Voeg een gebeurtenisabonnement toe voor de gebeurtenis RouterWorkerOfferIssued.
- Selecteer een geschikte methode om de gebeurtenis te ontvangen (bijvoorbeeld Webhook, Azure Functions, Service Bus).
Raadpleeg onze documentatie 'abonneren op taakrouter-gebeurtenissen' voor meer informatie over het abonneren op taakrouter-gebeurtenissen.
De route in uw NodeJS-toepassing die gebeurtenissen ontvangt, kan er ongeveer als volgt uitzien:
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 ...
});
...
});
De jobaanbieding accepteren of weigeren
Zodra u een RouterWorkerOfferIssued
gebeurtenis hebt ontvangen, kunt u de jobaanbieding accepteren of weigeren.
workerid
- De id van de werknemer die de jobaanbieding accepteert.offerId
- De id van de aanbieding die wordt geaccepteerd of geweigerd.
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();
De taak voltooien
De assignmentId
ontvangen van het antwoord van de vorige stap is vereist om de taak te voltooien.
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()}`
}
});
De taak sluiten
Zodra de werkrol de afrondingsfase van de taak heeft voltooid, kan de jobRouterClient
taak worden gesloten en een verwijderingscode aan de taak worden toegevoegd voor toekomstig gebruik.
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()}`
}
});
Problemen oplossen
Logboekregistratie
Het inschakelen van logboekregistratie kan helpen bij het ontdekken van nuttige informatie over fouten. Als u een logboek met HTTP-aanvragen en -antwoorden wilt zien, stelt u de AZURE_LOG_LEVEL
omgevingsvariabele in op info
. U kunt logboekregistratie ook tijdens runtime inschakelen door aan te roepen setLogLevel
in de @azure/logger
:
const { setLogLevel } = require("@azure/logger");
setLogLevel("info");
Voor meer gedetailleerde instructies over het inschakelen van logboeken kunt u de @azure-/loggerpakketdocumenten bekijken.
Azure SDK for JavaScript