Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

AWS Lambda+Node.jsでLINEBotをサクッと作る(2017/03時点)

More than 3 years have passed since last update.

はじめに

2016/10にBOT APIに替わりMessaging API(新API)がリリースされれている。
AWS LambdaとMessaging API(新API)で定番の?オウム返しLINEBotをサクッと作るメモ。

API Reference: https://devdocs.line.me/ja/#reply-message

LINE側の設定

以下の手順で LINE Messaging APIの利用登録を行います。

  • 「LINE BUSINESS CENTER」にアクセスして、デベロッパー登録を行う
    https://business.line.me/ja/

  • 画面右上の「ログイン」をクリックし、通常のLINEアカウントでログイン

  • 提供サービス一覧の「Messaging API」から「Messaging APIを始める」を選択
    スクリーンショット 2017-03-07 23.24.40.png

  • 利用する企業アカウントの選択を求められるので、まだ無い場合は新規で作成

  • アカウント名の入力と業種と選択をしてアカウント申し込み
    スクリーンショット 2017-03-07 23.35.39.png

  • 登録完了後、「アカウントリスト」から作成したアカウントの「LINE@ MANAGER」を選択
    スクリーンショット 2017-03-07 23.46.03.png
    ※Messaging APIの登録を行うとLINE@のアカウントも有効になるようです。

  • 「アカウント設定」>「Bot設定」で以下の項目の設定を変更

    • Webhook送信: 利用する
    • 自動応答メッセージ: 利用しない(必要に応じて)
    • 友だち追加時あいさつ: 利用しない(必要に応じて) スクリーンショット 2017-03-08 0.23.59.png
  • Bot設定の「LINE Developersで設定する」を選択し「Developers」ページへ移動

  • Channel Access Tokenの「ISSUE」をクリックし、Access Tokenを発行
    ※Access Tokenは後にLambda側の設定の際に使用します。

AWS Lambda側の設定

Lambdaファンクションの作成を行います。

  • AWSコンソールでLambdaを選択
  • 「Lambda関数の作成」>「設計図の選択」から「ブランク関数」を選択
  • トリガーの設定はせずに未選択のまま「次へ」を選択
  • 「関数の設定」では「名前」と「説明」を適宜設定します。 ※今回はNode.jsを使用するので「ランタイム」にはNode.js 4.3を選択しました。
  • Lambda関数のコードにソースコードを記述
  • 環境変数に Messaging APIのChannel Access Tokenを設定
  • 「Lambda 関数ハンドラおよびロール」>「ロール名」に適宜ロール名を設定し、「ポリシーテンプレート」にはシンプルなマイクロハーネスのアクセス権限を設定
  • 確認ページで内容を確認し「作成」を選択

AWS API Gateway側の設定

APIGatewayの作成を行います。

  • AWSコンソールでAPI Gatewayを選択
  • 「APIの作成」から「新しいAPI」を選択し適宜API名を設定し「APIの作成」を選択
    スクリーンショット 2017-03-08 2.13.29.png

  • 「アクション」>「リソースのアクション」から「メソッドの作成」を選択しメソッドの種類にはPOSTを選択する

  • 「セットアップ」>「統合タイプ」には「Lambda関数」を選択し、Lambdaファンクションを作成したリーションを選択した後Lambdaファンクションの名前を選択し保存
    スクリーンショット 2017-03-08 2.18.04.png

  • 「アクション」>「APIアクション」>「APIのデプロイ」を選択し、APIをデプロイ
    ※完了後に「ステージ」から確認できるAPIのURLはLINE MessageAPIの設定に使用する。

LINE側の設定2

LINE Messaging APIにcallbackURLの設定を追加します。

  • LINE側の設定で確認した「Developers」ページを開く
  • 「Basic information」の「Edit」を選択し、「Webhook URL」にAPI Gatewayで作成したAPIのURLを設定

ソースコード

app.js
'use strict';

const https = require('https');

let send = (data, callback) => {
  let body = JSON.stringify(data);

  let req = https.request({
    hostname: "api.line.me",
    port: 443,
    path: "/v2/bot/message/reply",
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Content-Length": Buffer.byteLength(body),
      "Authorization": "Bearer " + process.env.CHANNEL_ACCESS_TOKEN
    }
  });

  req.end(body, (err) => {
    err && console.log(err);
    callback(err);
  });
}

exports.handler = (event, context, callback) => {
  let result = event.events && event.events[0];
  if (result) {
    let content = event.events[0] || {};
    let message = {
        "replyToken":result.replyToken,
        "messages": [
          {
            "type": "text",
            "text": content.message.text
          }
        ]
      };
      send(message, () => {
      callback();
    });
  } else {
    callback();
  }
};

GitHub: https://github.com/daikiojm/lambda-line-bot-test/blob/master/bot.js

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away