Zjistěte, jak přijmout nebo odmítnout nabídky úloh směrovače úloh.
Tato příručka popisuje kroky, které je potřeba provést při sledování nabídky směrovače úloh. Popisuje také, jak přijmout nebo odmítnout nabídky úloh.
Požadavky
- Účet Azure s aktivním předplatným. Vytvořte si bezplatný účet Azure.
- Nasazený prostředek Azure Communication Services. Vytvořte prostředek komunikační služby.
- Volitelné: Dokončením rychlého startu začněte se směrovačem úloh.
Přijetí nabídek úloh
Po vytvoření úlohy sledujte událost vystavenou nabídkou pracovního procesu, která obsahuje ID pracovního procesu a ID nabídky úlohy. Pracovní proces může přijímat nabídky úloh pomocí sady SDK. Po přijetí nabídky je úloha přiřazena pracovníkovi a stav úlohy se aktualizuje na 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());
Odmítnutí nabídek úloh
Pracovní proces může odmítnout nabídky úloh pomocí sady SDK. Po odmítnutí nabídky se úloha nabídne dalšímu dostupnému pracovníkovi. Úloha není nabízena stejnému pracovnímu procesu, který úlohu odmítl, dokud se pracovní proces neregistruje a znovu nezaregistruje.
// 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());
Nabídka opakování po nějaké době
V některých scénářích může pracovní proces po nějaké době chtít nabídku automaticky zopakovat. Například pracovník může chtít nabídku opakovat po 5 minutách. K dosažení tohoto toku může pracovní proces pomocí sady SDK odmítnout nabídku a zadat retryOfferAfter
vlastnost.
// 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)))));
Dokončení úlohy
Jakmile pracovní proces dokončí práci přidruženou k úloze (například dokončil hovor), dokončíme úlohu, která aktualizuje stav na 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);
Zavření úlohy
Jakmile je pracovní proces připravený k převzetí nových úloh, měl by pracovní proces zavřít úlohu, která aktualizuje stav na closed
. Volitelně může pracovník poskytnout kód dispozice, který bude indikovat výsledek úlohy.
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"))));
Další kroky
- Přečtěte si, jak spravovat frontu směrovače úloh.
- Zjistěte, jak se přihlásit k odběru událostí směrovače úloh.