Dela via


Schemalägga ett jobb

I samband med ett callcenter kanske kunderna vill få ett schemalagt återanrop vid ett senare tillfälle. Därför måste du skapa ett schemalagt jobb i Jobbrouter.

Förutsättningar

Skapa ett jobb med ScheduleAndSuspendMode

I följande exempel skapas ett jobb som är schemalagt 3 minuter från och med nu genom att ange MatchingMode till ScheduleAndSuspendMode med en scheduleAt parameter. Det här exemplet förutsätter att du har skapat en kö med queueId Callback och att det finns en aktiv arbetare registrerad i kön med tillgänglig kapacitet på Voice kanalen.

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))));

Kommentar

Jobbets status efter att ha schemalagts är ursprungligen PendingSchedule, och när jobbroutern har schemalagt jobbet uppdateras statusen till Scheduled.

Vänta tills den schemalagda tiden har nåtts och köa sedan jobbet

När den schemalagda tiden har nåtts uppdateras jobbets status till WaitingForActivation och Jobbrouter genererar en RouterJobWaitingForActivation-händelse till Event Grid. Om den här händelsen prenumererar kan vissa nödvändiga åtgärder utföras innan jobbet matchas med en arbetare. I kontaktcentrets kontext kan en sådan åtgärd till exempel vara att ringa ett utgående samtal och vänta på att kunden ska acceptera återanropet. När de nödvändiga åtgärderna har slutförts kan jobbet köas genom att anropa UpdateJobAsync metoden med inställningen och prioriteten MatchingMode inställd 100 på för att snabbt hitta en berättigad arbetare, vilket uppdaterar jobbets status till queued.QueueAndMatchMode

// 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);
}

Nästa steg

i