node.jsで LINE Bot を作るための最小構成的なものを探したけど思った感じなのが見つからなかったので作りました。
(みんな高機能すぎるよ〜〜〜)
-
herokuとかにデプロイする想定です
- httpsで受けられるサーバーならなんでもOK (httpsなのはLINEの制約)
-
この記事-> LINE BOTを無料で作る最も手っ取り早い方法 - Qiita を元にさせてもらいました
- これは Bluemix が前提だったので、Bluemix 要素を省いたのが本稿になります
-
line-bot-sdk-nodejsは使っていません
-
5月にできていたとは知りませんでした...複数プラットフォーム展開(Facebook Messenger など)や、Messaging APIに機能追加された場合の立ち回りのしやすさを考えるとsdkを使わないメリットもあるかと思います
-
前提
- LINE BOT用のアカウントを用意しておきましょう
- こちらがオススメです -> http://qiita.com/nkjm/items/daa4e34b26ef937446c6
- Webhook URL には
https://各自のドメイン/callback
のように入れておいてください- heroku以外(環境変数に
PORT
を指定しない場合)はhttps://各自のドメイン:3000/callback
- heroku以外(環境変数に
本題
これです↓
index.js
// import modules
const express = require('express')
const request = require('request')
const bodyParser = require('body-parser')
// create a new express server
const app = express()
app.use(bodyParser.json()) // for parsing application/json
app.use(bodyParser.urlencoded({
extended: true
})) // for parsing application/x-www-form-urlencoded
app.post('/callback', (req, res) => {
const options = {
method: 'POST',
uri: 'https://api.line.me/v2/bot/message/reply',
body: {
replyToken: req.body.events[0].replyToken,
messages: [{
type: 'text',
text: req.body.events[0].message.text // ここに指定した文字列がボットの発言になる
}]
},
auth: {
bearer: 'Channel Access Token' // ここは自分のtokenに書き換える
},
json: true
}
request(options, (err, response, body) => {
console.log(JSON.stringify(response))
})
res.send('OK')
})
app.listen(process.env.PORT || 3000, () => {
console.log('server starting on PORT:' + process.env.PORT)
})
-
Channel Access Token
は各自のtokenに書き換えてください - このままだとおうむ返しbotになります
- botの応答をカスタマイズする場合は
req.body.events[0].message.text
の箇所を任意の文字列に置き換えてください
- botの応答をカスタマイズする場合は
- 画像やボタンその他を送りたい場合は ドキュメント を参考に
messages
の内容を書き換えましょう
補足
- ES6っぽい書き方ができるのであればした方がいいのか?と思い const やアロー関数を使いましたが、フロントエンド界の常識とずれていたらプルリク or コメントいただけると嬉しいです