LINEとAWSとTwilioとkintoneでBOTを作ってみるハンズオン (5) LINEからの投稿へ返信と登録処理
2017/08/16
作る部分
LINEからのメッセージを受けて各APIより返信し、StepFunctionsを起動して登録処理へデータを流します。
LINEのトークンの確認
まだLINE Messaging APIのキーを作成していない方は LINE Messaging APIの設定をするを参照してキーを作成してください。
LINE BUSINESS CENTERにアクセスしてログインします。
右上の[会社/事業者未選択]をクリックして、今回用に設定した会社/事業者を選択します。
[LINE Developers]をクリックします。
下にスクロールして Channel Access Token の[ISSUE]をクリックして表示されたChannnel Access Tokenをコピーして控えます。
ついでに表示されたQR Codeを使ってLINEの友達にbotを追加しておきます。
docomo雑談APIキーの確認
まだdocomo雑談APIキーを取得していない方はdocomo雑談APIのAPIキーを発行するを参照してAPIキーを発行してください。
docomo Developer support マイページへログインします。
API keyを控えておきます。
StepFunctionsのARNの確認
LINEとAWSとTwilioとkintoneでBOTを作ってみるハンズオン (4)Step Functionsで複数のLambdaを実行制御するで作ったStepFunctionsのARNを確認します。
StepFunctionsのダッシュボードにARNが表示されてますが、コピーが出来ません。
なのでクリックして開きます。
実行一覧をクリックして実行一覧に行きます。
ステートマシンARNが表示されているのでテキストエディタなどにコピーしておきます。
プログラムのダウンロード
Github-yamamugi_handson_to_kintoneにあります。
こちらのダウンロードリンクからダウンロードしてください。
プログラムの解説
一部抜粋
- LINEからWebhookで送られたテキストを受け取ります。
- あわせて送られているリプライトークンも取得します。
- テキストに応じたメッセージを設定します。
- リプライトークンとメッセージをdataとしてrequestsモジュールでPOSTします。
- 取得したLINEの識別用の内部IDをStepFunctionのINPUTPATHに渡して実行します。
####livedoor Weather Hacks
- テキストに「天気」、「雨」、「雪」、「晴」が含まれている場合天気情報を取得します。
- 大阪(city_id 27000)に限定しています。
- お天気webサービス仕様にAPI仕様があります。
- 天気と気温を取得しています。
wikipedia検索
- テキストに「って何」が含まれている場合に検索します。
- wikipediaモジュールを使用して検索しています。
- 1件目の検索結果でページ取得が失敗する場合があるのでその場合は2件目で取得します。
- 200文字の説明文とWikipediaのURLを返します。
インフォーメーションカード
- LINEのリプライデータでtypeをtemplate,templateのタイプをcarouselとしてカード型の案内を返しています。
- thumbnailImageUrlは公開されたwebサーバに画像を置いています。
docomo雑談API
- どの条件にも当てはまらない場合に使用しています。
- docomo雑談APIのPython SDKを使用しています。
- テキストに対しての戻り値を返しています。
IAMロールの作成
Lambdaを実行するロールに対して、StateFunctionsを実行出来る権限を付与する必要があります。
ポリシーの内容を分かりやすくするためにPolicy Generatorを使用しています。
LambdaからStepFunctionsポリシーの作成
LambdaがCloudWatchにログを出力を出来るようポリシーを作成します。
IAMマネジメントコンソールで[ポリシー]-[ポリシーの作成]をクリックします。
Policy Generatorを使用します。
効果 : 許可
AWSサービス : AWS StepFunctions
アクション : StartExecution
ARN : arn:aws:states:ap-northeast-1:********:stateMachine:sf_1
(StepFunctionsのARNを指定します)
[ステートメントを追加]をクリックします。
[次のステップ]をクリックします。
名前を step_functions_execute にします。
Policy Generatorを使わなくても最終的にはこのJSONが書ければそれでOKです。
[ポリシーの作成]をクリックします。
LambdaからCloudWatchにログを作るポリシーの作成
LambdaがCloudWatchにログを出力を出来るようポリシーを作成します。
IAMマネジメントコンソールで[ポリシー]-[ポリシーの作成]をクリックします。
Policy Generatorを使用します。
効果 : 許可
AWSサービス : Amazon CloudWatch Logs
アクション : CreateLogGroup , CreateLogStream , PutLogEvents
ARN : arn:aws:logs:::*
[ステートメントを追加]をクリックします。
こうなって
こうなります。
名前を lambda-put-log にします。
Policy Generatorを使わなくても最終的にはこのJSONが書ければそれでOKです。
※ ARNは「arn:aws:logs:::」でも「arn:aws:logs:::」でもOKです。
IAMロールの作成
[ロール] – [新しいロールの作成]をクリックします。
ロールタイプは「AWS Lambda」を選択します。
先ほど作成した2つのポリシーを選択します。
* step_functions_execute
* lambda-put-log
ロール名を「lambda_step_functions」とします。
作成したロールの[アクセス許可]タブで2つのポリシーがアタッチされていることを確認します。
Lambda関数の作成
AWSマネジメントコンソールでLambdaを開いて、[関数の作成]をクリックします。
何も選択せず、[一から作成]をクリックします。
何も選択せず、[次へ]をクリックします。
名前 : from_line
説明 : ヤマムギハンズオン LINEからデータを受信/返信
ランタイム : Python 3.6
コードエントリタイプは「.zipファイルをアップロード」でyamamugi_handson_from_lineからダウンロードしたZIPファイルをアップロードします。
環境変数
- LINE_TOKEN : LINEのChannnel Access Token
- DOCOMO_API_KEY : docomo雑談API key
- STATE_MACHINE_ARN : StepFunctionsのステートマシーンのARN
- LOG_LEVEL : DEBUG(ログを減らしたい場合は ERRORかINFOを設定します)
[既存のロールを選択]で先ほど作った lambda_step_functions を選択します。
必要ないとは思いますが、念のためタイムアウトを5分にしておきます。
[次へ]をクリックします。
[関数の作成]をクリックします。
API Gatewayの作成
[APIの作成]をクリックします。
API名を任意で設定して、[APIの作成]をクリックします。
[アクション] – [リソースの作成]をクリックします。
リソース名に from_line と入力して[リソースの作成]をクリックします。
作成したリソースを選択して[アクション]-[メソッドの作成]をクリックします。
POSTを選択して[✓]をクリックします。
- 統合タイプ : Lambda関数
- Lambdaリージョン : ap-northeast-1
- Lambda関数 : from_line
を設定して[保存]をクリックします。
OKをクリックします。
[アクション]-[APIのデプロイ]をクリックします。
デプロイされるステージ : [新しいステージ]
ステージ名 : (任意のステージ名)
[デプロイ]をクリックします。
[ステージ]を選択してデプロイされたステージを展開します。
[POST]を選択して右ペインのURLを控えておきます。
LINE Webhook URLにAPI Gatewayエンドポイントを設定
[LINE Developers]の画面(QRコードとChannenl Access Tokenが表示されていた画面)を開きます。
[EDIT]ボタンをクリックします。
Webhook URLにAPI GatewayのURLを貼り付けて[SAVE]をクリックします。
試してみます
「お得な情報は?」とか、
「天気は?」とか、
「XXって何?」とか、
どうでもいい話とかLINEで友達登録しておいた自分のbotに話しかけてみます。
返事を返してくれて、
kintoneに登録されて、
Slackに通知がされます。
目次
(4)Step Functionsで複数のLambdaを実行制御する
(5)LINEからの投稿へ返信と登録処理 ←今ここ
最後までお読みいただきましてありがとうございました!
【PR】 「AWS認定試験対策 AWS クラウドプラクティショナー」という本を書きました。
【PR】 「AWSではじめるLinux入門ガイド」という本を書きました。

