ジョブのスケジュール設定
コール センターのコンテキストでは、顧客は後でコールバックを受け取るスケジュールの設定を望むことがあります。 そのような場合は、Job Router でスケジュールされたジョブを作成する必要があります。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- デプロイ済みの Communication Services リソース。 Communication Services リソースを作成します。
- queueId
Callback
が作成されている Job Router キュー。 Voice
チャネルでチャネル容量が作成されている Job Router ワーカー。- JobWaitingForActivation イベントをサブスクライブします。
- 省略可能: Job Router を開始するためのクイックスタートを完了します。
ScheduleAndSuspendMode を使用してジョブを作成する
次の例では、scheduleAt
パラメーターを含む ScheduleAndSuspendMode
に MatchingMode
を設定することで、今から 3 分後にスケジュールされたジョブが作成されます。 この例では、queueId が Callback
であるキューが作成されていること、および Voice
チャネルに使用可能な容量を持つキューにアクティブな worker が登録されていることが想定されています。
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))));
Note
スケジュールされた後のジョブの状態は、最初は PendingSchedule
であり、Job Router がジョブを正常にスケジュールすると、状態は Scheduled
に更新されます。
スケジュールされた日時に達するのを待ってから、ジョブをキューに入れる
スケジュールされた日時になると、ジョブの状態は WaitingForActivation
に更新され、Job Router は Event Grid に RouterJobWaitingForActivation イベントを送信します。 このイベントがサブスクライブされている場合は、ジョブとワーカーを照合できるようになる前に、必要なアクションがいくつか実行される可能性があります。 たとえば、コンタクト センターのコンテキストでは、このようなアクションとして、こちらから呼び出しを行い、顧客がコールバックを受けるのを待つような場合があります。 必要なアクションが完了したら、MatchingMode
を QueueAndMatchMode
に設定し、優先度を 100
に設定して UpdateJobAsync
メソッドを呼び出し、対応できるワーカーを急いで見つけることができます。これにより、ジョブの状態は 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);
}
次のステップ
i
- ジョブに一致するワーカーが見つかると発行される Job Router オファーを受け付ける方法を学習します。