Partage via


Planification d’une tâche

Dans le contexte d’un centre d’appels, les clients peuvent souhaiter recevoir un rappel planifié ultérieurement. Dans ce cas, vous devez créer une tâche planifiée dans le Routeur de tâches.

Prérequis

Créer une tâche à l’aide de ScheduleAndSuspendMode

Dans l’exemple suivant, une tâche est créée et planifiée pour s’exécuter trois minutes plus tard en affectant la valeur ScheduleAndSuspendMode à MatchingMode avec un paramètre scheduleAt. Cet exemple part du principe que vous avez créé une file d’attente avec le queueId Callback, et qu’un collaborateur actif est inscrit auprès de la file d’attente avec une capacité disponible sur le canal Voice.

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

Remarque

L’état de la tâche après sa planification est initialement PendingSchedule, et une fois que le Routeur de tâches a planifié correctement la tâche, l’état est mis à jour avec la valeur Scheduled.

Attendre que l’heure planifiée soit atteinte, puis mettre la tâche en file d’attente

Lorsque l’heure planifiée est atteinte, l’état de la tâche est mis à jour sur la valeur WaitingForActivation, et le Routeur de tâches émet un événement RouterJobWaitingForActivation vers Event Grid. S’il existe un abonnement à cet événement, certaines actions requises peuvent être effectuées avant d’activer l’appariement de la tâche avec un collaborateur. Par exemple, dans le contexte du centre de contacts, vous pourriez effectuer un appel sortant et attendre que le client accepte le rappel. Une fois les actions requises terminées, la tâche peut être mise en file d’attente en appelant la méthode UpdateJobAsync avec MatchingMode défini sur QueueAndMatchMode et la priorité définie sur 100 afin de trouver rapidement un collaborateur éligible, ce qui met à jour l’état de la tâche avec la valeur 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);
}

Étapes suivantes

i