ヤマムギ

growing hard days.

*

LINEとAWSとTwilioとkintoneでBOTを作ってみるハンズオン~ラッキーコンテンツ手順~

      2017/08/18

LINEとAWSとTwilioとkintoneでBOTを作ってみるハンズオンで一通り終わって時間が余ったた方、
かつ、有料課金してもいいよっていう方向けのラッキーコンテンツの手順です。

作る部分

APIを呼出して、電話で川柳を読んで、SMSで広告を送る部分です。

API Gatewayで受け取ったリクエスト(電話番号)へLambdaがPollyを使って生成したMP3を電話音声としてTwilioを使用して流します。
同時に同じ番号へSMSも送信します。

ハンズオン本編では有料課金範囲になるので運営で用意したAPIを呼んでもらっていましたが、これを自環境で作るための手順を以下に記載します。

課金の内容(2017年8月現在)

電話番号

SMSの送信が必要なためUSの番号を取得します。
月額150円です。

電話発信料金

1コール1分あたり16.2円です。
本プログラムでは10秒程度ですので1コール16.2円です。

SMS発信料金

キャリアによって異なりますが、1通あたり 8円~9.6円です。

Twilioのアカウントアップグレード

まず、無料利用アカウントの場合は、Twilioのアカウントのアップグレードを行います

Twilioダッシュボードにログインして右上の[UPGRADE]をクリックします。

クレジットカードの情報を入力して、ポイントを追加してオートチャージの有無を設定して、アカウントをアップグレードします。

SMSが使える番号の購入

「#」電話番号をクリックして、電話番号ダッシュボードで「+」の「番号を購入」をクリックします。

国 で「United States」を選択して、「音声通話」、「SMS」、「MMS」をチェックして[検索]をクリックします。

検索結果から電話番号を選んで[購入]をクリックします。

プログラムのダウンロード

Github-yamamanx-polly-twilio-callにあります。

こちらのダウンロードリンクからダウンロードしてください。

S3バケットの作成

Amazon Pollyがテキストから音声に変換したMP3ファイルとTwilioに指示を出すためのTwimlを格納するS3バケットを作成します。
Twilioがアクセスする必要があるので、静的ホスティングを有効にしてどこからでもアクセス出来るようにします。
既存のバケットを使用する場合はどこからアクセスされても問題のないBucketを使用してください。

ここではバケットを新たに作成する手順を記載します。

S3マネジメントコンソールで[バケットを作成する]をクリックします。

バケット名とリージョンを設定します。

バケットが出来たら[プロパティ]-[Static website hosting]を設定します。

有効にしてインデックスドキュメントなどを一応設定しておきます。

次に[アクセス権限]-[バケットポリシー]を設定します。

バケットポリシーの例です。
Resourceのbucket_nameをそれぞれのバケット名で書き換えてください。

Lambda実行用のIAMロールの作成

Lambdaを実行するロールに対して、S3へput objectする権限と、PollyでSynthesizeSpeech出来る権限を付与する必要があります。

ポリシーの内容を分かりやすくするためにPolicy Generatorを使用しています。

S3にMP3オブジェクトをPUTするポリシーの作成

IAMマネジメントコンソールで[ポリシー]-[ポリシーの作成]をクリックします。

Policy Generatorを使用します。

