Megosztás a következőn keresztül:


Azure Communication Services (ACS) feladat útválasztójának SDK-ja JavaScripthez

Ez a csomag tartalmazza a Azure Communication Services (ACS) feladat útválasztó szolgáltatásához tartozó JavaScript SDK-t.

Első lépések

Fő fogalmak

A feladat útválasztója alapfogalmait ismertető dokumentációban jobban megismerheti a feladat-útválasztót.

Előfeltételek

Telepítés

npm install @azure/communication-job-router

Böngészőtámogatás

Ha azure SDK-kódtárakat szeretne használni egy webhelyen, konvertálnia kell a kódot úgy, hogy a böngészőben működjön. Ezt egy kötegelő nevű eszközzel teheti meg. A kötegelés jobb megértéséhez tekintse meg a csomagkontraszt dokumentációját .

Oktatóanyag: Feladatok átirányítása feldolgozókhoz a Azure Communication Services (ACS) feladat útválasztójának SDK-jának használatával

Az oktatóanyag során a következőket fogja elsajátítani:

  • Üzenetsor létrehozása.
  • Feldolgozók létrehozása és üzenetsorhoz rendelése.
  • Feladatok átirányítása a feldolgozókhoz.
  • A feladat-útválasztó eseményeire való feliratkozás és azok kezelése.
  • Feladatok befejezése és bezárása.

Beállítása

(Nem kötelező) IDE telepítése

Telepítsen egy IDE-t, például a VSCode-ot vagy a Webstormot.

A NodeJS telepítése

Telepítse a NodeJS-t.

NodeJS Express-kiszolgáló indítása

Egy rendszerhéjban (cmd, PowerShell, Bash stb.) hozzon létre egy nevű RouterQuickStart mappát, és a mappán belül hajtsa végre a következőt npx express-generator: . Ez létrehoz egy egyszerű Express-projektet, amely figyeli a következőt port 3000: .

Példa

mkdir RouterQuickStart
cd RouterQuickStart
npx express-generator
npm install
DEBUG=routerquickstart:* npm start

ACS-erőforrással rendelkezik

Hozzon létre egy ACS-erőforrást az Azure Portalon , vagy használjon egy meglévő erőforrást.

Az Azure ACS-feladat útválasztójának SDK telepítése

RouterQuickStart A mappában telepítse az ACS-feladat útválasztójának SDK-ját a következő végrehajtásávalnpm install @azure/communication-job-router --save: .

Útválasztási feladatok

Feladatát útválasztó-ügyfelek létrehozása

Először létre kell hoznunk egy jobRouterAdministrationClient és egy elemet jobRouterClient.

  • jobRouterAdministrationClient metódusokat biztosít a besorolási szabályzatokhoz, a terjesztési szabályzatokhoz, a kivételszabályzatokhoz és az üzenetsorokhoz.
  • jobRouterClient metódusokat biztosít a feladatokhoz és a dolgozókhoz.
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);

Terjesztési szabályzat létrehozása

Ez a szabályzat határozza meg, hogy mely feldolgozók kapnak állásajánlatokat, mivel a feladatok ki vannak osztva az üzenetsoraikból.

const distributionPolicy = await jobRouterAdministrationClient.createDistributionPolicy(
  "default-distribution-policy-id",
  {
    name: "Default Distribution Policy",
    offerExpiresAfterSeconds: 30,
    mode: {
      objectType: "longest-idle",
      minConcurrentOffers: 1,
      maxConcurrentOffers: 3,
    },
  }
);

Besorolási szabályzat létrehozása

Ez a szabályzat a létrehozáskor osztályozza a feladatokat.

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)"
  }
});

Üzenetsor létrehozása

Ez az üzenetsor a korábban létrehozott terjesztési szabályzatnak megfelelően kínál feladatokat a feldolgozóknak.

