LINEとGoogle Apps Scriptで自然な会話をするBotを作成してみた
はじめに
AI技術が進み、会話型のチャットなどもたくさんありますが、チャットボットはどこか機械的というか、人間味を感じないところがあるのも事実です。ですがこれまでとは違い、より人間味が増した会話型のチャットボットができるサービスを見つけたので、実際にLINEでやりとりができるようにLINE Botを作ってみました。自然な会話になっているかどうか見てみてください。
自然な会話ができるLINE BotをGoogle Apps Scriptで作ってみた
「百聞は一見に如かず」ということでまずは作成したLINE Botをご覧ください。
本当に人間相手とLINEをしているように感じませんか?当然、おかしな返事が返ってくることはありますが、それでもなかなかのクオリティです。これが利用できるサービスは「Chaplus」といい、無料でAPIを公開しています。2020年7月現在はベータ版での提供となりますが、これを使ってLINE Botを作成した手順をお伝えしていきます。
用意するもの
必要なものは4つです。
- LINE Messaging API
- Chaplus API
- スプレッドシート
- Google Apps Script
1つずつ作成手順にそって説明していきます。
LINE Messaging APIを設定する
LINE Messaging APIでLINE Botの設定をします。
LINE Developersに登録
LINE Messaging APIを利用するにはLINE Developersに登録する必要があります。登録はLINEの個人アカウントを利用して簡単にできます。「友だち追加」のQRコードから読み込むことで登録することができます。フリープランのためお金はかかりません。
プロバイダーを作成
LINE Developersの登録が完了したら、プロダクト → Messaging API → 今すぐはじめよう の順に押下します。
上記画像のページの遷移したら、「チャネルの種類」は「Messaging API」のままで、プロバイダー名を入力します。プロバイダー名は管理者名のようなものなので、わかりやすいものだと何でもOKです。「チャネルアイコン」と「チャネル名」はLINE上に表示されるLINE Botのアイコンと名前になるのでお好きなように設定してください。その他は必要に応じて入力していきましょう。利用規約に同意し、「作成」ボタンをクリックします。
LINE Botを友だち追加
メッセージングAPI設定でQRコードを読み取り友だち追加をしておきます。この時点でトークを送ってもまだ会話は成立しません。
応答設定
LINE公式アカウントマネージャーのページへ行き、「応答設定」をクリックします。
「応答モード」はBotにエックを入れ、「応答メッセージ」はオフにチェックを入れます。「Webhook」はのちほどURLを設定するので、オンにチェックを入れておきます。「あいさつメッセージ」はどちらでも大丈夫です。
ひとまずこれでLINE Messaging APIの設定は完了です。WebhookのURLとチャネルアクセストークンの設定が残っているので、このままページは閉じないでください。
ChaplusでAPIキーを取得する
チャットボットを提供しているサービス、ChaplusのAPIキーを取得します。「Chaplus」の公式ページへ行き、メールアドレスと利用目的・用途を入力し、「利用規約に同意して登録」ボタンをクリックします。登録したメールアドレス宛に【Chaplus API β】 API KEY発行のご連絡のタイトルでメールを受信したらメール本文にAPIキーがあるので控えておきます。
Google Apps Scriptにコードを記述する
まずスプレッドシートを開けます。これはLINE Botへの投稿内容を管理するためです。開けたら中はなにもいじる必要はないので、ツールからスクリプトエディタを開けます。Google Apps Scriptのエディタが開いたら以下の内容でコードを記述します。
var TOKEN = 'LINE Botのチャネルアクセストークン';
function doPost(e) {
var event = JSON.parse(e.postData.contents).events[0];
var replyToken= event.replyToken;
if (typeof replyToken === 'undefined') {
return;
}
var userId = event.source.userId;
var username = getUserName(userId);
if(event.type == 'message') {
var userMessage = event.message.text;
var replyMessage = getChaplusMessage(userMessage, username);
appendRow(userMessage);
sendMessage(replyToken, replyMessage);
return ContentService.createTextOutput(
JSON.stringify({'content': 'ok'})
).setMimeType(ContentService.MimeType.JSON);
}
}
function sendMessage(replyToken, replyMessage) {
var url = 'https://api.line.me/v2/bot/message/reply';
UrlFetchApp.fetch(url, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + TOKEN,
},
'method': 'post',
'payload': JSON.stringify({
'replyToken': replyToken,
'messages': [{
'type': 'text',
'text': replyMessage,
}],
}),
});
}
function getUserName(userId){
var url = 'https://api.line.me/v2/bot/profile/' + userId;
var userProfile = UrlFetchApp.fetch(url,{
'headers': {
'Authorization' : 'Bearer ' + CHANNEL_ACCESS_TOKEN,
},
})
return JSON.parse(userProfile).displayName;
}
function getChaplusMessage(mes, username) {
var utterancePairs = [
{
"utterance":"おはよう!",
"response":"やっほー!",
"utterance":"じゃあね",
"response":"バイバーイ",
"utterance": "おやすみ",
"response" : "おやすみなさ〜い"
}
];
var dialogue_options = {
'utterance': mes,
'username' : username,
'agentState' : {
'agentName' : 'test', //LINE Botのチャネル名を入力してください
'age' : '25歳', //任意で数字を変更してください
'tone' : 'normal' //normal(標準)、kansai(関西弁)、koshu(甲州弁)、dechu(赤ちゃん言葉)の中から設定できます
}
}
var options = {
'method': 'POST',
'contentType': 'text/json',
'payload': JSON.stringify(dialogue_options)
};
var chaplusUrl = "https://www.chaplus.jp/v1/chat?apikey=ChaplusのAPIキー";
var response = UrlFetchApp.fetch(chaplusUrl, options);
var content = JSON.parse(response.getContentText());
var answer = content.bestResponse.utterance;
return answer;
}
function appendRow(text) {
var spreadsheet = SpreadsheetApp.openById("スプレッドシートID");
var sheet = spreadsheet.getSheetByName("シート名");
sheet.appendRow([new Date(),text]);
return text;
}
「LINE Botのチャネルアクセストークン」「ChaplusのAPIキー」「スプレッドシートID」「シート名」はご自身で取得・設定したものを入力してください。
var utterancePairs = [
{
"utterance":"おはよう!",
"response":"やっほー!",
"utterance":"じゃあね",
"response":"バイバーイ",
"utterance": "おやすみ",
"response" : "おやすみなさ〜い"
}
];
このコードは自分で返信内容を設定しています。好きなように設定できます。また、必要なければ削除しても大丈夫です。
var dialogue_options = {
'utterance': mes,
'username' : username,
'agentState' : {
'agentName' : 'test', //LINE Botのチャネル名を入力してください
'age' : '25歳', //LINE Botの年齢を任意で設定してください
'tone' : 'normal' //normal(標準)、kansai(関西弁)、koshu(甲州弁)、dechu(赤ちゃん言葉)の中から設定できます
}
}
このコードの「agentName」「age」「tone」は任意のものに設定してください。年齢によって言葉遣いが多少変わります。関西弁や甲州弁はもう少し改善されることを期待したいですが、雰囲気は十分に伝わるかと思うので、標準語以外もオススメです。
Webhook URLを設定する
ここまで来るとあと少しで完成です。Google Apps Scriptのコードの記述が終わったら、Webアプリケーションとして導入…をします。その際、許可を求められるので許可・承認をしてください。Webアプリケーションの公開URLがWebhook URLとなるのでコピーして、LINE Messaging API側でWebhook URLを入力し、保存すればOKです。
おわりに
関西弁を試してみると、おかしな関西弁になりますが、なかなかおもしろい返事をしてくれるのでクスッと笑えますよ。導入自体はすぐに終わるのでサクッと作成してみてください。