Rails에서 LINE Messaging API/앵무새 반환 Bot 만들기

소개



WEB API 공부에 사용한 LINE Messaging API 에 대해 정리를 위해 기술합니다.
다음과 같은 LINE Bot을 만들었습니다.

이번 여기에서는, 기능을 이해하기 위해 앵무새 반환을 하는 LINE Bot 작성을 해 갑니다.

환경




개발 환경
버전


루비
2.6.0

Ruby on Rails
5.1.7

Heroku
-


Messaging API를 사용하기 위한 준비



1. LINE Developers에 등록(기본 무료)



등록 방법은, 이쪽의 기사를 알기 쉽게 추천합니다.
LINE의 Bot 개발 초입문(전편)

2. Gemfile에 'line-bot-api' 작성



Gemfile
gem 'line-bot-api'
$ bundle install

3. Heroku에 배포 확인


$ git init
$ git add -A
$ git commit -m "initial commit"
$ git push origin -u master
$ git push heroku
$ heroku open

작성한 URL에 액세스할 수 있으면 작성 테스트 완료입니다.

4. 구현



4-1. 컨트롤러 작성


$ rails generate controller Linebot

작성한 컨트롤러에 기술

linebot_controller.rb
class LinebotController < ApplicationController
  require 'line/bot'

  def callback
    body = request.body.read
    signature = request.env['HTTP_X_LINE_SIGNATURE']
    unless client.validate_signature(body, signature)
      error 400 do 'Bad Request' end
    end
    events = client.parse_events_from(body)

    events.each do |event|
      case event
      when Line::Bot::Event::Message
        case event.type
        when Line::Bot::Event::MessageType::Text
          message = {
            type: 'text',
            text: event.message['text']
          }
        end
      end
      client.reply_message(event['replyToken'], message)
    end
    head :ok
  end

private

# LINE Developers登録完了後に作成される環境変数の認証
  def client
    @client ||= Line::Bot::Client.new { |config|
      config.channel_secret = ENV["LINE_CHANNEL_SECRET"]
      config.channel_token = ENV["LINE_CHANNEL_TOKEN"]
    }
  end
end

callback내에 기술되어 있는events = client.parse_events_from(body) 에는 다음과 같은
JSON 객체가 들어 있습니다.
자세한 내용은 공식 API 참조
{
  "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
  "type": "message",
  "timestamp": 1462629479859,
  "source": {
    "type": "user",
    "userId": "U4af4980629..."
  },
  "message": {
    "id": "325708",
    "type": "text",
    "text": "Hello, world!"
  }
}

events 의 내용의 데이터를 근거로 하면,callback 내에서와 같은 처리가 행해지고 있는지 보여 옵니다.
# evnets内のtypeを識別していく。
events.each do |event|
  case event
  when Line::Bot::Event::Message
    case event.type
# 今回はメッセージに対応する処理を行うため、type: "text"の場合処理をする。
# 例えば位置情報に対応する処理を行うためには、MessageType::Locationとなる。
    when Line::Bot::Event::MessageType::Text
      message = {
        type: 'text',
        text: event.message['text'] #送られた内容をそのまま返す
      }
    end
  end
# 応答メッセージを送る
  client.reply_message(event['replyToken'], message)
end

4-2. routes에 기술



routes.rb
Rails.application.routes.draw do
  post '/callback' => 'linebot#callback'
end

4-3. 지금까지의 변경을 Heroku에 배포


$ git add -A
$ git commit -m "add to linebot_text"
$ git push
$ git push heroku

4-4. Messaging API 콘솔에서 Webhook URL 등록




routes에서도 기술한 바와 같이 サーバーアプリのURL/callback 를 입력해 등록한다.
그리고는, 실제로 앵무새 반환이 되어 있는지 확인해 봅시다!

요약



개인적으로 WEB API를 사용한 것은 처음으로, 빠지는 부분도 있었습니다.
다만, API를 조합하면 유효한 서비스를 할 수 있다는 실감을 얻을 수 있었습니다.

좋은 웹페이지 즐겨찾기