前回「CloudGarageにnode.jsを入れてチャットボットを作ってみた その1」の続きです
前回はnodejsを動かくところまでやりましたので今回はwatsonのConversatinoへ繋いでみます
まず、前提条件としてIBMCloudのアカウントがありConversationへプロジェクトを作成している必要があります
そちらの詳しい説明は要望があれば書いていきますので今回は省きます
IBMBluemixから【username】【password】をConversationから【workspace_id】をメモしておきます
それではapp.jsを修正していきます
app.js
var express = require(‘express’);
var app = express;
app.set(‘views’, ‘./views’);
app.set(‘view engine’, ‘ejs’);
app.get(‘/’, function(req, res, next) {
res.render(‘index’, {});
});
var http = require(‘http’);
var server = http.createServer(app);
server.listen(3000);
var io = requier(‘socket.io’).listen(server);
io.on(‘connection’, function(socket){
// watsonAPIの読み込み
var ConversationV1 = require(‘watson-developer-cloud/conversation/v1’);
var conversation = new ConversationV1({
ur: ‘https://gateway.watsonplatform.net/conversation/api’,
username: ‘【username】’, //IBMBluemixのusername
password: ‘【passowrd】’, //IBMBluemixのパスワード
version_date: ‘2017-12-25’ //なんでもOKっぽい
});
// 初回アクセス時にメッセージを表示させます
var res = [];
conversation.message({ workspace_id: ‘【workspace_id】’ }, processResponse);
function processResponse(err, response) {
if (err) {
console.error(err);
return;
}
if (response.intents.length > 0) {
console.log(‘chat message’, ‘Detected intent: #’ + response.intents[0].intent);
}
for (var i = 0, len = response.output.text.length; i < len; i++) {
if (response.output.text[i] !== ”) {
io.to(socket.id).emit(‘bot message’, response.output.text[i]);
}
}
res[socket.id] = response;
}
// メッセージが送信されたらこちらで処理を行います
socket.on(‘chat message’, function(msg) {
io.to(socket.id).emit(‘chat message’, msg);
conversation.message({
workspace_id: ‘【workspace_id】’,
input: { text: msg },
context: res[socket.id].context
}, processResponse);
});
});
次にメッセージの表示を行うejsを作成します
inex.ejs
<html>
<script src=”/socket.io/socket.io.js”></script>
<script src=”https://code.jquery.com/jquery-1.11.1.js”></script>
<title>チャットツール</title>
<link rel=’stylesheet’ href=’/css/style.css’ />
<body>
<div class=”chat-box”>
<ul id=”messages”></ul>
<form action=””>
<input id=”m” autocomplete=”off” /><button>Send</button>
</form>
</div>
<script>
$(function(){
var socket = io();
$(‘form’).submit(function(){
socket.emit(‘chat message’, $(‘#m’).val());
$(‘#m’).val(”);
return false;
});
socket.on(‘chat message’, function(msg){
$(‘#messages’).append($(‘<li>’).text(msg).addClass(‘chat-hukidashi someone’).wrap(‘<div />’));
});
socket.on(‘bot message’, function(msg){
$(‘#messages’).append($(‘<li>’).text(‘QA bot:’+msg).addClass(‘chat-hukidashi’).wrap(‘<div />’));
});
});
</script>
</body>
</html>
app.jsとindex.ejsが完成したらnodeを起動して確認してみましょう
$ node app.js
node起動後はブラウザからアクセスをしてみてください
Conversationで設定した初期メッセージが表示されればOKです
今はLineBOTとConversationの繋ぎこみを試してますのでそれが出来次第その3を書いてみようと思います