Freigeben über


Planen eines Auftrags

Im Kontext eines Callcenters möchten Kunden möglicherweise zu einem späteren Zeitpunkt einen geplanten Rückruf erhalten. Daher müssen Sie einen geplanten Auftrag im Auftragsrouter erstellen.

Voraussetzungen

Erstellen eines Auftrags mithilfe von ScheduleAndSuspendMode

Im folgenden Beispiel wird ein Auftrag erstellt, der in 3 Minuten ausgeführt werden soll. Dazu legen Sie MatchingMode auf ScheduleAndSuspendMode mit einem scheduleAt-Parameter fest. In diesem Beispiel wird davon ausgegangen, dass Sie eine Warteschlange mit der Warteschlangen-ID (queueId) Callback erstellt haben und dass ein aktiver Worker in der Warteschlange mit verfügbarer Kapazität im Voice-Kanal registriert ist.

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

Hinweis

Der Status des Auftrags nach der Planung lautet anfangs PendingSchedule. Sobald der Auftragsrouter den Auftrag erfolgreich plant, wird der Status auf Scheduled aktualisiert.

Warten Sie, bis der geplante Zeitpunkt erreicht ist, und stellen Sie den Auftrag dann in die Warteschlange.

Wenn der geplante Zeitpunkt erreicht ist, wird der Status des Auftrags auf WaitingForActivation aktualisiert, und der Auftragsrouter gibt ein RouterJobWaitingForActivation-Ereignis an Event Grid aus. Wenn dieses Ereignis abonniert wird, können einige erforderliche Aktionen ausgeführt werden, bevor der Auftrag einem Worker zugeordnet werden kann. Im Kontext des Callcenters könnte eine solche Aktion beispielsweise einen ausgehenden Anruf und das Warten darauf umfassen, dass der Kunde den Rückruf annimmt. Sobald die erforderlichen Aktionen abgeschlossen sind, kann der Auftrag in die Warteschlange gestellt werden. Rufen Sie dazu die UpdateJobAsync-Methode auf, bei der MatchingMode auf QueueAndMatchMode und die Priorität auf 100 festgelegt ist, um schnell einen berechtigten Worker zu ermitteln. Der Auftragsstatus wird auf queued aktualisiert.

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

Nächste Schritte

i