LoginSignup
3
3

More than 5 years have passed since last update.

AWS Lambda を使って LINE ボット「ランボー3」を作ろうじゃないか

Last updated at Posted at 2016-07-03

概要

2016/04/07 に LINE の 「BOT API Trial Account」 が無償提供開始。
AWS Lambda で LINE ボット (オウム返し) を作成する。
参照する from を間違えやすいので、注意のこと。

はじめに

以前、Lambda で Slack ボット 「ランボー」を作成しました。

LINE でも API が公開されたとのことで、「ランボー3」を作ろうじゃないか、という主旨です。

LINE

以下の手順で、ご自身の LINE アカウントで developer 登録をします。

登録方法

  1. https://developers.line.me/ にアクセス
  2. 右上のChannelsをクリックし、ご自身の LINE アカウントでログイン
  3. Channel ID、Channel Secret、MID が取れていることを確認する

AWS Lambda

Lambda コードは以下になります。

  • 先頭3行の // Your ID は、適宜、ご自身の ID に置き換えてください。
  • to に from の値を設定するのですが、ここが一番の LINE ボット のハマりどころです。
    引数で渡されてくるjsonオブジェクトの、外側と内側の2箇所に from があるのですが、【内側 (content) の from が正解】 です。それを to に設定して下さい。
  • toChannel, eventType は指定されていますので変更しないで下さい!!!。詳細はドキュメント参照してください。
  • LINE からの コールバック は Application/json 形式なので、Slack の時のような面倒な フォーム→json 変換は不要です。
    (API Gatewary で POST を受けて、Lambda に流してやるだけで OK です。)
  • いい忘れてましたが、モジュール (request) を使うので、npm install した後、全体を zip してから Lambda にアップロードして下さい。 Lamba でインライン編集できるように、request モジュールを使わないように変更しました。

API ドキュメントはこちら
https://developers.line.me/bot-api/api-reference

index.js
'use strict';

var ChannelID = 1470000000; // Your ID
var ChannelSecret = "def889cei00000000000000000000000000000"; // Your ID
var MID = "u0e0450000000000000000000"; // Your ID


var https = require('https');

function send(data, callback) {
  var body = JSON.stringify(data);

  var req = https.request({
    hostname: "trialbot-api.line.me",
    port: 443,
    path: "/v1/events",
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Content-Length": Buffer.byteLength(body),
      'X-Line-ChannelID': ChannelID,
      'X-Line-ChannelSecret': ChannelSecret,
      'X-Line-Trusted-User-With-ACL': MID
    }
  });

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

exports.handler = function (event, context, callback) {
  var result = event.result && event.result[0];
  if (result) {
    var content = result.content || {};
    var message = {
      "to": [content.from],
      "toChannel": 1383378250, // 1383378250 Fixed value
      "eventType": "138311608800106203", // “138311608800106203” Fixed value.
      "content": {
        "contentType": 1,
        "toType": 1,
        "text": content.text
      }
    };
    send(message, function () {
      callback();
    });
  } else {
    callback();
  }
};

GitHub はこちら
https://github.com/exabugs/Lambot-Line/blob/master/index.js

完成

IMG_27492.png

おわりに

  • LINE は API 公開が遅い。期を逃した感がありますね。
  • Slack ボット はチャネルを相手にするのに対して、LINE ボット は基本的には一人を相手にする感じですね。その点で、LINE は物足りなさを感じます。
  • API そのものも、使いやすいとは言えない感じ。う〜ん、どうでしょう。
  • エラーコード酷いです。「500 内部エラー」 はさっぱりわかりませんでした。
  • まだ、プレビューですもんね。正式公開までには、きっと良くなると思います。
  • 動画やスタンプを送ったり受けたり出来るようですが、また次回。
3
3
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
3
3