Dowiedz się, jak zaakceptować lub odrzucić oferty zadań routera zadań
W tym przewodniku opisano kroki, które należy wykonać, aby obserwować ofertę routera zadań. Zawiera on również opis sposobu akceptowania lub odrzucania ofert pracy.
Wymagania wstępne
- Konto platformy Azure z aktywną subskrypcją. Utwórz bezpłatne konto platformy Azure.
- Wdrożony zasób usług Azure Communication Services. Utwórz zasób usług komunikacyjnych.
- Opcjonalnie: ukończ przewodnik Szybki start, aby rozpocząć pracę z routerem zadań.
Akceptowanie ofert zadań
Po utworzeniu zadania obserwuj zdarzenie wystawione przez proces roboczy, które zawiera identyfikator procesu roboczego i identyfikator oferty zadania. Proces roboczy może akceptować oferty zadań przy użyciu zestawu SDK. Po zaakceptowaniu oferty zadanie zostanie przypisane do procesu roboczego, a stan zadania zostanie zaktualizowany do 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());
Odrzucanie ofert zadań
Proces roboczy może odrzucać oferty zadań przy użyciu zestawu SDK. Po odrzuceniu oferty zadanie jest oferowane następnemu dostępnemu procesowi roboczemu. Zadanie nie jest oferowane dla tego samego procesu roboczego, który odrzucił zadanie, dopóki proces roboczy nie zostanie wyrejestrowany i zarejestrowany ponownie.
// 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());
Ponów próbę oferty po pewnym czasie
W niektórych scenariuszach proces roboczy może chcieć automatycznie ponowić próbę oferty po pewnym czasie. Na przykład pracownik może chcieć ponowić próbę oferty po upływie 5 minut. Aby osiągnąć ten przepływ, proces roboczy może użyć zestawu SDK do odrzucenia oferty i określenia retryOfferAfter
właściwości.
// 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)))));
Ukończenie zadania
Gdy proces roboczy ukończy pracę skojarzona z zadaniem (na przykład ukończono wywołanie), wykonamy zadanie, które aktualizuje stan 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);
Zamykanie zadania
Gdy proces roboczy będzie gotowy do podjęcia nowych zadań, proces roboczy powinien zamknąć zadanie, które aktualizuje stan na closed
. Opcjonalnie proces roboczy może dostarczyć kod dyspozycji, aby wskazać wynik zadania.
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"))));