로컬로 시작 LINE bot @Ruby

11816 단어 MessagingAPI루비Line

이번에 하는 내용


  • ngrok을 사용하여 로컬 개발 환경을 구축합니다.
    heroku를 사용하여 영속화하려면 【LINE bot】첫 오미쿠지 bot
  • 간단한 되돌아 가기 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 설명

    Gemfile
    gem '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.rb
    require 'bundler/setup'
    Bundler.require
    
    get '/' do
        'true'
    end
    

    서버 시작



    시작한 후에 true가 표시되면 괜찮습니다.
    $  bundle exec ruby app.rb
    

    line bot의 프로그램을 추가하겠습니다.
    app.rb에 프로그램을 작성합니다.

    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
    

    Messaging API 사용



    LINE Developers에서 새 bot를 만듭니다.

    지금 시작하기 > 공급자 선택 > 새 채널 만들기를 선택합니다.
    ※채널 작성시에 업종 선택이 있습니다만, 특별한 이유가 없는 경우는 「그 외」를 선택합니다.


    초기 설정 화면





    초기 설정에서 변경


  • 이메일 주소 편집
  • Webhook 제출 > 편집 > 사용하기
  • 액세스 토큰 발급
    시간은 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이 완성되었습니다!

    좋은 웹페이지 즐겨찾기