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版」という本を書きました。
![](https://www.sbcr.jp/wp-content/uploads/2023/01/9784815617929-1-407x596.jpg)
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
![](https://www.sbcr.jp/wp-content/uploads/2024/01/9784815625382-3-420x596.jpg)
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
![](https://www.shuwasystem.co.jp//images/book/637791.jpg)
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
![](https://book.mynavi.jp/files/topics/135344_ext_06_0.jpg?v=1673514682)
「AWSではじめるLinux入門ガイド」という本を書きました。
![](https://www.yamamanx.com/wp-content/uploads/2023/12/81Rp5O9We6L._SY522_.jpg)
![@yamamanx](https://www.yamamanx.com/wp-content/plugins/lazy-load/images/1x1.trans.gif)
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
「Kansai WordPress Meetup@大阪『サイトの作り方 3種おさらい&祝☆誕生20周年』」に参加しました
WordPress Meetupにはじめて参加しました。 WordPressの勉 …
-
-
「API Meetup Tokyo #29 ニッポンのAPIエコノミー最前線 〜国産APIが社会を変える〜」に参加しました
API Meetup Tokyoに来ました〜 会場はおしゃれなDEJIMAさんで …
-
-
「JAWS DAYSに行きたくても行けなかった人に捧ぐ!AWSユーザーが教えてくれるAWSにまつわる最新事情」で運営と発表をしました
JAWS DAYS 2017のre:Capを大阪で開催しました。 JAWS DA …
-
-
Developers Summit 2024「技術的負債との戦い! PR TIMESエンジニアチームのオブザーバビリティ改善ジャーニー」を見ました
New Relic株式会社 テクニカルアカウントマネージャ 小林 良太郎さん 株 …
-
-
『JAWS-UG 名古屋 セキュリティ勉強会』に参加しました
初心者向けAWSの守り方 JAWS-UG名古屋 森さん 初心者向けということで、 …
-
-
持ち帰って欲しいもの
「カスタマーサクセス Advent Calendar 2018」にお誘いを受けま …
-
-
Java SE 7 Silver対策勉強をしながらメモ 2015/2/10
練習問題3日目。 疲れてきた。 でも明日は休みだし一気にやる。 いつものごとくマ …
-
-
JAWS DAYS 2024に参加しました!
2024/3/2 JAWS DAYS 2024に参加しました!! これから参加し …
-
-
Innovation EGG 第9回 『ITの可能性と楽しさを語ろう!』に行ってきました
JAZUG LINE 砂金さん OracleからMSからLINEへ 何にわくわく …
-
-
Alexa Skills Kit 最新アップデート(Alexa Day 2019 でのブログ)
以下は、気になったことのメモとか感想を書いています。 登壇者、発表者、主催企業な …