SDK del enrutador de trabajos de Azure Communication Services (ACS) para JavaScript
Este paquete contiene el SDK de JavaScript para el servicio de enrutador de trabajos de Azure Communication Services (ACS).
Introducción
Conceptos clave
Consulte nuestra documentación de conceptos clave del enrutador de trabajos para comprender mejor el enrutador de trabajos.
Prerrequisitos
- Una suscripción de Azure.
- Un recurso de Azure Communication Services (ACS).
- Si necesita crear un recurso de ACS, puede usar Azure Portal, Azure PowerShell o la CLI de Azure.
Instalación de
npm install @azure/communication-job-router
Compatibilidad con exploradores
Para usar bibliotecas del SDK de Azure en un sitio web, debe convertir el código para que funcione dentro del explorador. Para ello, use una herramienta denominada bundler. Consulte nuestra documentación de agrupación para comprender mejor la agrupación.
Tutorial: Enrutamiento de trabajos a trabajadores mediante el SDK de enrutador de trabajos de Azure Communication Services (ACS)
En este tutorial, aprenderá a:
- Cómo crear una cola.
- Cómo crear trabajos y asignarlos a una cola.
- Cómo enrutar trabajos a los trabajos.
- Cómo suscribirse y controlar eventos del enrutador de trabajos.
- Cómo completar y cerrar trabajos.
Instalación
(Opcional) Instalación de un IDE
Instale un IDE como VSCode o Webstorm.
Instalación de NodeJS
Instale NodeJS.
Inicio de un servidor de NodeJS Express
En un shell (cmd, PowerShell, Bash, etc.), cree una carpeta denominada RouterQuickStart
y dentro de esta carpeta ejecute npx express-generator
. Esto generará un proyecto express simple que escuchará en port 3000
.
Ejemplo
mkdir RouterQuickStart
cd RouterQuickStart
npx express-generator
npm install
DEBUG=routerquickstart:* npm start
Tener un recurso de ACS
Cree un recurso de ACS en Azure Portal o use un recurso existente.
Instalación del SDK del enrutador de trabajos de Azure ACS
En la RouterQuickStart
carpeta , instale el SDK del enrutador de trabajos de ACS ejecutando npm install @azure/communication-job-router --save
.
Trabajos de enrutamiento
Construir clientes de enrutador de trabajos
En primer lugar, es necesario construir un jobRouterAdministrationClient
y un .jobRouterClient
jobRouterAdministrationClient
proporciona métodos para directivas de clasificación, directivas de distribución, directivas de excepción y colas.jobRouterClient
proporciona métodos para trabajos y trabajos.
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);
Crear una directiva de distribución
Esta directiva determina qué trabajadores recibirán ofertas de trabajo a medida que los trabajos se distribuyen fuera de sus colas.
const distributionPolicy = await jobRouterAdministrationClient.createDistributionPolicy(
"default-distribution-policy-id",
{
name: "Default Distribution Policy",
offerExpiresAfterSeconds: 30,
mode: {
objectType: "longest-idle",
minConcurrentOffers: 1,
maxConcurrentOffers: 3,
},
}
);
Crear una directiva de clasificación
Esta directiva clasifica los trabajos tras la creación.
- Consulte nuestra documentación sobre reglas para comprender mejor las reglas de priorización.
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)"
}
});
Creación de una cola
Esta cola ofrece trabajos a los trabajadores según nuestra directiva de distribución creada anteriormente.
const salesQueueResponse = await jobRouterAdministrationClient.createQueue("sales-queue-id", {
name: "Sales",
distributionPolicyId: distributionPolicy.Id,
labels: {
department: "xbox",
},
});
Creación de trabajos
Estos trabajos se asignan a la cola "Ventas" creada anteriormente y tienen algunas etiquetas.
- establecer
availableForOffers
entrue
significa que estos trabajos están listos para aceptar ofertas de trabajo. - consulte nuestra documentación de etiquetas para comprender mejor las etiquetas y los selectores de etiquetas.
// 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
});
Ciclo de vida del trabajo
Consulte nuestra documentación del ciclo de vida del trabajo para comprender mejor el ciclo de vida de un trabajo.
Creación de un trabajo
Este trabajo se pone en cola en la cola "Ventas" creada anteriormente.
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,
});
(Opcional) Crear trabajo con una directiva de clasificación
Este trabajo se clasificará con nuestra directiva de clasificación creada anteriormente. También tiene una etiqueta.
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",
},
});
Eventos
Los eventos del enrutador de trabajos se entregan a través de Azure Event Grid. Consulte nuestra documentación de Azure Event Grid para comprender mejor Azure Event Grid.
En el ejemplo anterior:
- El trabajo se pone en cola en la cola "Sales".
- Se selecciona un trabajo para controlar el trabajo, se emite una oferta de trabajo a ese trabajo y se envía un
RouterWorkerOfferIssued
evento a través de Azure Event Grid.
Ejemplo RouterWorkerOfferIssued
de forma 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"
}
Suscripción a eventos
Una manera de suscribirse a los eventos del enrutador de trabajos de ACS es a través de Azure Portal.
- Vaya al recurso de ACS en Azure Portal y abra la hoja "Eventos".
- Agregue una suscripción de eventos para el evento "RouterWorkerOfferIssued".
- Seleccione un medio adecuado para recibir el evento (por ejemplo, Webhook, Azure Functions, Service Bus).
Consulte nuestra documentación de "suscribirse a eventos del enrutador de trabajos" para comprender mejor la suscripción a eventos del enrutador de trabajos.
La ruta de la aplicación NodeJS que recibe eventos puede tener un aspecto similar al siguiente:
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 ...
});
...
});
Aceptar o rechazar la oferta de trabajo
Una vez que reciba un RouterWorkerOfferIssued
evento, puede aceptar o rechazar la oferta de trabajo.
workerid
: el identificador del trabajador que acepta la oferta de trabajo.offerId
- El identificador de la oferta que se acepta o rechaza.
const acceptResponse = await jobRouterClient.acceptJobOffer(workerId, offerId);
// or
const declineResponse = await jobRouterClient.declineJobOffer(workerId, offerId);
Completar el trabajo
La assignmentId
respuesta del paso anterior es necesaria para completar el trabajo.
await jobRouterClient.completeJob(jobId, assignmentId);
Cerrar el trabajo
Una vez que el trabajo ha completado la fase de resumen del trabajo, jobRouterClient
puede cerrar el trabajo y adjuntar un código de eliminación a él para futuras referencias.
await jobRouterClient.closeJob(jobId, assignmentId, { dispositionCode: "Resolved" });
Pasos siguientes
Eche un vistazo al directorio de ejemplos para obtener ejemplos detallados adicionales del uso de este SDK.
Contribuciones
Si quiere contribuir a este SDK, lea la guía de contribución para obtener más información sobre cómo compilar y probar el código.
Proyectos relacionados
Azure SDK for JavaScript