- AWS Builder Center›
- builders.flash
はじめに
こんにちは。ソリューションアーキテクトの森です。
医療機関やサービス業においては、予約のノーショー (無断キャンセル) が大きな課題となっています。予約日時に合わせて電話でリマインドすることで、ノーショー率を大幅に下げられることが知られていますが、スタッフが手動で電話をかけるのは時間と人的コストがかかります。
本記事では、AWS が提供するサーバーレスサービスを活用して、Web 予約システムと連携した自動予約リマインドシステムを構築する方法をご紹介します。Amazon Connect のアウトバウンドコール機能を使うことで、顧客の応答に基づいた予約の確定やキャンセル処理が自動的に実現できるようになります。
ご注意
本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。
builders.flash メールメンバー登録
builders.flash メールメンバー登録で、毎月の最新アップデート情報とともに、AWS を無料でお試しいただけるクレジットコードを受け取ることができます。
1. Amazon Connect のアウトバウンドコール機能とは ?
Amazon Connect は、クラウドベースのコンタクトセンターサービスとして知られていますが、「アウトバウンドコール機能」も提供しています。この機能を使うことで、システムから自動的に電話を発信して、顧客とのプロアクティブなコミュニケーションが可能となります。主な特徴を整理すると以下となります。
- Amazon Connect の StartOutboundVoiceContact API を用いることで数行のコードで外部への電話発信が実装可能
- コンタクトフローを使った柔軟な自動音声応答シナリオが実装可能
- Amazon Polly によるテキスト読み上げ機能で自然な音声案内が実装可能
- AWS サービスとのシームレスな連携が可能
Amazon Connect を使うことで、既存の AWS インフラと容易に統合でき、スケーラブルなソリューションを迅速に構築することが可能となります。
2. アーキテクチャ概要
今回構築するシステムのアーキテクチャは以下の通りです。
アーキテクチャ構成
フロントエンド
- Web予約システム:
顧客が予約情報を登録する Web アプリケーション(React)
バックエンド
- Amazon API Gateway:Web 予約システムからの予約データを受け取る API エンドポイント
- AWS Lambda:
- 予約登録(reservation-register-lambda)- 予約情報の処理して Amazon DynamoDB へ保存
- 電話発信(reservation-call-lambda)- 予約情報を抽出して Amazon Connect を用いて電話を発信
- 予約更新(reservation-cancel-lambda) - 顧客応答に基づいて DynamoDB 内の予約情報を更新 - Amazon DynamoDB:予約情報を管理するデータベース
- Amazon EventBridge:定期的に予約情報に基づいたリマインド処理を実行するスケジューラー
- Amazon Connect:リマインドコールの発信
主な処理フロー
- 顧客が Web インターフェースから予約情報を入力
- Amazon API Gateway, Lambda を経由して予約情報を Amazon DynamoDB に保存
- Amazon EventBridge が定期的 (例 : 1 時間ごと) にリマインド処理 Lambda を実行
- Lambda 関数は直近の予約を確認してリマインド対象となる予約を抽出し、Amazon Connect の StartOutboundVoiceContact API を用いて対象顧客に自動発信 (*)
- 事前設計されたコンタクトフローに基づいて予約詳細の案内と確認を実施
- 顧客の電話キー応答(例:1 で確定、2 でキャンセル)に基づき処理分岐
- 顧客の応答結果に応じて Lambda 経由で DynamoDB 内の予約情報を更新
(*) Amazon Connect の同時呼び出し数のクォータ を考慮した実装が必要になります。
(*) 日本の携帯電話番号(+8170/80/90)への発信はデフォルトでは制限されている場合があるため、サポートケースの作成が必要となる可能性がございます。
このアーキテクチャのメリットは、サーバーレスで構成されているため運用負荷が少なく、スケーラビリティも高いことです。また、AWS サービス間のシームレスな連携により、セキュリティも確保されています。
3. 環境の構築
3-1. Web 予約システムの構築(フロントエンド)
今回は病院の予約システムという設定で、左のような UI の Web 予約フォームを作成しました。以下の 6 項目を入力とする予約システムとしました。
- 氏名
- 電話番号
- 診療科
- 日付
- 時間
- 症状
3-2. Web 予約システムの構築(バックエンド)
入力された内容は API Gateway と Lambda (reservation-register-lambda) を経由して、DynamoDB に登録されます。 DynamoDB テーブルは以下のような構造で設計しました。
{
"reservationId": "xxxx-xx-xxxx", // 予約ID
"patientName": "アマゾン タロウ", // 氏名
"phoneNumber": "080xxxxxxxx", // 電話番号
"appointmentDate": "2025-08-18", // 予約日
"appointmentTime": "11:30", // 予約時間
"department": "内科", // 診療科
"symptoms": "頭痛がします。", // 症状メモ
"status": "confirmed", // 予約状態
"reminderCalled": false, // リマインド実行フラグ
"reminderCalledAt": null, // リマインド実行日時
"connectContactId": null, // Amazon Connect 問い合わせ ID
"createdAt": "2025-08-18T03:26:34.252Z", // 作成タイムスタンプ
"cancelledAt": null // キャンセル日時
}
3-3. Amazon Connect コンタクトフローの構築
それではリマインドコールを実施する Amazon Connect のコンタクトフローを構築していきましょう。 コンタクトフローの全体像は以下のようになります。
プロンプトの再生
最初に自動音声による案内であることを伝えるウェルカムメッセージを再生します。
顧客の入力を取得する
Lambda 関数から動的に生成された予約内容を含むプロンプトを再生し、顧客からの DTMF 入力 (電話のキー操作) を待ち受けます。
ダイヤルボタンの「1」が選択された場合は予約内容確認完了、「2」が選択された場合は予約キャンセルと分岐していきます。
顧客の入力を求める際にアナウンスするプロンプトは以下で定義された Lambda 関数 (reservation-call-lambda) から渡された値「$.Attributes.fullText」を利用します。
顧客の入力を求める際にアナウンスするプロンプト
//reservation-call-lambda.py
# プロンプトテキストを構築
full_text = f"{reservation.get('patientName', '')}様、本日{reservation.get('appointmentDate', '')}の{reservation.get('appointmentTime', '')}に{reservation.get('department', '')}での診察予約があります。予約内容に間違いがなければ「1」を押してください。予約内容をキャンセルする場合は「2」を入力してください。"
simple_attributes = {
'fullText': full_text,
'reservationId': reservation.get('reservationId', '')
}
# Amazon Connect のアウトバウンドコール実行(Boto3)
response = connect.start_outbound_voice_contact(
DestinationPhoneNumber=phone_number,
ContactFlowId=contact_flow_id,
InstanceId=instance_id,
SourcePhoneNumber=source_phone,
Attributes=simple_attributes
)
Lambda を呼び出す
Amazon Connect ではコンタクトフロー内から Lambda 関数を呼び出すことが可能です。
前述の「顧客の入力を取得する」ブロックで、「2」が選択された場合は予約内容のキャンセル処理を実施する Lambda 関数 (reservation-cancel-lambda) を呼び出すようにします。
この際、確認対象の予約 ID (識別子) を Lambda に渡す必要があるため、「関数入力パラメータ」にて「$.Attributes.reservationId」を指定しております。
4. テスト・動作確認
リマインドコールの設定
では実際に予約情報に基づいたリマインドコールが発信される動作を検証してみます
リマインダーコールの確認・キャンセル
ちゃんと予約情報と一致していますね。私の頭痛は収まったので予約はキャンセルしておきましょう。
システム構築完了
コンタクトフロー上で定義した通り、キャンセル処理を実施したことを案内するプロンプトが再生されました。DynamoDB 上で status が cancelled に更新されていることも確認できました。
以上で、予約情報に基づいた自動リマインド電話を発信して、顧客の応答に基づいて予約情報を更新するシステムの構築が完了しました。このシステムにより、医療機関は予約リマインド業務を自動化でき、スタッフの業務負荷を軽減しながら、顧客のノーショー率を削減することが可能となります。
まとめ
Amazon Connect のアウトバウンドコール機能を活用することで、Web 予約システムと連携した自動リマインドコールシステムを簡単に構築できることができました。サーバーレスアーキテクチャを採用することで、運用負荷を軽減しながら高いスケーラビリティも実現できます。
今回紹介したシステムは以下のような様々なユースケースでの活用が考えられます。
- 医療機関やサービス業における予約確認
- イベントやセミナーの参加確認
- 商品配達の事前連絡
- サービス訪問の確認
AWS 環境をすでに活用している方にとっては、Amazon Connect を予約リマインドシステムに活用することは、新たなコミュニケーションチャネルを効率的に運用する有効な手段となるでしょう。
この記事が参考になれば幸いです。
筆者プロフィール
森 瞭輔 (Mori Ryosuke)
アマゾン ウェブ サービス ジャパン合同会社
ソリューションアーキテクト
ソリューションアーキテクトとして幅広いお客様の AWS 導入支援を担当しています。甘いものが好きです。先日念願だったフルマラソン完走を達成することができました。