0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon Connect “オペレーション時間” 機能で実現する自動開閉局制御

Last updated at Posted at 2025-05-22

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)を組み合わせて、時間外はボットに対応させる…なんて拡張も夢が広がりますが、まずは足元の「時間設定」を盤石にしておきましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?