概要
2016/04/07 に LINE の 「BOT API Trial Account」 が無償提供開始。
AWS Lambda で LINE ボット (オウム返し) を作成する。
参照する from を間違えやすいので、注意のこと。
はじめに
以前、Lambda で Slack ボット 「ランボー」を作成しました。
- AWS Lambda を使って Slack ボット (命名: Lambot [ランボー]) を低予算で作ろうじゃないか
- AWS Lambdaで 形態素解析 できる賢いSlackボットを低予算で作ろうじゃないか (2)
LINE でも API が公開されたとのことで、「ランボー3」を作ろうじゃないか、という主旨です。
LINE
以下の手順で、ご自身の LINE アカウントで developer 登録をします。
登録方法
- https://developers.line.me/ にアクセス
- 右上のChannelsをクリックし、ご自身の LINE アカウントでログイン
- 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
完成
おわりに
- LINE は API 公開が遅い。期を逃した感がありますね。
- Slack ボット はチャネルを相手にするのに対して、LINE ボット は基本的には一人を相手にする感じですね。その点で、LINE は物足りなさを感じます。
- API そのものも、使いやすいとは言えない感じ。う〜ん、どうでしょう。
- エラーコード酷いです。「500 内部エラー」 はさっぱりわかりませんでした。
- まだ、プレビューですもんね。正式公開までには、きっと良くなると思います。
- 動画やスタンプを送ったり受けたり出来るようですが、また次回。