[Rails]LINE Bot을 로컬 환경에서 이동하거나 디버깅하는 방법
15602 단어 LINEmessagingAPIlinebotRails
소개
LINE Bot을 개발할 때, heroku나 AWS등의 PaaS나 IaaS를 사용하고 있는 분이 많다고 생각합니다만, 수정할 때마다 매번 배포하는 것은 귀찮다고 생각합니다.
그래서 Ngrok이라는 도구를 사용하여 일반 웹 애플리케이션을 개발하기 위해 로컬 환경에서 LINE Bot을 쉽게 이동하고 디버깅하는 방법을 소개합니다.
덧붙여서 LINE Bot은 Rails 전제로 쓰고 있습니다.
환경
※Windows상에서 vagrant로 Rails 환경을 움직이고 있습니다
1. LINE Developers에서 설정
1-1. 채널 만들기
아래 공식 절차를 참조하여 BOT용 채널을 만듭니다.
ぇぺぺrs. 네. 메 / 자 / 도 cs / 메사 긴 g 아피 / 곁 친 g - r d /
1-2. 콘솔에서 봇 설정
그런 다음 아래 콘솔에서 만든 채널을 설정합니다.
ぇぺぺrs. 네.め/こんそぇ/
여기에서 Webhook 보내기를 선택하여 webhook을 활성화합니다.
또한 다음 키를 삼가해 둡니다.
2. Rails 초기 설정
rails new로 프로젝트를 만듭니다. 불필요한 것은 옵션으로 생략합니다.
bundle exec rails new sample_bot --skip-turbolinks --skip-test --skip-bundle
Gemfile을 수정합니다.
초기 설정 그대로도 문제 없습니다만,
gem 'line-bot-api'
는 추가해 둡니다.Gemfile
source 'https://rubygems.org'
gem 'rails', '~> 5.1.4'
gem 'puma', '~> 3.7'
gem 'line-bot-api'
group :production do
gem 'pg', '0.18.4'
end
group :development, :test do
gem 'sqlite3'
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
gem 'better_errors'
gem 'binding_of_caller'
gem 'rspec-rails'
gem 'rails-controller-testing'
end
group :development do
gem 'web-console', '>= 3.3.0'
gem 'listen', '>= 3.0.5', '< 3.2'
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
bundle install합니다.
bundle install --without production
아래에서 rails가 시작되면 완료됩니다.
bundle exec rails server
2. 앵무새 반환 BOT 구현
우선 앵무새 반환하는 bot를 구현합니다. 아래 공식 SDK 샘플을 기반으로 만듭니다.
htps : // 기주 b. 코 m / ぃね / ぃねーぼ tsdk-by
config/routes.rb
Rails.application.routes.draw do
post '/callback', to: 'webhook#callback'
end
app/controllers/application_controller.rb
require 'line/bot'
class ApplicationController < ActionController::Base
protect_from_forgery with: :null_session
before_action :validate_signature
def validate_signature
body = request.body.read
signature = request.env['HTTP_X_LINE_SIGNATURE']
unless client.validate_signature(body, signature)
error 400 do 'Bad Request' end
end
end
def client
@client ||= Line::Bot::Client.new { |config|
config.channel_secret = ENV["LINE_CHANNEL_SECRET"]
config.channel_token = ENV["LINE_CHANNEL_TOKEN"]
# ローカルで動かすだけならベタ打ちでもOK
# config.channel_secret = "your channel secret"
# config.channel_token = "your channel token"
}
end
end
app/controllers/webhook_controller.rb
class WebhookController < ApplicationController
def callback
body = request.body.read
events = client.parse_events_from(body)
events.each { |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)
when Line::Bot::Event::MessageType::Image, Line::Bot::Event::MessageType::Video
response = client.get_message_content(event.message['id'])
tf = Tempfile.open("content")
tf.write(response.body)
end
end
}
"OK"
end
end
application_controller.rb
에서 참조하는 환경 변수를 서버에 설정합니다만, 로컬로 움직이는 것만이라면 베타타도 문제 없습니다.ENV["LINE_CHANNEL_SECRET"]
-> LINE Developers 콘솔 로부터 취득한 Channel Secret 를 지정 ENV["LINE_CHANNEL_TOKEN"]
-> LINE Developers 콘솔 로부터 취득한 액세스 토큰을 지정 3. 로컬로 이동
여기에서 로컬로 이동하는 주요 단계입니다. 다음 단계에 따라 로컬에서 LINE Bot을 움직이는 환경을 구성합니다.
3-1. Ngrok 설치
Ngrok을 아래에서 다운로드하여 압축을 풉니 다.
htps : / / 응 g로 k. 코m/
※해동한 폴더에 path를 통해 두십시오.
3-2. Ngrok 시작
ngrok http -host-header=rewrite 192.168.33.10:3000
# ローカルからアクセスできるRailsのURL(この場合は192.168.33.10:3000)にリライトするように指定します
http://localhost:3000
에서 액세스 할 수있는 경우) ngrok http 3000
# リライト不要で ngrok http 3000でOK
↓의 느낌으로 기동하므로,
https://d9cbf7ca.ngrok.io
의 부분을 copipe 합니다. LINE의 Webhook URL은 https인 것이 필수이지만, 아래와 같이 https로 시작하고 있음을 알 수 있습니다.ngrok by @inconshreveable
Session Status online
Version 2.2.8
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://d9cbf7ca.ngrok.io -> 192.168.33.10:3000
Forwarding https://d9cbf7ca.ngrok.io -> 192.168.33.10:3000
Connections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00
3-3. LINE Developers에서 Webhook URL 설정
htps : //에서 ゔぇぺぺrs. 네. 메/그럼/
방금 복사한 URL +/callback을 지정합니다.
3-4. Rails 시작
bundle exec rails server
3-5. LINE에서 가동 확인
지금까지 로컬에서 가동 확인할 수 있는 환경이 갖추어졌으므로, 작성한 BOT를 친구 추가하고 실제로 LINE에서 메시지를 보냅니다.
흐름적으로는 이런 느낌입니까?
LINEアプリ -> LINE Messaging API -> Ngrok -> Rails(local)
디버깅도!
byebug
이나 binding.pry
를 넣으면 보통 디버깅도 가능합니다.(디버깅 방법은 여기 → Ruby / Ruby on Rails 디버깅 방법 요약)
[6, 15] in /vagrant/rails_app/sample_bot/app/controllers/webhook_controller.rb
6: events = client.parse_events_from(body)
9: byebug
10:
=> 11: events.each { |event|
12: case event
13: when Line::Bot::Event::Message
14: case event.type
15: when Line::Bot::Event::MessageType::Text
(byebug)
이제 LINE Bot 개발이 가속화됩니다. 좋았어요.
Reference
이 문제에 관하여([Rails]LINE Bot을 로컬 환경에서 이동하거나 디버깅하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/TakeshiFukushima/items/aec362407f1ee2f455a9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)