破・SlackBotを会話APIと連携させる

この記事は3部構成になっています。

序・SlackBotを作ります - riririusei99’s blog
破・SlackBotを会話APIと連携させる - riririusei99’s blog←今ココ
急・SlackBotを作ってみたまとめ - riririusei99’s blog

はじめに

この投稿はチームスピリット Advent Calendar 2017 - Adventarの9日目の記事になります。
adventar.org

ほろよいてっく向けのネタのためにやる(2日目)。

前回作成したSlackBotにオリジナル感を出していきます。

今回取り扱うもの

A3RT (TalkAPI) a3rt.recruit-tech.co.jp Talk APIはChatbotを作成するためのAPIです。Recurrent Neural Network(LSTM)を用いた入力文からの応答文生成による日常会話応答機能を提供します。
ふむふむ。とりあえず流行りには乗っかってみる。

pya3rt
github.com pythonでA3RTに接続するため用

jaconv
github.com ロボ感を出すために探してきました

今回やりたいこと

  • 雑談ができる(A3RTで実現)
  • Bot本来の機能も使える(SlackBotの機能)
  • Botなのでロボ感がある

それでは開始

A3rt API Tokenの取得

下記 URLからTokenの取得 https://a3rt.recruit-tech.co.jp/product/talkAPI/

  • API Tokenをメモるトークンは公開しちゃダメ!)

インストール

# 必要なものインストール
sudo pip3 install pya3rt jaconv

DEFAULT_REPLYの削除

今回はDEFAULT_REPLYに特定の動作を追加するため、slackbot_settings.pyを修正する。

slackbot_settings.py

# SlackBot API Token
API_TOKEN = "<your-api-token>"

# Defalut Replyはココ  <<コレもついでに削除
DEFAULT_REPLY = "Sorry but I didn't understand you" <<コレを削除

# Plugin Directory
PLUGINS = ['plugins']

Default Reply に会話APIと連携する

response.py

from slackbot.bot import respond_to
from slackbot.bot import default_reply

import pya3rt
import jaconv

# ココにBotとしての機能を載せる
@respond_to('ジーク')
def zeon(message):
    message.reply('ジオン!!')

# それ以外は会話機能になる
@default_reply()
def talkA3rt(message):
    apikey = '<your-A3RT-api-token>'
    client = pya3rt.TalkClient(apikey)
    api_response = client.talk(message.body['text'])
    # レスポンスがokの時返事を返す
    if api_response['message'] == 'ok':
        reply_message = api_response['results'][0]['reply']
        message.reply(jaconv.hira2kata(reply_message) + '…ロボ')
        # 普通の返事
        # message.reply(reply_message)
    # APIエラーの時はエラーとAPIのメッセージを返す
    else:
        message.reply('エラー、ウマク返事ガデキマセン [ERROR:' + api_response['message'] + ']')

会話してみる

f:id:riririusei99:20171209013311p:plain

  1. 組み込んだBotの返事
  2. TalkAPIからの会話機能の返事
  3. TalkAPIから通常以外のレスポンスが来た時の返事

あからさまなレトロ感のあるBotになりましたね!

まとめ

今回は最近流行っているスマホゲームから着想を得て、語尾に特定の文字をつける&出力をカタカナにしてロボ感を出してみました。
疲れた時、誰かとお喋りしたくなった時に使いたいです。
Typoした時はAPIにアクセスしに行ってしまうのでBot機能を使う時は注意しましょう。