Share via


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

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 --savekö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.

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 att true 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.

  1. Gå till acs-resursen i Azure-portalen och öppna bladet Händelser.
  2. Lägg till en händelseprenumeration för händelsen "RouterWorkerOfferIssued".
  3. 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.