効果 : 許可
AWSサービス : Amazon S3
アクション : PutObject
ARN : S3バケットを指定(arn:aws:s3:::bucket_name/*)

[ステートメントを追加]をクリックします。

こうなります。

こうなります。
名前を s3-put-object-bucketname にします。
Policy Generatorを使わなくても最終的にはこのJSONが書ければそれでOKです。

Pollyでシンセサイズするポリシーの作成

テキストをMP3に変換するSynthesizeSpeechを実行するためのポリシーです。

IAMマネジメントコンソールで[ポリシー]-[ポリシーの作成]をクリックします。

Policy Generatorを使用します。

効果 : 許可
AWSサービス : Amazon Polly
アクション : SynthesizeSpeech
ARN : *

こうなります。

そしてこうなります。
名前を polly-synthesize-speech にします。
こちらもPolicy Generatorを使わなくても最終的にはこのJSONが書ければそれでOKです。

LambdaからCloudWatchにログを作るポリシーの作成

LambdaがCloudWatchにログを出力を出来るようポリシーを作成します。

IAMマネジメントコンソールで[ポリシー]-[ポリシーの作成]をクリックします。

Policy Generatorを使用します。

効果 : 許可
AWSサービス : AWS CloudWatch Logs
アクション : CreateLogGroup , CreateLogStream , PutLogEvents
ARN : arn:aws:logs:::*

こうなって

こうなります。
名前を lambda-put-log にします。
こちらもPolicy Generatorを使わなくても最終的にはこのJSONが書ければそれでOKです。

IAMロールの作成

[ロール] – [新しいロールの作成]をクリックします。

ロールタイプは「AWS Lambda」を選択します。

先ほど作成した3つのポリシーを選択します。
* s3-put-object-bucketname
* polly-synthesize-speech
* lambda-put-log

ロール名に「lambda-polly-hands-on」と入力します。

作成したロールの[アクセス許可]タブで3つのポリシーがアタッチされていることを確認します。

Lambda関数の作成

マネジメントコンソールでLambdaを開いて、[関数の作成]をクリックします。

何も選択せず、[一から作成]をクリックします。

何も選択せず、[次へ]をクリックします。

名前 : polly_twilio_call(任意の名前)
説明 : 電話番号をパラメータで渡すと音声とSMSで案内をするサンプル(任意の説明)
ランタイム : Python 3.6

コードエントリタイプで「.zipファイルをアップロード」を選択して、ダウンロードしているコードのzipファイルをアップロードします。

環境変数を設定します。

変数名 設定値
LOGGER_LEVEL ログレベル INFOにする
BUCKET_NAME Amazon Pollyが生成するMP3ファイルを格納するS3バケット名
BUCKET_REGION ap-northeast-1など S3バケットがあるリージョン名
VOICE_ID Amazon PollyのボイスID 日本語なので Mizukiを設定する
POLLY_REGION Amazon Pollyのリージョン名 us-east-1
TWILIO_ACCOUNT_SID TwilioのアカウントSID
TWILIO_AUTH_TOKEN Twilioのトークン
TWILIO_FROM_NUMBER Twilioの発信元電話番号

Twiloの情報はTwilioにログインして、プログラマブルVoiceダッシュボードの[Show API Credentials]から確認します。

ハンドラ : lambda_fcuntion.lambda_handler のまま
ロール : 既存のロールを選択
既存のロール : lambda-polly-hands-on

そんなに時間はかからないと思いますが、念のためアイムアウトだけ5分にのばしておきます。

テストイベントは着信出来る電話番号を設定します。

「08012345678」を実際の番号に変更してください。

これでテストを実行します。
電話がかかってきてSMSが送られればテストOKです。

API Gatewayの作成

[APIの作成]をクリックします。

API名を任意で設定して、[APIの作成]をクリックします。

[アクション] – [リソースの作成]をクリックします。

リソース名に任意の名前を設定して[リソースの作成]をクリックします。

作成したリソースを選択して[メソッドの作成]をクリックします。

POSTを選択して[✓]をクリックして右のペインで設定します。

  • 統合タイプ : Lambda関数
  • Lambdaリージョン : ap-northeast-1(Lambda関数を作成したリージョン)
  • Lambda関数 : polly_twilio_call(作成したLambda関数)

[保存]をクリックします。

[OK]をクリックします。

[メソッドリクエスト]をクリックします。

[APIキーの必要性]をfalseからtrueに変更します。

[アクション]-[APIのデプロイ]をクリックします。

デプロイされるステージ : [新しいステージ]
ステージ名 : (任意のステージ名)

[デプロイ]をクリックします。

[ステージ]を選択してデプロイされたステージを展開します。
[POST]を選択して右ペインのURLを控えておきます。

[APIキー] – [アクション] – [APIキーの作成]をクリックします。

名前に任意の名前を設定して[保存]をクリックします。

APIとステージを選択して[追加]をクリックします。

APIキーの[表示]をクリックして表示されるAPIキーをメモしておきます。

kintoneアプリへの設定

kinotneアプリの[アプリの設定を変更]をクリックします。

[JavaScript / CSSでカスタマイズ]をクリックします。

customize.jsをダウンロードします。
(クリックするか、右クリックで対象を名前をつけて保存など)

20行目 ~ 30行目付近の
‘x-api-key’ : に、API Gatewayで設定したAPIキーに、
api_url = にAPI Gatewayで作成したステージのURLに書き換えて保存します。

[アップロードして追加]でkintoneに反映します。

[アプリを更新]をクリックします。

これで、自環境に作ったTwiioとPollyのAPIをkintoneから呼び出す事が出来ます。

目次

(1)LambdaからSlackへ通知する1

(2)LambdaからSlackへ通知する2

(3)Lambdaからkintoneへレコードを登録する

(4)Step Functionsで複数のLambdaを実行制御する

(5)LINEからの投稿へ返信と登録処理

(6)Twilioからの電話受付と登録処理

(7)ラッキーコンテンツ ←今ここ


最後までお読みいただきましてありがとうございました!

「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第2版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。

 - event, study , , , ,

ad

ad

  関連記事

「Kansai WordPress Meetup@大阪『サイトの作り方 3種おさらい&祝☆誕生20周年』」に参加しました

WordPress Meetupにはじめて参加しました。 WordPressの勉 …

「IoTの法律勉強会 第1回」に行ってきました

「IoTの法律勉強会 第1回」に行ってきました。 「関西のIoTを盛り上げよう」 …

「DMM meetup #24 〜DMMのセキュリティ脅威への取り組み事例〜」に参加しました

内容が内容ですので、もちろん運営さんにブログを書いていいかの確認はしております。 …

Developers Summit 2018 「NRIの働き方改革 – 開発スタイルから文化まで変えた軌跡 -」を聞きました

以下は、思ったことや気になったことをメモしていますので、必ずしも登壇者の発表内容 …

Java SE 7 Silver対策勉強をしながらメモ 2015/2/11

練習問題4日目。 とりあえずひと通り終了。 317問中288問正解、90.85% …

「4年ぶりの大阪開催!! CMC_Meetup 大阪 Vol.4」に参加しました

4年ぶり開催のCMC_Meetup 大阪に参加しました。 コラボレーションスペー …

「Engineering Productivity Meetup #2 in 大阪」に参加しました

AWS SSOのしくみを AWS IAM Identity Centerへ移行し …

「JAWS-UG 四国クラウドお遍路」からの特急南風にて変わり続けなければならないなあと思った

「JAWS-UG 四国クラウドお遍路」というAWSのユーザーグループJAWS-U …

Developers Summit 2018 「自然言語処理・機械学習を活用したファクトチェック業務の支援」を聞きました

以下は、思ったことや気になったことをメモしていますので、必ずしも登壇者の発表内容 …

DevLOVE関西 現場甲子園2015 「西日本大会」に行ってきました

DevLOVE関西 現場甲子園2015 「西日本大会」に行ってきました。 全部で …