LoginSignup
1
0

More than 3 years have passed since last update.

LINE Botの通知イベントをAWS Lambdaで受け取る

Last updated at Posted at 2019-08-13

前回はローカル環境でBotアプリからの通知イベントを受け取りましたが、今回はAWS Lambdaで実装してみます。
image.png

大まかな作業の流れ:
1. botコードを作成
2. Lambda関数を作成
3. API Gatewayを設定
4. LINEアプリで動作確認
5. CloudWatchでLOGを見てみる

LINE Bot APIの初期設定などはServeoを使ってLINE botサンプルをローカル環境で試すを参考にしてください。

botコードを作成

LINE bot SDKのecho-botサンプルを参考に作成していきます。ここでは、ローカル環境でテキストエディタを使って作業します。

index.js
'use strict';
const line = require('@line/bot-sdk');
const AWS = require("aws-sdk");

// create LINE SDK config from env variables
const config = {
    channelAccessToken: process.env.CHANNEL_ACCESS_TOKEN,
    channelSecret: process.env.CHANNEL_SECRET,
};

// event handler
exports.handler = function handleEvent(event, context) {
    const body = JSON.parse(event.body);
    const eventType = body.events[0].type;

    console.log(body);

    if (eventType === 'message') {
        const messageType = body.events[0].message.type;

        // テキストメッセージではない場合は無視
        if (messageType != 'text') {
            const lambdaResponse = {
                statusCode: 200,
                headers: { "X-Line-Status": "OK" },
                body: '{"result":"connect check"}'
            };
            return context.succeed(lambdaResponse);
        }

        const messageText = body.events[0].message.text;
        const replyToken = body.events[0].replyToken;

        // 接続テストの場合は無視
        if (replyToken == '00000000000000000000000000000000') {
            const lambdaResponse = {
                statusCode: 200,
                headers: { "X-Line-Status": "OK" },
                body: '{"result":"connect check"}'
            };
            return context.succeed(lambdaResponse);
        }

        // create a echoing text message
        const echo = { type: 'text', text: messageText };

        // create LINE SDK client
        const client = new line.Client(config);

        // use reply API
        return client.replyMessage(replyToken, echo);
    }
};

依存パッケージをインストールします。

$ npm install @line/bot-sdk

zipに圧縮します。このzipは後ほど、Lambda環境にアップロードするときに使用します。

$ zip -r echo-bot.zip index.js node_modules

Lambda関数の作成

ここからは、AWSマネジメントコンソールを使ってLambda関数を一から作成していきます。

image.png

ローカルで作成したzipファイルをアップロードします。
image.png

アップロードしたindex.jsが開きます。
image.png
メモ:Loadingのままで表示されない場合は、ぐるぐる回っているアイコンにマウスを重ねると、中止することができるので、index.jsをダブルクリックして手動で開きます。

環境変数を指定します。LINEチャネルのChannel Secretとアクセストークンをそれぞれ環境変数に指定します。
image.png

API Gatewayを設定

セキュリティは「オープン」を指定します。
image.png

API Gatewayのエンドポイントを確認しておきます。
image.png

LINE DevelopersコンソールでAPI GatewayのURLを指定します。
image.png

Webhookの接続確認
image.png

LINEアプリで動作確認

LINEアプリにbotを友達に登録して、botにメッセージを送ってみます。
image.png
メッセージがおうむ返しでかえってくれば成功です。

ログを確認してみる

参考までに、Webhookでどのようなメッセージが流れているか、Lambdaのモニタリング機能を使って、挙動を確認してみます。

index.js
:
// event handler
exports.handler = function handleEvent(event, context) {
    const body = JSON.parse(event.body);
    const eventType = body.events[0].type;

    // 追加
    console.log(body);
:

Lambdaダッシュボードのモニタリングを開きます。
image.png

CloudWatch Logs Insightsの「Recent invocations」にLogStreamが新しい順に並んでいるはずなので、先頭の#1のLogStreamをクリックします。console.logで出力したjsonデータを確認することができます。
image.png

例外が発生した場合もここに記録されているので、警告や異常が発生してないか確認することができます。

次回は、LINE botイベントをDyanamoDBに記録するようにしてみたいと思います。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0