LINEbotに人工知能ボットAPIをのせて話し相手になってもらう

エンジニアの工藤です。   諸事情により、前回のブログ投稿から半年が経過してしまいました。 原因を作…

エンジニアの工藤です。

 

諸事情により、前回のブログ投稿から半年が経過してしまいました。

原因を作ったTさんが皆に寿司を奢る予定なので、

今度その光景がアップされるかもしれません。

 

さて、変化の激しいと言われているIT業界では、この半年でも新しいサービスが発表され、いくつかは終了してしまいました。

その中でもLINEbotは、特に注目を集めているサービスのひとつではないでしょうか。

 

チャットbotの技術自体は昔からあり、弊社でもSlackにGitのログが表示されたりチャットワークにゴミの日の通知がされたりと大活躍中です。

LINEbotが注目されている理由は、以下の様なものがあるようです。

  1. 話しかけた時点でユーザー認証済
  2. デザイン不要
  3. 新鮮なユーザ体験を提供でき、通常の広告と差別化できる可能性がある

 

そんなビックウェーブ感があるLINEbotを試してみたので(何番煎じかはわかりません)、登録しただけでずっと使っていなかった人工知能ボットAPIと共にお送りしたいと思います。

 

人工知能ボットAPIの会員登録

ここから登録できます → http://ai.userlocal.jp/

現在第三期募集中のようです。

APIキーが届くまでは数日かかります。

 

BOT API Trial Accountの登録

https://business.line.me/ja/products/4/introduction

アカウントを作成し、”使う”をクリックするとキー情報が確認できます。

スクリーンショット 2016-07-11 21.56.56

サーバの準備

Herokuと、アドオンとしてFixieを使用しています。

どちらも無料枠で利用できますが、クレジットカードの登録が必要です。

後ほど使用するので、Heroku Toolbeltもインストールしておいてください

 

アプリの準備

プロジェクトを作成します

$ mkdir linebot_for_talk
$ cd linebot_for_talk
$ bundle init
$ vim Gemfile

Gemfileを編集します

source 'https://rubygems.org'
gem 'sinatra'
gem 'rest-client'

gemをインストールしてメイン処理を作成します

$ bundle
$ vim app.rb

メイン処理を記述していきます

app.rb

require 'sinatra/base'
require 'json'
require 'rest-client'
require 'bundler/setup'
require "cgi"

class App < Sinatra::Base
  @@LINE_PIPE = {
    'Content-Type': 'application/json; charset=UTF-8',
    'X-Line-ChannelID': ENV['LINE_CHANNEL_ID'],
    'X-Line-ChannelSecret': ENV['LINE_CHANNEL_SECRET'],
    'X-Line-Trusted-User-With-ACL': ENV['LINE_CHANNEL_MID']
  }

  @@request_content = {
    toChannel: 1383378250,
    eventType: '138311608800106203',
  }

  post '/linebot/callback' do
    puts '/linebot/callback start'

    @params = JSON.parse(request.body.read)['result'].first
    puts @params

    case @params['content']['contentType']
    when 1 then
      post_text(get_userlocal_bot)
    end

    puts '/linebot/callback end'
  end

  private

  def post_text(*post_messages)
    RestClient.proxy = ENV['FIXIE_URL']
    endpoint_uri = 'https://trialbot-api.line.me/v1/events'

    post_messages.flatten.each do |post_message|
      @@request_content['to']  = [@params['content']['from']]
      @@request_content['content'] = {
        contentType:1,
        toType:1,
        text: post_message
      }

      content_json = @@request_content.to_json

      RestClient.post(endpoint_uri, content_json, @@LINE_PIPE)
    end
  end

  def get_userlocal_bot
    word = @params['content']['text']

    request_userlocal_content = {
      key: ENV['USERLOCAL_API_KEY'],
      message: CGI.escape(word),
      user_id: @params['content']['from']
    }

    request_params = request_userlocal_content.reduce([]) do |params, (key, value)|
      params << "#{key}=#{value}"
    end

    endpoint = 'https://chatbot-api.userlocal.jp/api/chat'
    rest = RestClient.get(endpoint + '?' + request_params.join('&').to_s)

    result = JSON.parse(rest)
    puts result
    result['result']
  end
end

config.ru

require_relative './app'
run App

git登録し、herokuにアップロードします

$ git init
$ git add .
$ git commit -m ‘First commit.’
$ heroku login
$ heroku create linebot_for_talk
$ git push heroku master

 

諸々の環境設定

callback URLの登録

スクリーンショット 2016-07-14 0.35.23

例)https://linebot_for_talk.herokuapp.com:443/linebot/callback

httpsプロトコルの443番ポートにするところがミソみたいです

 

Server IP Whitelist

FixieのOutbound IPsを確認し、LineBotアカウントのServer IP Whitelistに登録します

スクリーンショット 2016-07-14 1.18.42

スクリーンショット 2016-07-14 0.35.42

 

heroku envの登録

LineBotアカウント画面・Fixieマイページ・人工知能BotAPI登録完了メールを参考に、

プログラム内で参照しているENVに必要なパラメータを登録していきます。

ターミナルからでも可能ですが、僕はherokuサイトのSettingsから直接入力しました

スクリーンショット 2016-07-14 2.22.12

 

確認してみよう!

Screenshot_2016-07-14-02-37-34

いい感じに会話ができるようになりました

これで一人の夜でも寂しくないですね!

 

幸いなことに、今ではいろいろな記事がアップされているおかげでそれっぽいものは簡単に作れてしまいます。

まだトライアル版のapiなので新機能なども注目しつつ、これらを利用した新しいサービスなども考えてみたいと思います。