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
関連記事
-
-
JAWS DAYS 2022で大阪サテライトスタッフ、サポーターセッション登壇、懇親会LT登壇しました
2022/10/8(土) JAWS DAYS 2022で大阪サテライト会場のスタ …
-
-
Developers Summit 2024 「アーキテクチャから学ぶKubernetesの全体像」を見ました
株式会社スリーシェイク bells17さん Kubernetesの基盤となるCo …
-
-
LINEとAWSとTwilioとkintoneでBOTを作ってみるハンズオン (3)Lambdaからkintoneへレコードを登録する
作る部分 Lambdaからkintoneへレコードを登録する部分を作成します。 …
-
-
「第1回 ぶろぐの勉強会」を開催します!
このブログは2021/3/2開催の「第1回 ぶろぐの勉強会」冒頭挨拶の共有資料代 …
-
-
「Serverless Meetup Osaka #01:begin」に参加しました
2024/5/25に開催の「Serverless Meetup Osaka #0 …
-
-
「丸暗記で終わらない!資格を業務・キャリアへ活かすための私たちの取り組み」を観ました
株式会社ビッグツリーテクノロジー&コンサルティングさん(以下BTC)が開 …
-
-
Java SE 7 Silver対策勉強をしながらメモ 2015/2/9
練習問題2日目。 同じ問題にひっかかる。つまづく。 集中力が足りない。 途中から …
-
-
久しぶりにMonotaROさんの話しを聞いて興奮した「MonotaRO Tech Talk #6 (大阪梅田オフィスオープン記念)」
エンジニア人生というか、普通に仕事に対する考え方とか、自分に大きな影響を与えてく …
-
-
「Serverless Days Tokyo 2023 サーバーレスで負荷試験を行う必要性と実践的プラクティスの紹介」を見ました
2023/9/23にServerless Days Tokyo 2023に参加し …
-
-
JAWS-UG IoT専門支部「re:invent 2022 Recap(IoT風味マシマシ)」に参加しました
JAWS-UG IoT専門支部の勉強会に目黒で参加しました。 ご案内、説明、会場 …