Udostępnij za pośrednictwem


zestaw SDK routera zadań Azure Communication Services (ACS) dla języka JavaScript

Ten pakiet zawiera zestaw JAVAScript SDK dla usługi routera zadań Azure Communication Services (ACS).

Getting Started

Kluczowe pojęcia

Zapoznaj się z naszą dokumentacją dotyczącą kluczowych pojęć routera zadań , aby lepiej zrozumieć router zadań.

Wymagania wstępne

Instalowanie

npm install @azure/communication-job-router

Obsługa przeglądarki

Aby korzystać z bibliotek zestawu Azure SDK w witrynie internetowej, musisz przekonwertować kod, aby działał w przeglądarce. W tym celu należy użyć narzędzia o nazwie bundler. Zapoznaj się z naszą dokumentacją tworzenia pakietów, aby lepiej zrozumieć tworzenie pakietów.

Samouczek: kierowanie zadań do procesów roboczych przy użyciu zestawu SDK routera zadań Azure Communication Services (ACS)

Z tego samouczka dowiesz się:

  • Jak utworzyć kolejkę.
  • Tworzenie procesów roboczych i przypisywanie ich do kolejki.
  • Jak kierować zadania do procesów roboczych.
  • Jak subskrybować zdarzenia routera zadań i obsługiwać je.
  • Jak wykonać i zamknąć zadania.

Konfigurowanie

(Opcjonalnie) Instalowanie środowiska IDE

Zainstaluj środowisko IDE, takie jak VSCode lub Webstorm.

Instalowanie środowiska NodeJS

Zainstaluj środowisko NodeJS.

Uruchamianie serwera NodeJS Express

W powłoce (cmd, PowerShell, Bash itp.) utwórz folder o nazwie RouterQuickStart i wewnątrz tego folderu wykonaj polecenie npx express-generator. Spowoduje to wygenerowanie prostego projektu Express, który będzie nasłuchiwać przy użyciu elementu port 3000.

Przykład

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

Posiadanie zasobu ACS

Utwórz zasób ACS w witrynie Azure Portal lub użyj istniejącego zasobu.

Instalowanie zestawu SDK routera zadań usługi Azure ACS

W folderze RouterQuickStart zainstaluj zestaw SDK routera zadań ACS, wykonując polecenie npm install @azure/communication-job-router --save.

Zadania routingu

Konstruowanie klientów routera zadań

Najpierw musimy skonstruować element jobRouterAdministrationClient i .jobRouterClient

  • jobRouterAdministrationClient Udostępnia metody zasad klasyfikacji, zasad dystrybucji, zasad wyjątków i kolejek.
  • jobRouterClient Udostępnia metody zadań i procesów roboczych.
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);

Tworzenie zasad dystrybucji

Te zasady określają, którzy pracownicy otrzymają oferty pracy, ponieważ zadania są dystrybuowane poza kolejkami.

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

Tworzenie zasad klasyfikacji

Te zasady klasyfikują zadania podczas tworzenia.

  • Zapoznaj się z naszą dokumentacją reguł , aby lepiej zrozumieć reguły określania priorytetów.
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)"
  }
});

Tworzenie kolejki

Ta kolejka oferuje zadania pracownikom zgodnie z wcześniej utworzonymi zasadami dystrybucji.

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

Tworzenie procesów roboczych

Ci pracownicy są przypisywani do naszej wcześniej utworzonej kolejki "Sales" i mają pewne etykiety.

  • ustawienie availableForOffers oznacza, że true ci pracownicy są gotowi zaakceptować oferty pracy.
  • Zapoznaj się z naszą dokumentacją etykiet , aby lepiej zrozumieć etykiety i selektory etykiet.
  // 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
});

Cykl życia zadania

Zapoznaj się z naszą dokumentacją cyklu życia zadań , aby lepiej zrozumieć cykl życia zadania.

Tworzenie zadania

To zadanie jest w kolejce do kolejki utworzonej wcześniej "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,
});

(Opcjonalnie) Tworzenie zadania za pomocą zasad klasyfikacji

To zadanie zostanie sklasyfikowane przy użyciu naszych wcześniej utworzonych zasad klasyfikacji. Ma również etykietę.

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

Zdarzenia

Zdarzenia routera zadań są dostarczane za pośrednictwem Azure Event Grid. Zapoznaj się z naszą dokumentacją Azure Event Grid, aby lepiej zrozumieć Azure Event Grid.

W poprzednim przykładzie:

  • Zadanie jest kolejkowane do kolejki "Sales".
  • Proces roboczy jest wybierany do obsługi zadania, oferta pracy jest wystawiana dla tego pracownika, a RouterWorkerOfferIssued zdarzenie jest wysyłane za pośrednictwem Azure Event Grid.

Przykładowy RouterWorkerOfferIssued kształt 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"
}

Subskrybowanie zdarzeń

Jednym ze sposobów subskrybowania zdarzeń routera zadań ACS jest użycie witryny Azure Portal.

  1. Przejdź do zasobu ACS w witrynie Azure Portal i otwórz blok "Zdarzenia".
  2. Dodaj subskrypcję zdarzeń dla zdarzenia "RouterWorkerOfferIssued".
  3. Wybierz odpowiednie środki, aby odebrać zdarzenie (np. element webhook, Azure Functions, Service Bus).

Zapoznaj się z naszą dokumentacją "subskrybuj zdarzenia routera zadań" , aby lepiej zrozumieć subskrybowanie zdarzeń routera zadań.

Trasa w aplikacji NodeJS, która odbiera zdarzenia, może wyglądać następująco:

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

Zaakceptuj lub odrzuć ofertę zadania

Po otrzymaniu RouterWorkerOfferIssued zdarzenia możesz zaakceptować lub odrzucić ofertę pracy.

  • workerid - Identyfikator pracownika akceptującego ofertę pracy.
  • offerId - Identyfikator zaakceptowanej lub odrzuconej oferty.
const acceptResponse = await jobRouterClient.acceptJobOffer(workerId, offerId);
// or
const declineResponse = await jobRouterClient.declineJobOffer(workerId, offerId);

Ukończ zadanie

Do assignmentId ukończenia zadania wymagane jest odebranie odpowiedzi poprzedniego kroku.

await jobRouterClient.completeJob(jobId, assignmentId);

Zamknij zadanie

Po zakończeniu fazy opakowowania zadania jobRouterClient proces roboczy może zamknąć zadanie i dołączyć do niego kod dyspozycji na potrzeby przyszłego odwołania.

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

Następne kroki

Zapoznaj się z katalogiem przykładów , aby uzyskać dodatkowe szczegółowe przykłady użycia tego zestawu SDK.

Współtworzenie

Jeśli chcesz współtworzyć ten zestaw SDK, przeczytaj przewodnik współtworzenia , aby dowiedzieć się więcej na temat sposobu kompilowania i testowania kodu.