Planowanie zadań
W kontekście centrum telefonicznego klienci mogą chcieć otrzymać zaplanowane wywołanie zwrotne w późniejszym czasie. W związku z tym należy utworzyć zaplanowane zadanie w routerze zadań.
Wymagania wstępne
- Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
- Wdrożony zasób usług komunikacyjnych. Utwórz zasób usług komunikacyjnych.
- Utworzono kolejkę routera zadań z identyfikatorem queueId
Callback
. - Utworzono proces roboczy routera zadań z pojemnością kanału w
Voice
kanale. - Zasubskrybuj zdarzenie JobWaitingForActivation.
- Opcjonalnie: ukończ przewodnik Szybki start, aby rozpocząć pracę z routerem zadań.
Tworzenie zadania przy użyciu elementu ScheduleAndSuspendMode
W poniższym przykładzie zostanie utworzone zadanie, które jest zaplanowane 3 minuty od teraz, ustawiając wartość na MatchingMode
ScheduleAndSuspendMode
z parametrem scheduleAt
. W tym przykładzie przyjęto założenie, że utworzono kolejkę z identyfikatorem queueId Callback
i że w kolejce zarejestrowano aktywny proces roboczy z dostępną pojemnością w Voice
kanale.
await client.CreateJobAsync(new CreateJobOptions(jobId: "job1", channelId: "Voice", queueId: "Callback")
{
MatchingMode = new ScheduleAndSuspendMode(scheduleAt: DateTimeOffset.UtcNow.Add(TimeSpan.FromMinutes(3)))
});
await client.path("/routing/jobs/{jobId}", "job1").patch({
body: {
channelId: "Voice",
queueId: "Callback",
matchingMode: {
kind: "scheduleAndSuspend",
scheduleAt: new Date(Date.now() + 3 * 60000)
}
},
contentType: "application/merge-patch+json"
});
client.upsert_job(
job_id = "job1",
channel_id = "Voice",
queue_id = "Callback",
matching_mode = ScheduleAndSuspendMode(schedule_at = datetime.utcnow() + timedelta(minutes = 3)))
client.createJob(new CreateJobOptions("job1", "Voice", "Callback")
.setMatchingMode(new ScheduleAndSuspendMode(OffsetDateTime.now().plusMinutes(3))));
Uwaga
Stan zadania po zaplanowaniu wynosi początkowo PendingSchedule
, a gdy router zadań pomyślnie zaplanuje zadanie, stan zostanie zaktualizowany do Scheduled
.
Poczekaj na osiągnięcie zaplanowanego czasu, a następnie utwórz kolejkę zadania
Po osiągnięciu zaplanowanego czasu stan zadania jest aktualizowany na WaitingForActivation
wartość i Router zadania emituje zdarzenie RouterJobWaitingForActivation do usługi Event Grid. Jeśli to zdarzenie jest subskrybowane, przed włączeniem dopasowania zadania do procesu roboczego mogą zostać wykonane pewne wymagane akcje. Na przykład w kontekście centrum kontaktów taka akcja może spowodować nawiązanie połączenia wychodzącego i oczekiwanie na zaakceptowanie wywołania zwrotnego przez klienta. Po zakończeniu wymaganych akcji zadanie można utworzyć w kolejce, wywołując UpdateJobAsync
metodę z MatchingMode
ustawioną wartością QueueAndMatchMode
i ustawionym priorytetem w celu 100
szybkiego znalezienia kwalifikującego się procesu roboczego, który aktualizuje stan zadania na queued
.
// Event Grid Event Handler code omitted
if (eventGridEvent.EventType == "Microsoft.Communication.RouterJobWaitingForActivation")
{
// Perform required actions here
await client.UpdateJobAsync(new RouterJob(jobId: eventGridEvent.Data.JobId)
{
MatchingMode = new QueueAndMatchMode(),
Priority = 100
});
}
// Event Grid Event Handler code omitted
if (eventGridEvent.EventType == "Microsoft.Communication.RouterJobWaitingForActivation")
{
// Perform required actions here
await client.path("/routing/jobs/{jobId}", eventGridEvent.data.jobId).patch({
body: {
matchingMode: { kind: "queueAndMatch" },
priority: 100
},
contentType: "application/merge-patch+json"
});
}
# Event Grid Event Handler code omitted
if (eventGridEvent.event_type == "Microsoft.Communication.RouterJobWaitingForActivation")
{
# Perform required actions here
client.upsert_job(
job_id = eventGridEvent.data.job_id,
matching_mode = queue_and_match_mode = {},
priority = 100)
}
// Event Grid Event Handler code omitted
if (eventGridEvent.EventType == "Microsoft.Communication.RouterJobWaitingForActivation")
{
// Perform required actions here
job = client.updateJob(eventGridEvent.getData().toObject(new TypeReference<Map<String, Object>>() {
}).get("JobId").toString(), BinaryData.fromObject(new RouterJob()
.setMatchingMode(new QueueAndMatchMode())
.setPriority(100)), null).toObject(RouterJob.class);
}
Następne kroki
i
- Dowiedz się, jak zaakceptować ofertę routera zadań wystawioną po znalezieniu pasującego procesu roboczego dla zadania.