ヤマムギ

growing hard days.

*

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に通知がされます。

目次

(1)LambdaからSlackへ通知する1

(2)LambdaからSlackへ通知する2

(3)Lambdaからkintoneへレコードを登録する

(4)Step Functionsで複数のLambdaを実行制御する

(5)LINEからの投稿へ返信と登録処理 ←今ここ

(6)Twilioからの電話受付と登録処理

(7)ラッキーコンテンツ


最後までお読みいただきましてありがとうございました!
【PR】 「AWS認定試験対策 AWS クラウドプラクティショナー」という本を書きました。

@yamamanx

開発ベンダー5年、ユーザ企業システム部門通算9年、ITトレーナー2年目のSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。

このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。

また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。

 - event, study , , ,

ad

ad

  関連記事

「JAWS DAYSに行きたくても行けなかった人に捧ぐ!AWSユーザーが教えてくれるAWSにまつわる最新事情」で運営と発表をしました

JAWS DAYS 2017のre:Capを大阪で開催しました。 JAWS DA …

JINS MEME DEVELOPER HANDS-ON #5に行ってきました

世界初、自分を見るアイウェアの「JINS MEME」のSDK勉強会に行ってきまし …

LINEとAWSとTwilioとkintoneでBOTを作ってみるハンズオン (3)Lambdaからkintoneへレコードを登録する

目次 作る部分kintoneテンプレートからアプリを作成するアプリIDの確認とア …

JAWS-UG CLI専門支部に初めて参加してIAM入門してきた

JAWS-UG CLI専門支部に初参加してきました。 会場は茅場町のコワーキング …

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

本日は継承。 眠すぎるのでちょっとだけ。 本当に少しだけでもいいから続ける。それ …

第17回 人工知能研究会 「今後のDeepLearning技術の発展とビジネス応用」に行ってきました

第17回 人工知能研究会 「今後のDeepLearning技術の発展とビジネス応 …

VUIがもたらすUXの不可避な流れを感じた日

「INEVITABLE ja night インターネットの次にくるもの 第 4 …

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

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

「【第2回】データ分析勉強会(尼崎Pythonの会#1)」に行ってきました

「【第2回】データ分析勉強会(尼崎Pythonの会#1)」に行ってきました。 略 …

「kintone Café 大阪 Vol.8 〜夏の事例祭り!〜」に行ってきました

「kintone Café 大阪 Vol.8 〜夏の事例祭り!〜」に行ってきまし …