Amazon Connectの設計図、特に「営業時間(Hours of Operation)」周りについてまとめました。
ここを曖昧にしておくと、深夜や休日にコールセンターの電話が鳴り響く……なんていうホラーな事態になりかねません。
顧客体験を守るためにも、そして運用担当者の胃を守るためにも、しっかりと設計しておきましょう。
アーキテクチャの全体像
まずは、電話がかかってきてから「いま営業時間内?」と判断するまでの流れです。
Route 53からインスタンスに入って、どこで時間をチェックするか。
顧客端末 ─▶ Route 53 ─▶ Amazon Connect インスタンス
│ │
│ ├─ キュー設定(ここで一律判定するか)
│ └─ コンタクトフロー(個別にブロックで判定するか)
│ │
▼ │
FAQ/IVR ←───────────────┘
要は、営業時間内ならオペレーターへ、時間外なら「本日の営業は終了しました」というIVRやFAQへ流す。
この分岐をどこで作るかが設計のキモになります。
なぜこれをやるのか
単純に「オペレーターがいない時間に電話を鳴らさない」ためですが、ユースケースを想像するともう少し具体的になります。
例えば、ECサイトで注文直後に「あ、間違えた!」と焦って電話をかけてくるお客様。
もしそれが夜中の2時だったら?
ここで無機質に呼び出し音が鳴り続けるより、「Webサイトのマイページからキャンセル可能です」とアナウンスしてあげたほうが、お互いに幸せですよね。
そういう「気の利いた対応」の第一歩がこの時間設定です。
実装のアプローチは2つ
設定方法は大きく分けて「楽をするか(キュー設定)」、「こだわり抜くか(フロー内ブロック)」の2パターンあります。
1. キュー設定(シンプルイズベスト)
各キュー(窓口)に直接、営業時間カレンダーを紐付ける方法です。
コンソールの「連絡先キュー」からポチッとカレンダーを選ぶだけ。
メリット
設定がとにかく楽。管理画面を見るだけで「あ、この窓口は平日9-17時ね」と一発で分かります。
CloudFormationで書くなら
Resources:
SupportQueue:
Type: AWS::Connect::Queue
Properties:
InstanceId: !Ref ConnectInstance
Name: "CustomerSupportQueue"
HoursOfOperationId: !Ref BusinessHoursJP
2. コンタクトフロー内ブロック(自由度重視)
フローの中に「Check hours of operation」という判定ブロックを置く方法です。
「この番号にかかってきた時だけ、特別な営業時間判定を入れたい」みたいなワガママな要件にも対応できます。
メリット
時間外の挙動を細かく作り込めます。「時間外だけど、緊急対応のVIP客だけは通す」みたいな分岐も、やろうと思えば作れてしまうのがこのパターンの強み。
<CheckHoursOfOperation
HoursOfOperationARN="arn:aws:connect:…:hours-of-operation/BusinessHoursJP"
IfWithinHoursBranch="InsideFlow"
IfOutsideHoursBranch="OutsideFlow"/>
祝日設定の「自動化」という救済措置
一番面倒なのが、毎年変わる祝日の更新です。
手動更新は絶対に忘れる自信があるので、Lambdaで外部APIから祝日データを取ってきて、勝手にConnectの設定を書き換える仕組みを作っておくのが吉です。
Lambdaサンプル (Python)
import boto3, requests, datetime, json
CONNECT_ID = "abcdefgh-1234-5678-..."
HOURS_ID = "hours-01"
API_URL = "https://holidays-jp.github.io/api/v1/date.json"
def lambda_handler(event, _):
holidays = requests.get(API_URL).json()
config = []
for d in holidays:
date = datetime.datetime.fromisoformat(d)
config.append({
# 曜日指定は必須なので形式的に
"Day": date.strftime("%A").upper(),
"StartTime": {"Hour":0, "Minute":0},
"EndTime": {"Hour":0, "Minute":0}
})
# ここでConnectの設定を上書き
boto3.client("connect").update_hours_of_operation(
InstanceId=CONNECT_ID,
HoursOfOperationId=HOURS_ID,
Config=config
)
これをEventBridgeで月イチくらいで回しておけば、運用担当者は枕を高くして眠れます。
結局、どっちを選べばいい?
迷ったら、最初は**「キュー設定」**で始めるのが無難です。
視認性が良いし、設定ミスも起きにくい。
ただ、運用していくうちに「時間外でも、特定の用件だけは受け付けたい」とか「曜日によってガイダンスを変えたい」という要望が必ず出てきます。
そうなったら**「フロー内ブロック」**に切り替える。
最初から複雑にしすぎないのが、長く運用するコツかもしれません。
最後に:テストは入念に
最後に一つだけ。
設定を変えたら、必ず「時間内」と「時間外」の両方で電話をかけてみてください。
特に祝日設定は、本番当日の朝に「あれ、繋がっちゃう?」と青ざめるパターンが多いので。
AIチャットボット(Lex)を組み合わせて、時間外はボットに対応させる…なんて拡張も夢が広がりますが、まずは足元の「時間設定」を盤石にしておきましょう。