1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Rails] LINE MessagingAPIを使ってecho(オウム返し)Bot を作成する。

Last updated at Posted at 2020-08-25

 概要

Web APIを学習するために、LINEのBot開発を行いました。
今回は簡単な送られたテキストをそのまま返すechoBotを作成します。
Railsで開発し、Herokuへのデプロイまで行います。

 環境

・Ruby 2.6.5
・Rails 6.0.3.2
・PostgreSQL
・Heroku

 目次

・LINE Developersでchannelを作成
・Bot本体のプログラムを作成(Ruby/Rails)
・Herokuへのデプロイ

 LINE Developersでchannelを作成

まずはLINEデベロッパー登録を行います。 その後にプロバイダーとチャネルを作成し、必要なAPIキーを取得しましょう。
https://developers.line.biz/ja/docs/messaging-api/getting-started/

公式(上記)を参考にBot用channelを作成します。
簡単に作業を箇条書きにしますと、

・LINE Developersコンソールにログイン
・名前とメールアドレスを入力して開発者アカウントを作成
・プロバイダ、チャネルを作成、この時MessagingAPIを指定
・アクセストークンを発行
・応答メッセージをオフ Webhockをオンに設定しておく

Channel secretとChannel access tokenがBot開発に必要なのでここでメモしておきます!

 Bot本体のプログラムを作成(Ruby/Rails)

HerokuにデプロイするのでDBはPostgreSQLを使用します。

$ rails new アプリ名 -d postgresql
$ cd アプリ名
$ git init

 必要なgemをインストール

line-bot-apiというgemを使用します。

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

 実装

 1. ルーティングの設定

config/routes.rb

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

 2. コントローラーを作成

$ rails g controller linebot

 3. コントローラーへの記述

コントローラーへの記述はライン公式SDKのRUBYを参考に(コピペ)しました。
https://github.com/line/line-bot-sdk-ruby/blob/master/examples/echobot/app.rb

class LinebotController < ApplicationController
 require 'line/bot'  # gem 'line-bot-api'

def client
  @client ||= Line::Bot::Client.new { |config|
    config.channel_secret = ENV["LINE_CHANNEL_SECRET"]
    config.channel_token = ENV["LINE_CHANNEL_TOKEN"]
  }
end

post '/callback' do
  body = request.body.read

  signature = request.env['HTTP_X_LINE_SIGNATURE']
  unless client.validate_signature(body, signature)
    halt 400, {'Content-Type' => 'text/plain'}, 'Bad Request'
  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']
        }
        client.reply_message(event['replyToken'], message)
      end
    end
  end

  "OK"
 end
end

 Herokuへのデプロイ

まずはHerokuへのログインをし、Heroku上にアプリを作成し、デプロイをします。

 Heroku側に環境変数を設定します。

$ heroku config:set LINE_CHANNEL_SECRET=ここに先程メモしたChannel Secretを貼り付ける
$ heroku config:set LINE_CHANNEL_TOKEN=ここに先程メモしたアクセストークンを貼り付ける

 LINE developersでWebhook settingsの設定をする

デプロイしたアドレスの末尾に/callbackをつけたURLをWebhookに設定する.
image.png

これでecho-botの完成です。テキストを送ると同じテキストを返してきます。

 まとめ

現状ではコードの変更後、デプロイしなくては反映されないので、
次回はngrokを用いてローカル環境で動かす方法を行います。
https://qiita.com/shizu9d/items/42b2cb209b2e23a9af6d

 参考文献

以下の記事を参考にさせていただきました。
https://qiita.com/noriya1217/items/00d6461e9f54900377a3

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?