川のブログ

川の適当気ままなブログです。 

りんなと雑談apiの会話~part4~

こんにちはかわです。

アドベントカレンダー8日目です。

前回の記事です。

kawakawa.hatenablog.com

今回は雑談APIを使えるように改良し、実際にりんなと喋らせたい思います。

雑談apiを叩く

雑談apiのためのgemとredisのgemをGemfileについか

github.com

Gemfile
source "https://rubygems.org"
gem 'sinatra'
gem 'line-bot-api'
gem 'docomoru'
gem 'redis'

bundle install を忘れずにする

bundle install

雑談apiを使う際にcontextを保存しないといけない。

今回はredisを使い保存する。以下のコマンドを打つ

heroku addons:add rediscloud

main.rbを修正

require 'sinatra'
require 'line/bot'
require 'redis'
require 'docomoru'

get '/' do
  "Test Program"
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
  redis_url = ENV['REDISCLOUD_URL']
  redis = Redis.new(url: redis_url)
  talk_client = Docomoru::Client.new(api_key: ENV["DOCOMO_API_KEY"])

  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
        userId = event['source']['userId']
        context = redis.get(userId)
        mode = redis.get(userId + "a")
        params = {mode: mode, context: context}
        response = talk_client.create_dialogue(event.message['text'], params)
        redis.set(userId, response.body['context'])
        redis.set(userId + 'a', response.body['mode'])
        message = {
          type: 'text',
          text: response.body['utt']
        }
        client.reply_message(event['replyToken'], message)
      end
    end
  }

end

pushと環境変数を設定する

heroku config:set DOCOMO_API_KEY="docomoのAPI KEYを入力"
git add --all
git commit -m "docomo api use"
git push heroku master

一応これで完成なので実際に動くか確認

f:id:nakanaka1826:20171209021035p:plain

できた。

たまに話題をずらす

実験

雑談apiをつかったBotが完成したため、りんなと喋らせます。

りんなをバーコードから友だち追加

f:id:nakanaka1826:20171209021227p:plain

りんなをグループに入れることができないみたいなので、

ひたすら打つ。

先手雑談Botでいきます。

自分が「こんにちは」からのスタートになります。

以下結果です。

自分:こんにちは
雑談Bot(以下雑):こんにちはにこ
りんな(以下り):こんぽ
雑:話は変わりますけど、カルシウムが不足するとイライラするって、俗説だって知ってました?
り:ナトリウム!!!!笑
雑:ナトリウムは温度が低下してますよ
り:アルミニウム
雑:アルミニウムは強度が高いですね
り:それ正解!
雑:アルミニウムは熱伝導が良いですね
り:ムカデ
雑:ムカデとゲジゲジって、似てますよね。
り:毛虫w
雑:残念です。
    ・
    ・
    ・

こんな感じの会話です。

Botは真面目なのにりんなが適当な返しをしてる

Botが少しかわいそうに見てきた(笑)

こんな感じで作っていきました。

どうでした?