Amazon Connect + Lambdaで本人確認フローを作ってみた
目次
はじめに
こんにちは!ベンジャミンの眞木です。
今回は、Amazon ConnectとLambdaを使って簡単な電話番号の認証フローを作ります!
電話を使った本人確認等で活用してみてください。
Amazon Connectとは?
Amazon Connectとは、クラウド上で簡単にコンタクトセンターを構築できるサービスで、今回のように電話対応の自動化などが実現できます。
詳しくは公式の説明をご覧ください。
https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/what-is-amazon-connect.html
事前準備
前提として、既にAmazon Connectでインスタンスを作成し、有効な電話番号を取得しているところから始めます。
東京リージョンで番号を取得するには、いくつか書類を提出する必要があります。
こちらも詳しくは下記のリンクを参照してください。
https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/connect-tokyo-region.html
フローの作成
それでは、取得した番号を使ってフローを作っていきましょう。
①Lambda関数を作成する
今回はLambda関数に渡された架電元の電話番号を検証して、正しい番号であればtrueを返すだけの簡単なLambda関数を作ります。
実際はこの番号を使ってRDSやDynamoDBを編集したり参照したりできるので、テーブルのデータを使って電話番号の認証ができます。
Node.js 22.xでphone-number-checkという名前で作成します。
比較対象の電話番号は公開用にダミーにしていますが、実際は有効な番号にしました。
Amazon Connectから渡される電話番号は国番号 + 電話番号なので、日本の番号であれば例のように+81から始まる番号になります。
export const handler = async (event) => {
// 入力された電話番号を取得
const inputPhoneNumber = event.Details.ContactData.CustomerEndpoint.Address;
// 比較対象の電話番号
const targetPhoneNumber = "+819012345678";
// 比較結果
const result = inputPhoneNumber === targetPhoneNumber ? true : false;
// Amazon Connectのフローで使用できる形式の結果を返す
return {
result
};
};
②Lambda関数を追加する
Amazon Connectのインスタンスに先ほど作成したLambda関数を追加して、管理者用ワークスペースから呼び出せるようにします。
まずはインスタンスの一覧から、使用したいインスタンスのエイリアスをクリックします。

次に、インスタンスの概要画面の左下、問い合わせフローを選択します。

表示画面を下にスクロールするとAWS Lambdaの項目があるので、そこで先ほど作成したLambda関数を選択してAdd Lambda Functionをクリックします。

このように一覧に追加されていれば完了です!

③フローを作成する
それではメインであるフローの作成に入ります!
まずはインスタンスの概要画面まで戻り、Log in for emergency accessをクリックします。
※この方法は日常のオペレーションでは非推奨となっていますが、検証なのでこちらから進めます。
※下記のリンクの手順で、Access URLからログインできるユーザーを作成できます。
https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/manage-users.html

ワークスペースにログインできました。
これ以降はこの中での作業となります。

左側のメニューから、ルーティング>フローを選択します。

フローの一覧が表示されるので、フローを作成をクリックします。

このような画面でフローを作成します。
わかりやすいGUIなので、簡単に操作できると思います!

左側のブロックライブラリから、設定>音声の設定の項目をドラッグ&ドロップでエントリの右横に設置します。
そして、エントリから音声の設定への矢印を繋ぎます。

音声の設定の右上の3つの点のアイコンをクリックし、設定を編集を選択します。
今回は日本語(日本)を選択して音声はKazuhaにして保存します。

続いて、統合>AWS Lambda 関数を呼び出すの項目をドラッグ&ドロップでその右に設置します。
そして、音声の設定からAWS Lambda 関数を呼び出すへの矢印を繋ぎます。

先ほどと同様に設定を編集を選択します。
関数のARNの項目で先ほど作成した関数を選択して保存します。
今回は簡単な処理なので初期値の3秒から変えませんが、もう少し複雑な処理をしたい場合はタイムアウトの秒数を延ばしてください。(最大8秒)

次に、チェック>コンタクト属性を確認するの項目をドラッグ&ドロップでその右に設置します。
そして、AWS Lambda 関数を呼び出すからコンタクト属性を確認するへの矢印を繋ぎます。
Lambda関数がエラーになったらtrueを返さないだけなので、エラーの場合も繋いでしまいます。

先ほどと同様に設定を編集を選択します。
確認する属性の項目で、名前空間を外部とし、キーをresultとします。キーの部分はLambda関数のreturnで返しているものを入れてください。
チェックする条件は、条件を次と等しいとし、値をtrueにして保存します。値もLambda関数から返すものです。

次に、インタラクション>プロンプトの再生の項目をドラッグ&ドロップでその右に2つ設置します。
そして、コンタクト属性を確認するからプロンプトの再生への矢印を繋ぎますが、コンタクト属性を確認するが成功している(一致している)場合と失敗している(一致していない)場合のそれぞれを別のルートに繋ぎます。

成功の場合のプロンプトの再生で、設定を編集を選択します。
テキスト読み上げまたはチャットテキストの項目で「電話番号チェックに成功しました。」と入力して保存します。
失敗の場合も同様にして「電話番号チェックに失敗しました。」と入力して保存します。

最後に、終了>切断の項目を一番右にドラッグ&ドロップし、プロンプトの再生から出ている矢印を全て切断に繋ぎます。
あとはフローに名前をつけて、保存と公開をクリックしたら完了です。

以上でフローの作成が完了しました。
④電話番号にフローを紐付ける
左側のメニューから、チャネル>電話番号を選択します。

インスタンス内の電話番号の一覧が表示されるので、使用したい電話番号をクリックします。

下にスクロールするとコンタクトフロー/IVRの項目があるので、先ほど作成したフローを選択して保存します。

これでフローの作成と紐付けは完了です!
それでは、実際に電話をかけてみましょう。
実際に動かしてみる
音声が流れるだけなので目に見える形で結果をお見せできないのですが、正しい電話番号のときは「電話番号チェックに成功しました。」と流れて、間違った電話番号のときは「電話番号チェックに失敗しました。」と流れることが確認できました。
まとめ
このようにAmazon Connectを使えば、簡単に電話での自動応答や認証のフローを作成して公開することができます。
電話番号を取得する手続きが少々面倒ですが、活用できる場面は多くあると思うので試してみてください!