Compartilhar via


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

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