📞

ワクチン予約システムに使われるAmazon Connectに入門してみた。

2021/05/04に公開

※ 5/5 午前10時現在、問い合わせフローの作成-2がまだです。

概要

コロナウイルスの切り札、ワクチン接種を受けるにあたり現在アクセス過多のため、ワクチン予約システムに繋がらない、電話が繋がらない等の問題が起こっています。

特に、インターネットやスマホを利用されていない高齢者の方々にとって、
「電話が繋がらない」が解消しない事にはワクチン予約が出来ません。
この問題が解決しない事には、我々若い世代や子供たちに機会が回ってこないのです。

この状況で注目されつつあるクラウド型コンタクトセンターサービスAmazon Connectを試してみました。ブラウザはGoogle chromeです。

2021年5月4日現在、個人では日本国内の電話番号を取得できません。国際電話をかける事になるので、電話料金が高額にならないように注意してください。

Amazon Connectで取得した電話番号に架電して、数値を入力します。
その数値をLambdaによってDynamoDBに書き込み、読み込みが出来る事を体験できました。

Amazon Connectの準備

AWS マネジメントコンソールで、Amazon Connectを検索してください。

Amazon Connect 仮想サポートセンターインスタンス、と表示されます。
「インスタンスを追加する」をクリックしてください。

Amazon Connect のリソース設定、と表示されます。
アクセスURLの空欄に任意の英数字を入力してください。
その後、画面下の「次のステップ」をクリックしてください。

ステップ 2: 管理者と表示されます。
新しい管理者の追加にチェックが入っているはずですので、空欄を埋めてください。

ステップ 3: テレフォニーオプションと表示されます。
デフォルト設定のまま、画面下の「次のステップ」をクリックしてください。

ステップ 4: データストレージと表示されます。
デフォルト設定のまま、画面下の「次のステップ」をクリックしてください。

ステップ 5: レビューと作成と表示されます。
デフォルト設定のまま、画面下の「インスタンスの作成」をクリックしてください。

「Amazon Connectのセットアップ
これには1,2分かかることがあります。
インスタンスの作成中には、ブラウザを閉じたり、ページを更新したりしないでください。」
とポップアップ表示されるので、しばし待ちます。

「成功
Amazon Connect が作成されました。
電話番号の選択、通話の着信、顧客とのやり取りを開始できます。」
と表示されます。
「今すぐ始める」をクリックしてください。

Englishの部分をクリックして、日本語表示に切り替えます。

「Amazon Connect へようこそ」と表示されるので、「今すぐ始める」をクリックします。

「connect.awsが次の許可を求めています
通知の表示」と表示されるので「許可」をクリックします。

「connect.awsが次の許可を求めています
マイクを使用する」と表示されるので「許可」をクリックします。

Amazon Connectで電話番号の取得

電話番号の取得と表示されます。

プルダウンから日本を選んで、タイプを切り替えても「その国でお使いいただける番号はありません。必要な場合は、サポートにお問い合わせください。」
と表示されるのみです。


一番近い香港を選択しましたが、画像のようになり、やっぱり表示されません。

イギリスを選択して、タイプをDID(直通ダイヤル)にすると、電話番号が選べたので、
電話番号を選んで「次へ」を選択します。

※ 料金無料通話を選んでしまうと万が一、電話番号が流失した場合、掛かってきた電話料金を支払う事になると思われるので、選択しない方がいいです。
※※ 公式ドキュメントの記載、確認中です。

「呼び出す
電話番号: +44 20 3885 7969 に別の電話を使用してダイヤルし、メニュー項目を選択して、エージェントに接続します。サイドにある Amazon Connect の Contact Control Panel (CCP) を使用して、通話を受信します。この電話番号に折り返して、Amazon Connect の詳細を確認することができます。」
と表示されます。
「Continue」をクリックしてください。

ダッシュボードと表示されます。

DynamoDBの設定

