Agendar um trabalho
No contexto de um call center, os clientes podem querer receber um retorno de chamada agendado posteriormente. Como tal, você precisa criar um trabalho agendado no Job Router.
Pré-requisitos
- Uma conta do Azure com uma subscrição ativa. Crie uma conta gratuitamente.
- Um recurso de Serviços de Comunicação implantado. Crie um recurso de Serviços de Comunicação.
- Foi criada uma fila do Job Router com queueId
Callback
. - Foi criado um trabalhador do Job Router com capacidade de
Voice
canal no canal. - Inscreva-se no evento JobWaitingForActivation.
- Opcional: Conclua o início rápido para começar a usar o Job Router.
Criar um trabalho usando o ScheduleAndSuspendMode
No exemplo a seguir, é criado um trabalho agendado para daqui a 3 minutos, definindo o MatchingMode
para ScheduleAndSuspendMode
com um scheduleAt
parâmetro. Este exemplo pressupõe que você criou uma fila com o queueId Callback
e que há um trabalhador ativo registrado na fila com capacidade disponível no Voice
canal.
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))));
Nota
O status do trabalho depois de agendado é inicialmente PendingSchedule
, e assim que o Job Router agendar o trabalho com êxito, o status será atualizado para Scheduled
.
Aguarde até que a hora agendada seja atingida e, em seguida, enfileire o trabalho
Quando a hora agendada é atingida, o status do trabalho é atualizado e WaitingForActivation
o Job Router emite um evento RouterJobWaitingForActivation para a Grade de Eventos. Se esse evento for inscrito, algumas ações necessárias poderão ser executadas, antes de permitir que o trabalho seja correspondido a um trabalhador. Por exemplo, no contexto do contact center, tal ação pode ser fazer uma chamada de saída e esperar que o cliente aceite o retorno de chamada. Quando as ações necessárias forem concluídas, o trabalho poderá ser enfileirado chamando o UpdateJobAsync
método com o MatchingMode
definido como QueueAndMatchMode
e a prioridade definida para 100
encontrar rapidamente um trabalhador qualificado, que atualiza o status do trabalho para 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);
}
Próximos passos
posso
- Saiba como aceitar a oferta do Job Router que é emitida assim que um trabalhador correspondente é encontrado para o trabalho.