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
- Compte Azure avec un abonnement actif. Créez un compte gratuitement.
- Une ressource Communication Services déployée. Créez une ressource Communication Services.
- Une file d’attente Routeur de tâches avec queueId
Callback
a été créée. - Un collaborateur Routeur de tâches avec une capacité de canal sur le canal
Voice
a été créé. - S’abonner à l’événement JobWaitingForActivation.
- Facultatif : suivre le guide de démarrage rapide pour bien démarrer avec Job Router.
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
- Découvrez comment accepter l’offre du Routeur de tâches émise une fois qu’un collaborateur approprié a été trouvé pour la tâche.