ヤマムギ

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)ラッキーコンテンツ ←今ここ

@yamamanx
開発ベンダー5年、ユーザ企業システム部門通算9年、ITトレーナー1年目のSoftware Engineerです。 質問はコメントかSNSなどからお気軽にどうぞ。 出来る限りなるべく答えます。 このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。 また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。

 - event, study , , , ,

ad

ad

Message

メールアドレスが公開されることはありません。

  関連記事

Developers Summit 2018 「本番環境で使うContainer – Amazon ECS, AWS Fargate, Amazon EKS」を聞きました

※写真は展示のAmazon Echo とルンバです。 以下は、思ったことや気にな …

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

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

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

本日は例外の続き。 これで参考書の章立てはとりあえず終了!! 明日からは模試と練 …

Developers Summit 2018 「事例2本立て!Redmineユーザ達が語る現場定着化への取組みと導入アンチパターン」を聞きました

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

Developers Summit 2018「 IoTサービスを始める際に必要なこととは」を聞きました

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

Developers Summit 2018 「AWSのフルマネージドな環境でCI/CDをやってみよう!AWS Cloud9からAWS Fargateへの継続的デプロイをご紹介」を聞きました

※写真は展示のAmazon Echoです。 以下は、思ったことや気になったことを …

「MasterCloud #9 新春クラウドLT大会」でLTをさせていただきました

Alibaba Cloudを検索してたらconnpassの「MasterClou …

「神戸Pythonの会 #2 meetup」に行ってきました

「神戸Pythonの会 #2 meetup」に行ってきました。 所感など Ato …

Developers Summit 2018 「夢は正夢〜「野球エンジニア」になるまでの歩み」を聞きました

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

DevLOVE関西「SIerから飛び出して、それからどうするの?」に行ってきました

DevLOVE関西「SIerから飛び出して、それからどうするの?」に行ってきまし …