пакет SDK для маршрутизатора заданий Службы коммуникации Azure (ACS) для JavaScript
Этот пакет содержит пакет SDK javaScript для службы маршрутизатора заданий Службы коммуникации Azure (ACS).
Приступая к работе
Основные понятия
Ознакомьтесь с документацией по основным понятиям маршрутизатора заданий , чтобы лучше понять маршрутизатор заданий.
Предварительные требования
- Подписка Azure.
- Ресурс Службы коммуникации Azure (ACS).
- Если вам нужно создать ресурс ACS, можно использовать портал Azure, Azure PowerShell или Azure CLI.
Установка
npm install @azure/communication-job-router
Поддержка браузеров
Чтобы использовать библиотеки azure SDK на веб-сайте, необходимо преобразовать код для работы в браузере. Для этого используется средство с именем bundler. Чтобы лучше понять объединение, ознакомьтесь с нашей документацией по объединениям.
Руководство. Маршрутизация заданий в рабочие роли с помощью пакета SDK для маршрутизатора заданий Службы коммуникации Azure (ACS)
Из этого руководства вы узнаете:
- Как создать очередь.
- Создание рабочих ролей и их назначение в очередь.
- Маршрутизация заданий сотрудникам.
- Как подписаться на события маршрутизатора заданий и обрабатывать их.
- Как выполнять и закрывать задания.
Настройка
(Необязательно) Установка интегрированной среды разработки
Установите интегрированную среду разработки, например VSCode или Webstorm.
Установка NodeJS
Установите NodeJS.
Запуск сервера NodeJS Express
В оболочке (cmd, PowerShell, Bash и т. д.) создайте папку с именем RouterQuickStart
и в ней выполните .npx express-generator
Это приведет к созданию простого проекта Express, который будет прослушивать .port 3000
Пример
mkdir RouterQuickStart
cd RouterQuickStart
npx express-generator
npm install
DEBUG=routerquickstart:* npm start
Использование ресурса ACS
Создайте ресурс ACS на портале Azure или используйте существующий ресурс.
Установка пакета SDK для маршрутизатора заданий Azure ACS
В папке RouterQuickStart
установите пакет SDK для маршрутизатора заданий ACS, выполнив npm install @azure/communication-job-router --save
.
Задания маршрутизации
Создание клиентов маршрутизатора заданий
Сначала необходимо создать jobRouterAdministrationClient
и jobRouterClient
.
jobRouterAdministrationClient
предоставляет методы для политик классификации, политик распространения, политик исключений и очередей.jobRouterClient
предоставляет методы для заданий и рабочих ролей.
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);
Создание политики распространения
Эта политика определяет, какие работники будут получать предложения о заданиях по мере распространения заданий из очередей.
const distributionPolicy = await jobRouterAdministrationClient.createDistributionPolicy(
"default-distribution-policy-id",
{
name: "Default Distribution Policy",
offerExpiresAfterSeconds: 30,
mode: {
objectType: "longest-idle",
minConcurrentOffers: 1,
maxConcurrentOffers: 3,
},
}
);
Создание политики классификации
Эта политика классифицирует задания при создании.
- Ознакомьтесь с нашей документацией по правилам , чтобы лучше понять правила определения приоритетов.
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)"
}
});
Создание очереди
Эта очередь предлагает задания для рабочих в соответствии с ранее созданной политикой распространения.
const salesQueueResponse = await jobRouterAdministrationClient.createQueue("sales-queue-id", {
name: "Sales",
distributionPolicyId: distributionPolicy.Id,
labels: {
department: "xbox",
},
});
Создание рабочих ролей
Эти рабочие роли назначены в ранее созданную очередь "Продажи" и имеют некоторые метки.
- значение
availableForOffers
означаетtrue
, что эти работники готовы принять предложения о работе. - Ознакомьтесь с нашей документацией по меткам , чтобы лучше понять метки и селекторы меток.
// 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
});
Жизненный цикл задания
Ознакомьтесь с документацией по жизненному циклу задания , чтобы лучше понять жизненный цикл задания.
Создание задания
Это задание помещается в очередь ранее созданной очереди "Продажи".
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,
});
(Необязательно) Создание задания с помощью политики классификации
Это задание будет классифицировано с помощью ранее созданной политики классификации. Он также имеет метку.
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",
},
});
События
События маршрутизатора заданий доставляются через Сетка событий Azure. Дополнительные сведения о Сетка событий Azure см. в документации по Сетка событий Azure.
В предыдущем примере:
- Задание помещается в очередь "Продажи".
- Для обработки задания выбирается рабочая роль, ей выдается предложение о задании, а
RouterWorkerOfferIssued
событие отправляется через Сетка событий Azure.
Пример RouterWorkerOfferIssued
фигуры 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"
}
Подписка на события
Одним из способов подписки на события маршрутизатора заданий ACS является портал Azure.
- Перейдите к ресурсу ACS на портале Azure и откройте колонку "События".
- Добавьте подписку на событие RouterWorkerOfferIssued.
- Выберите подходящее средство для получения события (например, веб-перехватчик, Функции Azure, служебная шина).
Ознакомьтесь с нашей документацией по подписке на события маршрутизатора заданий , чтобы лучше понять, как подписаться на события маршрутизатора заданий.
Маршрут в приложении NodeJS, которое получает события, может выглядеть следующим образом:
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 ...
});
...
});
Принятие или отклонение предложения о задании
Получив событие, RouterWorkerOfferIssued
вы можете принять или отклонить предложение о работе.
workerid
— идентификатор работника, принимающего предложение о задании.offerId
— идентификатор принятого или отклоненного предложения.
const acceptResponse = await jobRouterClient.acceptJobOffer(workerId, offerId);
// or
const declineResponse = await jobRouterClient.declineJobOffer(workerId, offerId);
Завершение задания
Для assignmentId
завершения задания требуется ответ, полученный из предыдущего шага.
await jobRouterClient.completeJob(jobId, assignmentId);
Закрытие задания
Когда рабочая роль завершит этап завершения этапа завершения задания jobRouterClient
, он может закрыть задание и прикрепить к нему код ликвидации для дальнейшего использования.
await jobRouterClient.closeJob(jobId, assignmentId, { dispositionCode: "Resolved" });
Дальнейшие действия
Дополнительные подробные примеры использования этого пакета SDK см. в каталоге примеров .
Участие
Если вы хотите внести свой вклад в этот пакет SDK, ознакомьтесь с руководством по участию , чтобы узнать больше о сборке и тестировании кода.
Связанные проекты
Azure SDK for JavaScript