DynamoDBの画面を開いて、「テーブルの作成」をクリックします。

DynamoDB テーブルの作成と表示されます。
テーブル名 AmazonConnect-reserve-test

プライマリキー datetime
と入力し、「作成」をクリックしてください。

しばらくして、次のような画面が表示されれば、DynamoDBの設定は完了です。

Lambdaの設定

一つ目のLambda関数

AWS Lambda の画面を開いて、「関数の作成」をクリックします。

関数名の欄に、次のように入力します。
AmazonConnect-reserve-test-01

ランタイムは、プルダウンからPythonを選択します。
デフォルトの実行ロールの変更、はそのままとします。
「関数の作成」をクリックします。

画面をスクロールして、「設定」をクリックします。

環境変数と表示されるので、「編集」をクリックします。

「環境変数の追加」をクリックし、
キーに TZ
値に Asia/Tokyo
を入力して、「保存」をクリックします。

「コード」をクリックします。

「lambda_function.py」をクリックします。

次のコードと差し替えて、「Deploy」をクリックします。

lambda_function.py
import json
import datetime
import locale

def lambda_handler(event, context):
    
    # 曜日を漢字で出力する為
    locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')

    now = datetime.datetime.now()
    
    return {
        'Hizuke' : now.strftime("%Y年%m月%d日 %H時%M分 %A")
    }

「Test」をクリックします。

イベント名に「Test」と入力し、画面下の「作成」をクリックします。

再度「Test」をクリックします。

このような画像になれば、一つ目のLambda関数は完成です。

二つ目のLambda関数

AWS Lambda の画面で、「関数の作成」をクリックします。

関数名に AmazonConnect-reserve-test-02 を入力、
ランタイムは、プルダウンからPythonを選択します。

続いて、「デフォルトの実行ロールの変更」をクリックし、
「AWS ポリシーテンプレートから新しいロールを作成」にチェックを入れます。

ロール名は、任意の名前、例えば to_DynamoDB と入力します。

続いて、ポリシーテンプレート - オプションのプルダウンをクリックし、
「シンプルなマイクロサービスのアクセス権限」をクリックします。

「関数の作成」をクリックします。

「設定」をクリックし、1つ目と同様に、環境変数に、
キーに TZ
値に Asia/Tokyo
を設定します。

「コード」をクリックし、次のコードを貼り付けます。

lambda_function.py
import json
import datetime
import boto3
from boto3.dynamodb.conditions import Key
import random #テスト用

def lambda_handler(event, context):
    
    # #スマホのキー入力
    # InputPhoneNumber = event["Details"]["ContactData"]["Attributes"]["place"]
    #スマホのキー入力(テスト用にランダムを発生させる場合)
    InputPhoneNumber = random.randint(1, 7)
    
    now = datetime.datetime.now()
    
    #dynamodbにアクセス
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table("AmazonConnect-reserve-test")
    
    # 選択した曜日の書き込み
    result = table.put_item(
        Item={
            "datetime" : now.strftime('%Y%m%d %H:%M:%S'),
            "sentaku" : InputPhoneNumber
        }
    )
    
    # 選択した曜日の件数を取得
    response = table.scan(
        FilterExpression=Key('sentaku').eq(InputPhoneNumber)
    )
    
    # 選択した番号を曜日に変換
    youbi = {1:"月曜日", 2:"火曜日", 3:"水曜日", 4:"木曜日", 5:"金曜日", 6:"土曜日", 7:"日曜日"}

    return {
        'Youbi': youbi[InputPhoneNumber],
        'Kensuu': response['Count']
    }

貼り付けたら、「Deploy」をクリックします。

「Test」をクリックします。
イベント名に「Test」と入力し、画面下の「作成」をクリックします。

再度「Test」をクリックします。
このようになればDynamoDBとの接続が上手くいった証拠です。

DynamoDBの画面を表示し、「項目」をクリックします。
このように1行データが追加されます。

