LoginSignup
7
8

More than 5 years have passed since last update.

LINE BOTを作る最小構成(sdk未使用/node.jsの場合)

Last updated at Posted at 2017-06-10

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

本題

これです↓

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 の箇所を任意の文字列に置き換えてください
  • 画像やボタンその他を送りたい場合は ドキュメント を参考に messages の内容を書き換えましょう

補足

  • ES6っぽい書き方ができるのであればした方がいいのか?と思い const やアロー関数を使いましたが、フロントエンド界の常識とずれていたらプルリク or コメントいただけると嬉しいです

参考

7
8
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
7
8