Agendando um trabalho
No contexto de um call center, os clientes podem querer receber um retorno de chamada agendado posteriormente. Dessa forma, você precisa criar um trabalho agendado no Roteador de Trabalhos.
Pré-requisitos
- Uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
- Um recurso dos Serviços de Comunicação implantado. Crie um recurso dos Serviços de Comunicação.
- Uma fila do Roteador de Trabalhos com queueId
Callback
foi criada. - Um trabalho do Roteador de Trabalhos com capacidade de canal no canal
Voice
foi criado. - Assine o evento JobWaitingForActivation.
- Opcional: concluir o guia de início rápido Introdução ao Roteador de Trabalho.
Criar um trabalho usando ScheduleAndSuspendMode
No exemplo a seguir, um trabalho é criado que está agendado daqui a três minutos, definindo MatchingMode
como ScheduleAndSuspendMode
com um parâmetro scheduleAt
. Este exemplo pressupõe que você tenha criado uma fila com a queueId Callback
e que haja um trabalho ativo registrado na fila com capacidade disponível no 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))));
Observação
O status do trabalho após o agendamento é inicialmente PendingSchedule
e, depois que o Roteador de Trabalhos agenda o trabalho com êxito, o status é atualizado para Scheduled
.
Aguarde a hora agendada ser alcançada e enfileire o trabalho
Quando a hora agendada é atingida, o status do trabalho é atualizado para WaitingForActivation
e o Roteador de Trabalhos emite um evento RouterJobWaitingForActivation para a Grade de Eventos. Se esse evento for assinado, algumas ações necessárias poderão ser executadas antes de habilitar o trabalho a ser correspondido a um a função de trabalho. Por exemplo, no contexto da central de contatos, essa ação pode estar fazendo uma chamada de saída e aguardando o cliente aceitar o retorno de chamada. Depois que as ações necessárias forem concluídas, o trabalho poderá ser enfileirado chamando o método UpdateJobAsync
com o conjunto MatchingMode
e a prioridade QueueAndMatchMode
definidos como 100
para localizar rapidamente uma função de trabalho qualificada, 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óximas etapas
i
- Saiba como aceitar a oferta do Roteador de Trabalhos que é emitida depois que uma função de trabalho correspondente é encontrada para o trabalho.