AWS Lambdaの画面に戻り、次のようにコメントアウトを逆転して、
「Deploy」をクリックしてください。

※ ここで再度「Test」をクリックするとエラーが発生します。

以上で、二つ目のLambda関数も完成です。

Amazon Connectの設定

作成した2個のLambda関数をAmazon Connectに関連付けます。

「Amazon Connect 仮想サポートセンターインスタンス」画面で、作成したインスタンスエイリアスをクリックします。

「問い合わせフロー」をクリックします。

このような画面になるので画面を下にスクロールしてください。

AWS Lambdaの関数のプルダウンから、今回作成したAmazonConnect-reserve-test-01を選択してください。

「+ Add Lambda Function」をクリックして、二つ目のAmazonConnect-reserve-test-02を選択してください。

二つ目の登録が完了出来ていないので、再度「+ Add Lambda Function」をクリックしてください。
次のような画面になれば、2個のLambda関数の関連付けが完了しました。

問い合わせフローの作成-1

作成した2個のLambda関数をAmazon Connectに関連付けます。

「Amazon Connect 仮想サポートセンターインスタンス」画面で、作成したインスタンスエイリアスをクリックします。

「問い合わせフロー」をクリックします。

このような画面になるので画面を下にスクロールしてください。

AWS Lambdaの関数のプルダウンから、今回作成したAmazonConnect-reserve-test-01を選択してください。

「+ Add Lambda Function」をクリックして、二つ目のAmazonConnect-reserve-test-02を選択してください。

二つ目の登録が完了出来ていないので、再度「+ Add Lambda Function」をクリックしてください。
次のような画面になれば、2個のLambda関数の関連付けが完了しました。

このAmazon Connectダッシュボード画面に戻ってください。

ルーティング→問い合わせフローをクリックしてください。画面が変わります。

「コンタクトフローの作成」をクリックします。

「名前の入力」に、reserve-testと入力してください。

設定→音声の設定を選んで、ドラッグしてください。

「音声の設定」の設定が表示されます。
言語を日本語に、
音声をMizuki(女性声)またはTakumi(男性声)を選択してから、画面下の「Save」をクリックしてください。
※ Amazon Polly(深層学習を使用して文章をリアルな音声に変換)の日本語音声です。

エントリポイントの開始の●をクリックして、音声の設定の●に繋ぎます。

統合から「AWS Lambda関数を呼び出す」をドラッグしてください。
緑枠箇所でブロックメニューの表示非表示の切り替え、
青枠箇所で拡大縮小ができます。適宜操作してください。

「AWS Lambda関数を呼び出す」設定の関数を選択するで、
AmazonConnect-reserve-test-01を選択し、「Save」をクリックしてください。

操作の「プロンプトの再生」をドラッグ&ドロップし、画像のように矢印を繋げてください。
13

「プロンプトの再生」でテキスト読み上げまたはチャットテキストをクリックします。
テキストの入力欄に、次をコピペして「Save」をクリックします。

'''これはアマゾンコネクトを用いた、予約システムのデモです。国際電話をかけているのでご注意ください。今日は、$.External.Hizuke です。'''

終了/転送から切断をドラッグ&ドロップし、矢印を繋げてください。

右上の「保存」をクリックしてください。
最新:保存済みと表示されます。

「公開」をクリックしてください。
コンタクトフローは正常に保存されました。と表示されます。
以後、変更した場合は保存→公開を繰り返してください。

ルーティングの電話番号をクリックしてください。

取得した海外の電話番号が表示されているのでクリックしてください。

作成した resere-test を選択して、「保存」をクリックしてください。


取得した海外の電話番号に、作成したresere-test問い合わせフローが紐づいたので、
実際に電話してみます。
+(プラス)はiPhoneだと0を長押しで入力できました。

https://youtu.be/ZDAffQJr0TQ

問い合わせフローの作成-2

感想

Discussion