Descubra cómo aceptar o rechazar ofertas de trabajo del enrutador de trabajos
En esta guía se describen los pasos que debe seguir para observar una oferta del enrutador de trabajos. También se describe cómo aceptar o rechazar ofertas de trabajo.
Requisitos previos
- Una cuenta de Azure con una suscripción activa. Cree una cuenta de Azure de forma gratuita.
- Un recurso de Azure Communication Services implementado. Cree un recurso de Communication Services.
- Opcional: complete el inicio rápido para empezar a trabajar con el enrutador de trabajos.
Aceptación de ofertas de trabajo
Después de crear un trabajo, observe el evento emitido por la oferta de trabajo, que contiene el identificador de trabajo y el identificador de oferta de trabajo. El trabajador puede aceptar ofertas de trabajo mediante el SDK. Una vez aceptada la oferta, el trabajo se asigna al trabajo y el estado del trabajo se actualiza a assigned
.
// Event handler logic omitted
var accept = await client.AcceptJobOfferAsync(offerIssuedEvent.Data.WorkerId, offerIssuedEvent.Data.OfferId);
// Event handler logic omitted
const accept = await client.path("/routing/workers/{workerId}/offers/{offerId}:accept",
offerIssuedEvent.data.workerId, offerIssuedEvent.data.offerId).post();
# Event handler logic omitted
accept = client.accept_job_offer(offerIssuedEvent.data.worker_id, offerIssuedEvent.data.offer_id)
// Event handler logic omitted
AcceptJobOfferResult accept = client.acceptJobOffer(offerIssuedEvent.getData().getWorkerId(), offerIssuedEvent.getData().getOfferId());
Rechazo de ofertas de trabajo
El trabajador puede rechazar las ofertas de trabajo mediante el SDK. Una vez rechazada la oferta, el trabajo se ofrece al siguiente trabajador disponible. El trabajo no se ofrece al mismo trabajador que rechazó el trabajo hasta que el trabajador se anule el registro y vuelva a registrarse.
// Event handler logic omitted
await client.DeclineJobOfferAsync(new DeclineJobOfferOptions(workerId: offerIssuedEvent.Data.WorkerId,
offerId: offerIssuedEvent.Data.OfferId));
// Event handler logic omitted
await client.path("/routing/workers/{workerId}/offers/{offerId}:decline",
offerIssuedEvent.data.workerId, offerIssuedEvent.data.offerId).post();
# Event handler logic omitted
client.decline_job_offer(offerIssuedEvent.data.worker_id, offerIssuedEvent.data.offer_id)
// Event handler logic omitted
client.declineJobOffer(offerIssuedEvent.getData().getWorkerId(), offerIssuedEvent.getData().getOfferId());
Reintentos de oferta después de un tiempo
En algunos escenarios, es posible que un trabajador quiera reintentar automáticamente una oferta después de algún tiempo. Por ejemplo, un trabajo puede querer reintentar una oferta después de 5 minutos. Para lograr este flujo, el trabajo puede usar el SDK para rechazar la oferta y especificar la retryOfferAfter
propiedad .
// Event handler logic omitted
await client.DeclineJobOfferAsync(new DeclineJobOfferOptions(workerId: offerIssuedEvent.Data.WorkerId,
offerId: offerIssuedEvent.Data.OfferId)
{
RetryOfferAt = DateTimeOffset.UtcNow.AddMinutes(5)
});
// Event handler logic omitted
await client.path("/routing/workers/{workerId}/offers/{offerId}:decline",
offerIssuedEvent.data.workerId, offerIssuedEvent.data.offerId).post({
body: {
retryOfferAt: new Date(Date.now() + 5 * 60 * 1000)
}
});
# Event handler logic omitted
client.decline_job_offer(
worker_id = offerIssuedEvent.data.worker_id,
offer_id = offerIssuedEvent.data.offer_id,
retry_offer_at = datetime.utcnow() + timedelta(minutes = 5))
// Event handler logic omitted
client.declineJobOffer(
offerIssuedEvent.getData().getWorkerId(),
offerIssuedEvent.getData().getOfferId(),
new RequestOptions().setBody(BinaryData.fromObject(
new DeclineJobOfferOptions().setRetryOfferAt(OffsetDateTime.now().plusMinutes(5)))));
Completar el trabajo
Una vez que el trabajo ha completado el trabajo asociado al trabajo (por ejemplo, completó la llamada), completamos el trabajo, que actualiza el estado a completed
.
await routerClient.CompleteJobAsync(new CompleteJobOptions(jobId: accept.Value.JobId, assignmentId: accept.Value.AssignmentId));
await client.path("/routing/jobs/{jobId}/assignments/{assignmentId}:complete", accept.body.jobId, accept.body.assignmentId).post();
router_client.complete_job(job_id = job.id, assignment_id = accept.assignment_id)
routerClient.completeJobWithResponse(accept.getJobId(), accept.getAssignmentId(), null);
Cerrar el trabajo
Una vez que el trabajo esté listo para asumir nuevos trabajos, el trabajo debe cerrar el trabajo, que actualiza el estado a closed
. De forma opcional, el rol de trabajo puede proporcionar un código de disposición para indicar el resultado del trabajo.
await routerClient.CloseJobAsync(new CloseJobOptions(jobId: accept.Value.JobId, assignmentId: accept.Value.AssignmentId) {
DispositionCode = "Resolved"
});
await client.path("/routing/jobs/{jobId}/assignments/{assignmentId}:close", accept.body.jobId, accept.body.assignmentId).post({
body: {
dispositionCode: "Resolved"
}
});
router_client.close_job(job_id = job.id, assignment_id = accept.assignment_id, disposition_code = "Resolved")
routerClient.closeJobWithResponse(accept.getJobId(), accept.getAssignmentId(),
new RequestOptions().setBody(BinaryData.fromObject(new CloseJobOptions().setDispositionCode("Resolved"))));
Pasos siguientes
- Revise cómo administrar una cola del enrutador de trabajos.
- Obtenga información sobre cómo suscribirse a eventos del enrutador de trabajos.