const salesQueueResponse = await jobRouterAdministrationClient.createQueue("sales-queue-id", {
  name: "Sales",
  distributionPolicyId: distributionPolicy.Id,
  labels: {
    department: "xbox",
  },
});

Feldolgozók létrehozása

Ezek a feldolgozók a korábban létrehozott "Sales" üzenetsorhoz vannak rendelve, és vannak címkéik.

  • beállítás availableForOffers azt jelenti, hogy true ezek a munkavállalók készen állnak az állásajánlatok elfogadására.
  • A címkék és címkeválasztók jobb megértéséhez tekintse meg a címkék dokumentációját .
  // 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
});

Feladat életciklusa

A feladatok életciklusának jobb megismeréséhez tekintse meg a feladat életciklusával kapcsolatos dokumentációnkat .

Feladat létrehozása

Ez a feladat a korábban létrehozott "Sales" üzenetsorba kerül.

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,
});

(Nem kötelező) Feladat létrehozása besorolási szabályzattal

Ez a feladat a korábban létrehozott besorolási szabályzattal lesz besorolva. Emellett címkével is rendelkezik.

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",
  },
});

esemény

A feladat-útválasztó eseményei Azure Event Grid keresztül érkeznek. A Azure Event Grid jobb megértéséhez tekintse meg a Azure Event Grid dokumentációját.

Az előző példában:

  • A feladat a "Sales" (Értékesítések) üzenetsorba kerül.
  • A rendszer kiválaszt egy feldolgozót a feladat kezeléséhez, egy állásajánlatot ad ki az adott feldolgozónak, és egy RouterWorkerOfferIssued eseményt küld Azure Event Grid keresztül.

Példa RouterWorkerOfferIssued JSON-alakzatra:

{
  "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"
}

Feliratkozás eseményekre

Az ACS-feladat útválasztói eseményeire való feliratkozás egyik módja az Azure Portal.

  1. Lépjen az ACS-erőforráshoz az Azure Portalon, és nyissa meg az "Események" panelt.
  2. Adjon hozzá egy esemény-előfizetést a "RouterWorkerOfferIssued" eseményhez.
  3. Válasszon ki egy megfelelő eszközt az esemény fogadásához (pl. Webhook, Azure Functions, Service Bus).

Tekintse meg a "feliratkozás feladat-útválasztó eseményekre" dokumentációt , hogy jobban megértse a feladat útválasztói eseményekre való feliratkozást.

Az eseményeket fogadó NodeJS-alkalmazás útvonala az alábbihoz hasonló lehet:

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 ...
    });
    ...
});

A feladatajánlat elfogadása vagy elutasítása

Miután kapott egy eseményt RouterWorkerOfferIssued , elfogadhatja vagy elutasíthatja az állásajánlatot.

  • workerid – A munkaajánlatot elfogadó feldolgozó azonosítója.
  • offerId – Az elfogadandó vagy elutasított ajánlat azonosítója.
const acceptResponse = await jobRouterClient.acceptJobOffer(workerId, offerId);
// or
const declineResponse = await jobRouterClient.declineJobOffer(workerId, offerId);

A feladat befejezése

A assignmentId feladat elvégzéséhez az előző lépés válaszából kapott válaszra van szükség.

await jobRouterClient.completeJob(jobId, assignmentId);

A feladat bezárása

Miután a feldolgozó befejezte a feladat burkoló fázisát, a jobRouterClient bezárhatja a feladatot, és a későbbi referencia érdekében csatolhat hozzá egy elhelyezési kódot.

await jobRouterClient.closeJob(jobId, assignmentId, { dispositionCode: "Resolved" });

Következő lépések

Az SDK használatának további részletes példáiért tekintse meg a mintakönyvtárat .

Közreműködés

Ha hozzá szeretne járulni ehhez az SDK-hoz, olvassa el a közreműködői útmutatót , amelyből többet is megtudhat a kód összeállításáról és teszteléséről.