Descubra como aceitar ou recusar ofertas de emprego do Job Router
Este guia apresenta as etapas que você precisa seguir para observar uma oferta de Job Router. Também descreve como aceitar ou recusar ofertas de emprego.
Pré-requisitos
- Uma conta do Azure com uma subscrição ativa. Crie uma conta do Azure gratuitamente.
- Um recurso implantado dos Serviços de Comunicação do Azure. Crie um recurso de Serviços de Comunicação.
- Opcional: Conclua o início rápido para começar a usar o Job Router.
Aceitar ofertas de emprego
Depois de criar um trabalho, observe o evento de oferta de trabalhador, que contém o ID do trabalhador e o ID da oferta de trabalho. O trabalhador pode aceitar ofertas de trabalho usando o SDK. Uma vez que a oferta é aceita, o trabalho é atribuído ao trabalhador, e o status do trabalho é atualizado para 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());
Recusar ofertas de emprego
O trabalhador pode recusar ofertas de emprego usando o SDK. Uma vez recusada a oferta, o emprego é oferecido ao próximo trabalhador disponível. O emprego não é oferecido ao mesmo trabalhador que recusou o emprego até que o trabalhador seja cancelado e registrado novamente.
// 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());
Oferta de repetição depois de algum tempo
Em alguns cenários, um trabalhador pode querer repetir automaticamente uma oferta depois de algum tempo. Por exemplo, um trabalhador pode querer repetir uma oferta após 5 minutos. Para atingir esse fluxo, o trabalhador pode usar o SDK para recusar a oferta e especificar a retryOfferAfter
propriedade.
// 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)))));
Conclua o trabalho
Depois que o trabalhador tiver concluído o trabalho associado ao trabalho (por exemplo, concluído a chamada), concluiremos o trabalho, que atualiza o status para 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);
Fechar o trabalho
Quando o trabalhador estiver pronto para assumir novos trabalhos, ele deve fechar o trabalho, o que atualiza o status para closed
. Opcionalmente, o trabalhador pode fornecer um código de disposição para indicar o resultado do trabalho.
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"))));