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からの投稿へ返信と登録処理 ←今ここ
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
EC-CUBE3.0 コードリーディング勉強会第1回目に行ってきました
EC-CUBE3.0 コードリーディング勉強会第1回目に行ってきました。 ECサ …
-
Alexa Day2018で「Alexa連携デバイスクラウドを構成するAWS ソリューション」を聞きました
以下は、思ったことや気になったことをメモしていますので、必ずしも登壇者の発表内容 …
-
JAWS-UG Osaka 第15回勉強会 AWS Summit Tokyo 2016 アップデート追っかけ会
「JAWS-UG Osaka 第15回勉強会 AWS Summit Tokyo …
-
Pepper 開発 ワークショップ初級~中級~番外編に1日で一気に参加した
Pepperの開発方法が知りたかったので、Pepperアトリエ秋葉原 with …
-
「関ジャバ Java開発のためのDocker & てらださんせきらら in MS関西」に行ってきました
「関ジャバ Java開発のためのDocker & てらださんせきらら i …
-
LINEとAWSとTwilioとkintoneでBOTを作ってみるハンズオン~ラッキーコンテンツ手順~
LINEとAWSとTwilioとkintoneでBOTを作ってみるハンズオンで一 …
-
持ち帰って欲しいもの
「カスタマーサクセス Advent Calendar 2018」にお誘いを受けま …
-
JAWS DAYS 2018の1日前に名古屋にいました「JAWS-UG名古屋 AWS勉強会 JAWS DAYS 2018前夜祭」
仕事の都合でJAWS DAYS 2018の前日は名古屋にいました。 宿泊地はお店 …
-
「kintone カスタマイズハンズオン」に行ってきました
ハンズオン中のメモです Rest API ログイン認証だとトークン認証で出来ない …
-
Windowsでの自動化について考える会に出席させていただいた
2015年2月21日 土曜日 詳細はSlideShareの資料を確認してもらえれ …