本記事は『Rocket.Chat』と株式会社エノキ様(2021年10月1日にアイフォーカス・ネットワーク株式会社より社名変更)が提供している会話プラットフォーム『ENOKI』との連携方法のご紹介となります。
『ENOKI』と連携することで簡単なQA対応を自動化することができ、応答の迅速化、工数削減、などが期待できます。
本記事による連携設定にて以下の利用が可能となります。
- Rocket.Chatワークスペース内でのENOKIとの対話
ENOKIとは
ENOKIは、CSVファイルによるデータ連携などにより既存のFAQデータを活用することで短期間での運用開始を可能とした、企業向けの会話プラットフォームを提供しています。
顧客との会話によるコミュニケーションのデジタル化に貢献するAIチャットボットとして、状況に応じて最適なパフォーマンスを得るために複数のAIエンジンから構成されたハイブリットなAIエンジンを持ち、またENOKI独自のデータ構造によりシナリオの作成も不要となっています。
ENOKIの詳細はこちら
新しい着信Webhookを作成する
- 管理者用パネルを開きます。
- パネル左側にある一覧から、「サービス連携」をクリックします。
- 表示されたWebhook一覧画面の右上にある「+New」ボタンをクリックします。
- 左上のタブから「Outgoing」を選択し、表示される項目を以下のように設定していきます。
- イベントトリガーは『メッセージが送信されました』を選択します。
- 着信Webhookの設定を有効にするため有効のトグルボタンをオンにします。
- 名前では作成中の着信Webhookに任意の名前を設定します。
- チャンネルではENOKIと対話を行うRocket.Chatワークスペース上のチャンネルを設定します。
チャンネル名の前に"#"をつける必要があります。
- URLsには連携先となるENOKIが提供しているAPIエンドポイントを設定します。
- 投稿ユーザーにはRocket.Chatワークスぺ―ス上に存在する任意のユーザー名を設定します。
- スクリプトを有効にするのトグルボタンをオンにします。
Scriptに以下のコードを設定します。
class Script {
prepare_outgoing_request({ request }) {
if (request.data.text == 'はい') {
request.data.text= '@@yes';
} else if (request.data.text == 'いいえ') {
request.data.text= '@@no';
} else if (request.data.text == '別の質問') {
request.data.text = 'reset';
} else {
}
paramtext = encodeURIComponent(request.data.text);
//botによる投稿を除外
if (request.data.bot) {
return { };
} else {
//ENOKIへパラメータを送信
return {
url: request.url + '?cuid=' + request.data.user_id + '&text=..' + paramtext + '&version=16'
};
}
}
//ENOKIからのレスポンスに対する処理
process_outgoing_response({ request, response }) {
let content = {};
let textItem = "";
let title = response.content.tts.ttsItem;
let enter_msg = "";
//メッセージの抽出
for (const elem of title) {
for (const elem2 of elem["text"]) {
if (elem2.includes("{")) {
const enter_msg2 = JSON.parse(elem2);
enter_msg = enter_msg2.button;
} else if (elem2.includes("<")) {
} else {
textItem = textItem + elem2 +"\n";
}
}
}
content.text = textItem;
let btn = response.content.recommends.hint;
let counter = 0;
let b_counter = 0;
if (enter_msg.length > 0) {
content.attachments = [ {"title": "選択肢", "actions": [ {"type": "button", "text" : "text", "msg" : "text", "msg_in_chat_window" : true} ] } ];
for (const enter_btn of enter_msg) {
content.attachments[0].actions[b_counter] = {"type": "button", "text" : enter_btn["label"], "msg" : enter_btn["label"], "msg_in_chat_window" : true };
b_counter += 1;
}
} else {
}
//回答に選択肢を含む場合の処理
if (btn.length > 0) {
content.attachments = [ {"title": "選択肢", "actions": [ {"type": "button", "text" : "text", "msg" : "text", "msg_in_chat_window" : true} ] } ];
for (const name of btn) {
content.attachments[0].actions[counter] = {"type": "button", "text" : name["title"], "msg" : name["title"], "msg_in_chat_window" : true };
counter += 1;
}
} else {
if (textItem.includes("問題は解決しましたか?")) {
content.attachments = [ {"title": "フィードバック", "actions": [ {"type": "button", "text" : "はい", "msg" : "はい", "msg_in_chat_window" : true} ,{"type": "button", "text" : "いいえ", "msg" : "いいえ", "msg_in_chat_window" : true} ,{"type": "button", "text" : "別の質問", "msg" : "別の質問", "msg_in_chat_window" : true} ] } ];
} else {
}
}
return {
content: content
};
}
}
prepare_outgoing_request({ request }) {
if (request.data.text == 'はい') {
request.data.text= '@@yes';
} else if (request.data.text == 'いいえ') {
request.data.text= '@@no';
} else if (request.data.text == '別の質問') {
request.data.text = 'reset';
} else {
}
paramtext = encodeURIComponent(request.data.text);
//botによる投稿を除外
if (request.data.bot) {
return { };
} else {
//ENOKIへパラメータを送信
return {
url: request.url + '?cuid=' + request.data.user_id + '&text=..' + paramtext + '&version=16'
};
}
}
//ENOKIからのレスポンスに対する処理
process_outgoing_response({ request, response }) {
let content = {};
let textItem = "";
let title = response.content.tts.ttsItem;
let enter_msg = "";
//メッセージの抽出
for (const elem of title) {
for (const elem2 of elem["text"]) {
if (elem2.includes("{")) {
const enter_msg2 = JSON.parse(elem2);
enter_msg = enter_msg2.button;
} else if (elem2.includes("<")) {
} else {
textItem = textItem + elem2 +"\n";
}
}
}
content.text = textItem;
let btn = response.content.recommends.hint;
let counter = 0;
let b_counter = 0;
if (enter_msg.length > 0) {
content.attachments = [ {"title": "選択肢", "actions": [ {"type": "button", "text" : "text", "msg" : "text", "msg_in_chat_window" : true} ] } ];
for (const enter_btn of enter_msg) {
content.attachments[0].actions[b_counter] = {"type": "button", "text" : enter_btn["label"], "msg" : enter_btn["label"], "msg_in_chat_window" : true };
b_counter += 1;
}
} else {
}
//回答に選択肢を含む場合の処理
if (btn.length > 0) {
content.attachments = [ {"title": "選択肢", "actions": [ {"type": "button", "text" : "text", "msg" : "text", "msg_in_chat_window" : true} ] } ];
for (const name of btn) {
content.attachments[0].actions[counter] = {"type": "button", "text" : name["title"], "msg" : name["title"], "msg_in_chat_window" : true };
counter += 1;
}
} else {
if (textItem.includes("問題は解決しましたか?")) {
content.attachments = [ {"title": "フィードバック", "actions": [ {"type": "button", "text" : "はい", "msg" : "はい", "msg_in_chat_window" : true} ,{"type": "button", "text" : "いいえ", "msg" : "いいえ", "msg_in_chat_window" : true} ,{"type": "button", "text" : "別の質問", "msg" : "別の質問", "msg_in_chat_window" : true} ] } ];
} else {
}
}
return {
content: content
};
}
}
各項目の設定完了後、「保存」をクリックします。
連携の設定は以上となります。
こちらの設定を行うことで、Rocket.Chatのワークスぺ―スの連携チャンネル上で以下のようなENOKIチャットボットとの対話が可能となります。
本製品の詳細は製品ページまで。
Rocket.ChatのFAQページもございます。
お問合せについては、こちらよりお願いいたします
- トピックス:
- Rocket.Chat