ヤマムギ

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)ラッキーコンテンツ

@yamamanx

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

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

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

 - event, study , , ,

ad

ad

  関連記事

Alexa Day 2018で「Alexa はどこにでも。AVSが開くAlexa Enabled なライフスタイル」を聞きました

photo by 金春さん スピーカーはオランダから一時帰国中の伊東のともさん …

「JAWS-UG Osaka 第22回勉強会 東西の中の人が語る!!! Microservices × Serverless On AWS」で運営と懇親会LTをしてきました

「JAWS-UG Osaka 第22回勉強会 東西の中の人が語る!!! Micr …

LINEとAWSとTwilioとkintoneでBOTを作ってみるハンズオン (1)LambdaからSlackへ通知する1

作る部分 SlackのWebURLを確認する Slackでチームを作成してbot …

Agile Japan 2015 大阪サテライト「アジャイル開発への架け橋」に行ってきました

Agile Japan 2015 大阪サテライトに行ってきました。 具体的な目的 …

JAWS FESTA 東海道 2016に行ってきました

JAWS FESTA 2016に行ってきました。 今回はボランティアスタッフ参加 …

DevLOVE関西「SIerから飛び出して、それからどうするの?」に行ってきました

DevLOVE関西「SIerから飛び出して、それからどうするの?」に行ってきまし …

「DevLOVE関西 ShareWisサービス開発の現場」に行ってきました

DevLOVE関西とは 「DevLOVE関西は素振りの場、現場は実践の場」 いつ …

Alexa Day 2018 で「金融機関向けAmazon Echo/Alexaへの取り組み事例紹介」を聞きました

Alexa Day 2018 で「金融機関向けAmazon Echo/Alexa …

「GitLab Meetup Tokyo #7: 新年度応援&GitLab 11.0」にSNS & ブログ枠で参加しました

GitLabのミートアップがあるのか!さすが大東京! GitLabのもとユーザと …

再会の日 ~re:Union 2018 Osaka by JAWS-UG~

8/5は大阪でre:Unionでした。 「再会」と名うったこのイベントは、6月に …