Calmery.me

みっかぼうずにならないようがんばる

ユーザーローカルの人工知能ボットAPIを使ってTwitterの自動返答ボットを作った

ユーザーローカルの人工知能ボット API の提供が開始されたということで Twitter のボットを作ってみた.
API のドキュメントが何処にあるのかわからないから簡単にまとめておく.

https://chatbot-api.userlocal.jp/api/chat?message=MESSAGE&key=API_KEY

で送ったメッセージへの返事がが返ってくる。ただ返答の精度はあまり良くないように思った.

{"status":"success","result":"だょね~"}

実装は Node.JS を使った.ストリーミングで自分へのリプライを監視し、受け取ったメッセージを API に送る.返された返答をそのままツイートするだけ.ただこれだと自分で自分にリプライを送ったときリプライ合戦が始まってしまう.でもこれはこれで見ていて面白かったのでそのままで.

var twitter = require( 'twitter' )
var request = require( 'request' )

var twit = new twitter( {
    consumer_key       : 'CONSUMER_KEY',
    consumer_secret    : 'CONSUMER_SECRET',
    access_token_key   : 'ACCESS_TOKEN_KEY',
    access_token_secret: 'ACCESS_TOKEN_SECRET'
} )

var baseUrl1 = 'https://chatbot-api.userlocal.jp/api/chat?message='
var baseUrl2 = '&key=API_KEY'

twit.stream( 'statuses/filter', {
    track: '@calmeryme'
}, function( stream ){
    stream.on( 'data', function( data ){
        var user    = data.user.screen_name,
            twid    = data.id,
            mention = data.text.replace( /@calmeryme\s+/, '' )
        request( baseUrl1 + encodeURI( mention ) + baseUrl2, function( error, response, body ){
            var result
            if( !error && response.statusCode == 200 )
                result = '@' + user + ' ' + JSON.parse(body).result
            else
                result = '@' + user + ' ' + mention + ' => error: ' + response.statusCode
            twit.post( 'statuses/update', {
                status: result,
                in_reply_to_status_id: twid
            }, function( err, data, response ){
                console.log( '@' + user + ' : ' + mention + ' => ' + result )
            } )
        } )
    } )
} )

Twitter だけでなく LINE などと組み合わせても面白そう.キャラクター会話変換や氏名自動識別,形態素解析もあるので色々試してみたい.