ヤマムギ

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


最後までお読みいただきましてありがとうございました!

「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。

 - event, study , , ,

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 でのブログ)

以下は、気になったことのメモとか感想を書いています。 登壇者、発表者、主催企業な …