AWS Connectの試験利用

AWS Connectの試験利用

AWS Connectを使って携帯電話に適当なメッセージを流すプログラムを作成します。
一般的にはLambdaを使うことが多いですが、今回はローカルやその他サーバーから投げられるようにします。

プログラムとしてはローカル用に作ったものをそのままLambdaにアップするだけなので転用も簡単です。
AWS SAMを使ってコンフィグデータを用意するとか考えると別途手順は必要ですが。

前準備

この記事で説明しない部分は
・インスタンスの作成
・電話番号の取得
の2点

これは先に準備しておいてください。

使用環境

ローカルで「python3」を使用し、「boto3」を利用します。

解説

pythonプログラムとお問い合わせフローの二つを解説しますが、
二つとも連動させるのでどちらを先に設定するということはありません。

ざっくりプログラム
import boto3
import configparser

#===========================================
#AWS接続

ini_file = configparser.ConfigParser()
ini_file.read('./keys.ini', 'UTF-8')

access_key = ini_file["AWS_KEY"]["awsaccesskeyid"]
secret_key = ini_file["AWS_KEY"]["awssecretkey"]
instanceid = ini_file["AWS_KEY"]["instanceid"]

session_set = boto3.Session(
	aws_access_key_id=access_key, aws_secret_access_key=secret_key, region_name='ap-northeast-1'
)

connect_set = session_set.client("connect")

DESTINATION_PHONE_NUMBER = '+819000000000'
SOURCE_PHONE_NUMBER = '+815000000000'
INSTANCE_ID = instanceid
CONTACT_FLOW_ID = 'お問い合わせフローのID'

connect_set.start_outbound_voice_contact(
	DestinationPhoneNumber=DESTINATION_PHONE_NUMBER,
	ContactFlowId=CONTACT_FLOW_ID,
	InstanceId=INSTANCE_ID,
	SourcePhoneNumber=SOURCE_PHONE_NUMBER,
	Attributes={
		'SetTextet': 'When you hear this message, I\'m probably not in the world. A serious server trouble has occurred. There is no hope of being saved anymore. However, I dared to leave a message here.',
		'SetTextet2': 'メッセージを聞きたい場合はいちいちさんさんさんしゃーぷと入力してください。5秒以内に。OK?',
		'SetTextet3': 'I\'m sorry to deceive, but there is no server trouble',
		'SetTextet4': '時間切れ',
	}
)

全文です。
ざっくり解説しますと

「configparser」

iniファイルを使うライブラリです。
iniファイルとして別個に各種IDを記載しいます。

configparserの使い方はgoogle検索等してください。

「client作成」

色々やり方ありますけどこの方法が一番好みというだけ。
後で自分にあった方法に改善するなどは好みで。

「各変数」

DestinationPhoneNumber
:発信先です。

注意として、2021年 8月上旬以降に作成したインスタンスは
デフォルトでは日本の携帯電話に発信できません。
携帯電話に発信したい場合は先にホワイトリスト化を申し込む必要があります。
※固定電話は可能

SourcePhoneNumber

:自分のインスタンスで利用できる番号であれば多分なんでも
:自分のインスタンスにない番号だとエラー

電話番号はE164準拠で記載する必要があります。
が、管理画面だと「+81 50-0000-0000」みたいに整形されるものの
変数に記載する場合は「+815000000000」とスペースハイフンはなしでないとエラーになります。

InstanceId, ContactFlowId

:インスタンスのIDとお問い合わせフローのIDですが
:両方ともお問い合わせフローの「ARN」に書いてあるのでAWSコンソールを見なくても大丈夫です。

↓この辺り
InstanceId, ContactFlowId

必要に見えて不要なもの

AmazonConnectの「電話番号」の設定で「問い合わせフロー/IVR」を
作成したフローに設定する必要は(多分)ありません。

少なくとも私は「ContactFlowId」のみで実行できています。
別談、何らかのフローに設定しておかなければならない可能性はあります。

Attributes

お問い合わせフローに渡す変数(属性)です。
名前は恐らくデフォルトにあるものと被ると駄目なので、できるだけ複雑にしておいた方がいいです。

因みに「11333」と入力すると「いちまんせんさんびゃくさんじゅうさん」と読まれます。
「1、1、3、3、3」でも問題ないとは思いますが。

お問い合わせフローの設定

お問い合わせフロー

全体図

1.pythonから送られてきた変数を音声再生し、
2.番号の入力を促した後、
3.その成否によってメッセージを変更します。

「発信先が受信した時のメッセージ再生」

お問い合わせフロー
「プロンプトの再生」をテキストの読み上げに設定し、「タイプ」を「ユーザー定義」
「属性」にpythonの「Attributes」に設定した変数名を入力します。

「音声の設定」はお好みで。
今回は英文とカタコトの日本文を発生させるために英語設定です。

「受信者に入力してもらう」

お問い合わせフロー
「顧客の入力を保存する」を使い何らかの数字列を属性に保存します。
なお「顧客の入力を保存する」が利用できるかはフローの設定に依存します。

「プロンプトの再生」と同じ設定でpythonの変数を読み上げます。
テストなのでエントリの暗号化はせず。

「入力を判定する」

お問い合わせフロー
「コンタクト属性を確認する」で受信者の入力内容を判定します。
「タイプ」は「システム」で「属性」は「保存済みの顧客の入力」

なお条件に属性を使えないので、python側で「入力する数値を指定する」などは無理っぽいです。

終了

以上で大方の設定は終了。
今回のはAmazonConnectの顧客入力で分岐を作っていますが、
例えばpython側で分岐させて変数を渡し、
「コンタクト属性を確認する」で変数(属性)をチェックして分岐させることもできます。

例えば障害発生を検知して通知を送るが、障害内容によって担当を変更するなど。

とはいえ障害検知メールは元々振り分けのできるもの。
では敢えて「電話」で通知しなければならないのはどんなものか。

というのが次の問題。

最新ブログ一覧