ヤマムギ

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

Message

メールアドレスが公開されることはありません。

  関連記事

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

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

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

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

Innovation EGG 第6回 『IoT 今と未来』に参加してきました

雨を心配していましたが、曇り空ながら雨はやんで、180名強の方が参加されたInn …

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

作る部分 この部分のLambdaを作成します。 手順1でSlackのIncomi …

IPython Notebookで梅田のラーメン屋さんの統計情報を抽出するというハンズオンに行ってきました

IPython Notebookで梅田のラーメン屋さんの情報をWebスクレイピン …

「kintone Café 大阪 Vol.14 〜モザイクなし!うちのkintoneはこれだ!〜」で登壇しました

「kintone Café 大阪 Vol.14 〜モザイクなし!うちのkinto …

Developers Summit 2018 「もしSIerのエンジニアがSRE本を読んだら」を聞きました

以下は、思ったことや気になったことをメモしていますので、必ずしも登壇者の発表内容 …

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

本日は例外の続き。 これで参考書の章立てはとりあえず終了!! 明日からは模試と練 …

Developers Summit 2018 「将棋プログラムPonanzaにおける強化学習、ディープラーニングとその先」を聞きました

以下は、思ったことや気になったことをメモしていますので、必ずしも登壇者の発表内容 …

AWS Summit 2016 Tokyoに参加してきました (前日 ~ Day1)

AWS Summit 2016 Tokyoにて、セッション聴講、ブース展示拝見、 …