로컬로 시작 LINE bot @Ruby
11816 단어 MessagingAPI루비Line
이번에 하는 내용
heroku를 사용하여 영속화하려면 【LINE bot】첫 오미쿠지 bot
로컬 환경 설정
ngrok을 사용합니다.
처음은 LINE의 설정을 하므로, 인스톨되어 있지 않은 분은 미리 인스톨을 부탁합니다.
# macの場合
brew cask install ngrok
# linuxの場合
npm i -g ngrok
ngrok을 사용합니다.
※서버와는 별도의 터미널에서 열
$ ngrok http 3000
Session Status online
Session Expired Restart ngrok or upgrade: ngrok.com/upgrade
Version 2.2.8
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://xxxxxx.ngrok.io -> localhost:3000
Forwarding https://xxxxxx.ngrok.io -> localhost:3000
Connections ttl opn rt1 rt5 p50 p90
105 0 0.00 0.00 0.87 4.76
필요한 패키지 설치
Gemfile 만들기
$ gem install bundler
$ bundle init
Gemfile 설명
Gemfilegem 'sinatra'
gem 'sinatra-contrib'
gem 'rake'
gem 'line-bot-api'
gem 'dotenv'
gem을 설치합니다.
$ bundle install
app.rb를 작성해 server의 부분을 ruby로 기술해 갑니다.
$ touch app.rb
먼저 서버가 시작되는지 확인합니다.
여기에서 움직이지 않는 경우는 ruby/sinatra의 환경 구축으로 막혀 있다고 생각됩니다.
app.rbrequire 'bundler/setup'
Bundler.require
get '/' do
'true'
end
서버 시작
시작한 후에 true
가 표시되면 괜찮습니다.
$ bundle exec ruby app.rb
line bot의 프로그램을 추가하겠습니다.
app.rb에 프로그램을 작성합니다.
app.rbrequire 'line/bot'
require 'bundler/setup'
Bundler.require
Dotenv.load
get '/' do
'true'
end
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)
error 400 do 'Bad Request' end
end
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
Messaging API 사용
LINE Developers에서 새 bot를 만듭니다.
지금 시작하기 > 공급자 선택 > 새 채널 만들기를 선택합니다.
※채널 작성시에 업종 선택이 있습니다만, 특별한 이유가 없는 경우는 「그 외」를 선택합니다.
초기 설정 화면
초기 설정에서 변경
# macの場合
brew cask install ngrok
# linuxの場合
npm i -g ngrok
$ ngrok http 3000
Session Status online
Session Expired Restart ngrok or upgrade: ngrok.com/upgrade
Version 2.2.8
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://xxxxxx.ngrok.io -> localhost:3000
Forwarding https://xxxxxx.ngrok.io -> localhost:3000
Connections ttl opn rt1 rt5 p50 p90
105 0 0.00 0.00 0.87 4.76
$ gem install bundler
$ bundle init
gem 'sinatra'
gem 'sinatra-contrib'
gem 'rake'
gem 'line-bot-api'
gem 'dotenv'
$ bundle install
$ touch app.rb
require 'bundler/setup'
Bundler.require
get '/' do
'true'
end
$ bundle exec ruby app.rb
require 'line/bot'
require 'bundler/setup'
Bundler.require
Dotenv.load
get '/' do
'true'
end
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)
error 400 do 'Bad Request' end
end
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
LINE Developers에서 새 bot를 만듭니다.
지금 시작하기 > 공급자 선택 > 새 채널 만들기를 선택합니다.
※채널 작성시에 업종 선택이 있습니다만, 특별한 이유가 없는 경우는 「그 외」를 선택합니다.
초기 설정 화면
초기 설정에서 변경
시간은 0시간이면 괜찮아요
webhook 설정
설정 화면에서 webhook URL을
https://xxxxxxxx.ngrok.io
+ /callback
로 변경.※ 공급자 목록 > 프로바이더 > bot명으로부터 액세스 할 수 있습니다
환경 변수 설정
touch .env
LINE_CHANNEL_SECRET="Channel Secretのメモ"
LINE_CHANNEL_TOKEN="アクセストークンのメモ"
오미쿠지 봇 만들기
오미쿠지의 기능
다음과 같이 오미쿠지의 프로그램을 구현합니다.
./app.rb
if event.message['text'] =~ /おみくじ/
message[:text] = ["大吉", "中吉", "小吉", "凶", "大凶"].sample
end
오미쿠지 프로그램 해설 1
if 문에서 정규식로 패턴 매칭을하고 있습니다.
if event.message['text'] =~ /おみくじ/
오미쿠지 프로그램 해설 2
배열내의 순서를 랜덤으로 재정렬해 최초의 요소를 돌려줍니다.
["大吉", "中吉", "小吉", "凶", "大凶"].sample
이상으로 오미쿠지bot이 완성되었습니다!
Reference
이 문제에 관하여(로컬로 시작 LINE bot @Ruby), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/4geru/items/aa076fa57d1913312307텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)