開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター3年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
DevLOVE関西「それぞれの現場で実践した【自動化】の話」に行ってきました
DevLOVE関西「それぞれの現場で実践した【自動化】の話」に行ってきました。 …
-
-
JAWS DAYS 2018 振り返り(特にコミュニティフレンドシップ)
JAWS DAYS 2018を振り返りたいと思います。 やったこと コミュニティ …
-
-
AWS Summit 2016 Tokyoに参加してきました (Day3)
飛天3日目です。 JAWS-UGブースのすぐ前にあったこのお水がめちゃめちゃおい …
-
-
「JP_Stipes Osaka meetup vol.1」を運営させていただきました
Stripeのユーザーグループ、JP_Stripesの大阪ミートアップの運営をさ …
-
-
JAWS SONIC 2020 & MIDNIGHT JAWS 2020 の深夜のパワポカラオケに挑戦しました
2020/9/12(土) 16:50 ~ 2020/9/13(日) 17:20( …
-
-
「自ら修羅の道を作り、修羅場を楽しみ、自内外に変化を起こし続ける」(『ソフトウェアファースト』読書感想)
「ソフトウェア・ファースト あらゆるビジネスを一変させる最強戦略」を読みました。 …
-
-
JAWS FESTA 2017 Reverse X re:Birth
JAWS FESTA 2017 中四国 今年はブログタイトル「JAWS FEST …
-
-
「JAWS-UG 四国クラウドお遍路」からの特急南風にて変わり続けなければならないなあと思った
「JAWS-UG 四国クラウドお遍路」というAWSのユーザーグループJAWS-U …
-
-
「 MonotaRO Tech Talk #1」に行ってきました
モノタロウさんの「MonotaRO Tech Talk」に行ってきました。 ビー …
-
-
「Fin-JAWS 第13回 PCI DSS と AWS の混ぜご飯」リモート開催に参加しました
Youtube Liveでリモート開催の「Fin-JAWS 第13回 PCI D …