LINE BOTが友達に追加された時にメッセージを送る。
よく公式アカウントとかで追加時にメッセージを送ってきてくれて使い方とか説明するのを再現できる。
前準備
Heroku上で動作確認。
コールバックを受ける必要があるのでFixieを使って固定IPへのプロキシを通しましょう。
参考 LINE BOT をとりあえずタダで Heroku で動かす
依存パッケージ
package.jsonに書いてある通りです。
expressとか使って、LINEのサーバからのコールバック受けてます。
body-parser入れないと、コールバックの中身を受け取れないので詰みます。
{
"name": "line-bot",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"body-parser": "^1.15.0",
"express": "^4.13.4",
"request": "^2.70.0"
},
"engines": {
"node": "5.9.0",
"npm": "3.7.3"
}
}
HTTPサーバ
expressを使ってます。
LINEのBasic informationに登録したCallback URLになるようにルーティングを /callback
に設定。
var express = require('express')
var bodyParser = require('body-parser')
var callback = require('./routes/callback')
var app = express()
var http = require('http').Server(app)
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use('/callback', callback)
app.listen(process.env.PORT || 3000)
コールバックを受け取る処理
LINEの設定や、Fixieの設定はjsonファイルから読んでます。
公式ドキュメントによると今のところ
- 友達へ追加(ブロック解除も含む)
- ブロック
の2種類の操作でもコールバックURLが呼び出されます。
(グループへの追加とかは無いみたい。追加できないし)
このコールバックURL呼び出し時にcontentのparamsに入っているMIDが操作を起こしたユーザのIDです。(友達へ追加した、削除した)
なので、このIDへメッセージを送れば追加時にメッセージを送ることが可能です。
var express = require('express')
var request = require('request')
var line_conf = require('./line_conf.json')
var fixie_conf = require('./fixie_conf.json')
var router = express.Router()
var proxy = request.defaults(fixie_conf)
var headers = {
'Content-Type': 'application/json; charset=UTF-8',
'X-Line-ChannelID': line_conf['X-Line-ChannelID'],
'X-Line-ChannelSecret': line_conf['X-Line-ChannelSecret'],
'X-Line-Trusted-User-With-ACL': line_conf['X-Line-Trusted-User-With-ACL']
}
function sendMessage(to, content) {
var options = {
url: 'https://trialbot-api.line.me/v1/events',
method: 'POST',
headers: headers,
json: true,
body: {
'to': to,
'toChannel': 1383378250,
'eventType': "138311608800106203",
'content':content
}
}
proxy(options, (err, res, body) => {
if (err) {
console.log(err)
}
})
}
function recvOperation(content) {
var id = [content.params[0]]
var content = {
"contentType":1,
"toType":1,
"text": 'へい!らっしゃい!!'
}
sendMessage(id, content)
}
router.post('/', (req, res, next) => {
var results = req.body.result
results.forEach((result) => {
switch (result.eventType) {
// receive operation
case '138311609100106403':
recvOperation(result.content)
break;
// receive message
case '138311609000106303':
var content = {
"contentType":1,
"toType":1,
"text": result.content.text
}
sendMessage([result.content.from], content)
break;
default:
}
})
res.json(req.body)
})
module.exports = router
LINE BOTの設定
Basic informationで取得した情報を入れます。
{
"X-Line-ChannelID": "",
"X-Line-ChannelSecret": "",
"X-Line-Trusted-User-With-ACL": ""
}
Fixieの設定
FixieのProxy URLを入れます。
{"proxy": ""}
試す
ここまでできたら、Herokuにpushすれば友だち追加した際に 「へい!らっしゃい!!」 と言ってくれる