Sdílet prostřednictvím


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

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-generatorpří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 --savepří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í.

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.

  1. Na webu Azure Portal přejděte k prostředku služby ACS a otevřete okno Události.
  2. Přidejte odběr události pro událost RouterWorkerOfferIssued.
  3. 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.