コミュ障だから明日が僕らをよんだって返事もろくにしなかった

何かを創る人に憧れたからブログをはじめたんだと思うよ

【悲報】チャットボットを作ってみるも会話する人間がいないことに気づきあえなく撃沈

僕に友達はいなかった(爆)

ネットワークが発達して、今や誰とでも会話できる時代になりましたがみなさまいかがお過ごしでしょうか?とうの僕は情報技術が進歩しようがおかまいなく会話するような人間がいません。会話する人間がいません(大事なことなので二回言います。)。

ネットにつながりなんてなかったんや……。悲しいなぁ……。



Repl-AIさわってみた

そういったわけで、当時の僕は若く会話する人間がネット上に存在しないことに気づかずにAIチャットボット制作をしていたのでした。

無料のAIチャットボット『Repl-AI(レプルAI)』|docomo × インターメディアプランニング

f:id:andron:20181017204108p:plain
ちょうどこんなやつがあったので触ってみました。プログラムとかいらないらしいですよ。




なんかつくってみる

ということで作ってしまったものをそのまま封印するのもアレなのでネットに情報を残しておきます。とりま、チュートリアル通りになんか作ってみます。
f:id:andron:20180819024717p:plain
これで、「初回起動時:おはよう => 会話:おはよう => 返答:いい天気ですね」の流れができます。このつくったやつがFacebookとかLineで使えるらしいですが僕それやってないのでよくわかりません。

触った感触としては常々イベント駆動処理って感じがする。ただ変数管理ができるらしく恋愛ゲームの好感度的サムシングのものはサクッとできそうな気がした。もっと細かいこといじれると思うんですけど、この辺りでこんなの作っても会話する知人とかいないじゃ意味ないなーという気づきを得て虚しくなり始め手を付けるのをやめてしまいました。


まあいいや。エミュレータで動作確認して動いたやったーってやっても仕方ないので、Rubyで適当なコード作って実際に動いたーやったーってのをやって確認していきたいと思います。

require 'net/https'
require 'uri'
require 'json'

##############################
##### ユーザIDの取得
url = 'https://api.repl-ai.jp/v1/registration'
token = 'あなたのAPIキー'
botId = 'あなたのBotID'
initTopicId = 'あなたのシナリオID'

uri = URI.parse(url)
https = Net::HTTP.new(uri.host, uri.port)

https.use_ssl = true #HTTPS

req = Net::HTTP::Post.new(uri.request_uri)
### リクエストヘッダ
req["Content-Type"] = 'application/json'
req["x-api-key"] = token

### リクエストボディ
payload = {
    "botId" => botId
}.to_json

req.body = payload
res = https.request(req)

# レスポンスの中身を見てみる
#puts "code -> #{res.code}"
#puts "msg -> #{res.message}"
#puts "body -> #{res.body}"

reqbody = JSON.parse(res.body)

##############################
##### 対話
url = 'https://api.repl-ai.jp/v1/dialogue'
uri = URI.parse(url)
https = Net::HTTP.new(uri.host, uri.port)

https.use_ssl = true #HTTPS

req = Net::HTTP::Post.new(uri.request_uri)
### リクエストヘッダ
req["Content-Type"] = 'application/json'
req["x-api-key"] = token

### リクエストボディ
payload = {
    "appUserId" => reqbody['appUserId'],
    "botId" => botId,
    "voiceText" => 'init',
    "initTalkingFlag" => true,
    "initTopicId" => initTopicId,
}.to_json

req.body = payload
res = https.request(req)

# レスポンスの中身を見てみる
#puts "code -> #{res.code}"
#puts "msg -> #{res.message}"
#puts "body -> #{res.body}"
puts JSON.parse(res.body)["systemText"]["expression"] #テキストメッセージ抽出

### 2回目以降 対話
### リクエストボディ
voiceText = 'おはよう'
payload = {
    "appUserId" => reqbody['appUserId'],
    "botId" => botId,
    "voiceText" => voiceText,
    "initTalkingFlag" => false,
}.to_json

req.body = payload
res = https.request(req)

# レスポンスの中身を見てみる
#puts "code -> #{res.code}"
#puts "msg -> #{res.message}"
#puts "body -> #{res.body}"
puts JSON.parse(res.body)["systemText"]["expression"] #テキストメッセージ抽出

出力

$ ruby ***.rb
おはよう
いい天気ですね

とりあえずこれで、こんな感じで拾えるようになりました。コードが雑なのは僕に会話する人間がいない悲しみを背負っているからです(謎)。そういえば、なにげにPOSTの確認はこれがはじめてかもしれない。まあいいや。これでLINEやFacebook以外のツールでも応用きかせられる準備ができました(しかし、僕には会話する知人がいないので意味がなかった……)。無念です。

あ、あとこれ毎回API複数回呼び出してる無駄コードなんで、初回呼び出し以降は処理を分岐するなりなんなりしてお使いください(なにかで流用するならの話ですが……)。まあ、他にもレスポンスがnilのときどうするとか一切考えてなかったりする怪しいコードなんですけどね……。




まーなんていうか、この誰とも会話しない状況をなんとかするにはTwitterとかやればいいんですかね……。


参考APIリファレンス
Repl-AI - ユーザーID取ユーザーID取得|AIチャットボット作成サービス『Repl-AI』