Kore.ai BotKit SDK を使用して、ボット プラットフォームでイベントをキャプチャして処理することで、ユーザーのボット体験について管理性を向上させ、カスタマイズすることができます。BotKit SDK では、以下のイベントがサポートされています:
onMessage
このイベントは、以下の 2 つのコンポーネントで構成されています:
- onUserMessage: このイベントは、ユーザーが ボットにメッセージを送信し、チャネル アダプタがそれを受信したときにトリガーされます。ユーザー メッセージはこのイベントにラップされ、SDK に送信されます。
- onBotMessage: このイベントは、メッセージをユーザーに送信する必要がある場合にトリガーされます。これらのメッセージは、
context
オブジェクトとともに SDK に送信されます。
onUserMessage
構文:
on_user_message : function(requestId, data, callback)
パラメータ:
requestId
ー 各メッセージ イベントに固有の ID。payload
ー 以下に示すような、JSON のレスポンス ペイロードです:{ "message":"message sent by bot to the user", "taskId":"Dialog task Id", "nodeId":"current node id in the dialog flow", "channel":"channel name", "context":"context object" }
callback
ー イベント完了時に呼び出される関数で、更新されたメッセージとコンテキストを ボット プラットフォームに送信します。
サンプル: 以下の onUserMessage イベントのコード サンプルでは、ユーザー メッセージはライブ エージェントへの転送が評価されて転送され、そうでなければメッセージは BotKit SDK に渡されて処理されます。
/* * OnUserMessage event handler */ function onUserMessage(requestId, payload, callback){ debug("user message", payload); var visitorId = _.get(payload, 'channel.from'); visitorId = payload.context.session.UserContext._id; var entry = _map[visitorId]; if (payload.message === "clearagent") // disconnect from LiveChat on user utterance { sdk.clearAgentSession(payload); } if(entry){//check for live agent //route to live agent var formdata = {}; formdata.secured_session_id = entry.secured_session_id; formdata.licence_id = config.liveagentlicense; formdata.message = payload.message; return api.sendMsg(visitorId, formdata) .catch(function(e){ console.error(e); delete userDataMap[visitorId]; delete _map[visitorId]; return sdk.sendBotMessage(payload, callback); }); } else { return sdk.sendBotMessage(payload, callback); } }
onBotMessage
構文:
on_bot_message : function(requestId, data, callback)
パラメータ:
requestId
ー 各メッセージイベントに固有の ID。payload
— 以下に示すような、JSON のレスポンス ペイロードです:{ "message":"message sent to the user", "channel":"channel name", "context":"context object" }
callback
ー イベント完了時に呼び出される関数で、更新されたメッセージとコンテキストをユーザーに送り返します。
サンプル: 以下のコードスニペット onBotMessage イベントは、ユーザー メッセージの内容を評価し、次にメッセージ トーンを評価します。メッセージ トーンが怒りのトーンの 2 以上の場合、ユーザーとボットの間のボット通信はライブ エージェントに切り替わります。
/* * onBotMessage event handler */ function onBotMessage(requestId, payload, callback){ debug("Bot Message Data",payload); console.log("in bot message"); var visitorId = _.get(paylod, 'channel.from'); var entry = _map[visitorId]; if(data.message.length === 0 || payload.message === '') { return; } var message_tone = _.get(payload, 'context.message_tone');console.log("message tone -----",message_tone); if(message_tone && message_tone.length> 0){ var angry = _.filter(message_tone, {tone_name: 'angry'}); if(angry.length){ angry = angry[0]; if(angry.level >=2){ return connectToAgent(requestId, data); } } } if(!entry) { sdk.sendUserMessage(payload, callback); } }
onWebHook
このイベントは、Kore NL Engine がダイアログ フローで Webhook ノードを処理するときにトリガーされます。このイベントは、 componentId
およびコンテキストとともに SDK に送信されます。SDK はビジネス ロジックを実行し、更新されたコンテキストをプラットフォームに送り返すことができます。構文:
on_webhook = function(requestId, componentId, payload, callback)
パラメータ:
requestId
ー 各 Webhook イベントに固有の ID です。componentId
ー SDKWebhook ノードに固有の ID です。payload
— 以下に示すような、JSON のレスポンス ペイロードです:{ "message":"message sent by bot to the Bots platform", "taskId":"Dialog task Id", "nodeId":"current node id in the dialog flow", "channel":"channel name", "context":"context object" }
callback
ー イベント完了時に呼び出される関数で、更新されたメッセージとコンテキストを ボット プラットフォームに送信します。
サンプル 次の on_webhook
イベントのサンプルでは、ユーザー入力に対するレスポンスとして 2 つのホテル名が結果として返されます。
//on_webhook handler on_webhook : function(requestId, payload, componentId, callback) { if (componentId === 'sendResponse') { var hotels = { "hotels":[ "Taj Banjara", "Novotel" ] }; payload.context.hotelResults = hotels; callback(null,data); } }
この on_webhook
イベントのサンプルでは、ダイアログ タスクの フライト情報ノードで、要求された日付に基づく出発空港または目的地空港のリストが、ダイアログのフローに基づいて、エンド ユーザーに表示される結果のリストとして返されます。
on_webhook : function(requestId, payload, componentId, callback) { var context = payload.context; if (componentName === 'FlightsInfo') { var origin = context.entities.Source; var destination = context.entities.Dest; var departureDate = context.entities.Date; findFlights(origin,destination,departureDate) .then(function(flightResults) { payload.context.flightResults = flightResults; callback(null, data); }); } else if(componentId === 'GetSourceAirports'){ var searchTerm = context.entities.SourceName; findAirports(searchTerm) .then(function(airportResults) { payload.context.sourceAirports = airportResults; callback(null, data); }); } else if(componentId === 'GetDestAirports'){ var searchTerm = context.entities.DestName; findAirports(searchTerm) .then(function(airportResults) { payload.context.destAirports = airportResults; callback(null, data); }); }
onAgentTransfer
このイベントは、Kore NL エンジンがダイアログ フローでエージェント転送ノードを処理したときにトリガーされます。このイベントは、 requestId
およびコンテキストとともに SDK に送信されます。SDK はビジネス ロジックを実行して、ユーザーをシームレスにライブ エージェントに切り替えることができます。構文:
function onAgentTransfer(requestId, data, callback){ connectToAgent(requestId, data, callback); }
パラメータ:
requestId
ー 各メッセージ イベントに固有の ID。payload
— 以下に示すような、JSON のレスポンス ペイロードです:{ OnAgentTransferPayload "," requestId ":1501244156289," botId ":"st - b4a22e86 - e95b - 575 c - b888 - e106d083a251 "," callbackUrl ":"https: //bots.kore.ai/api/botsdk/stream/st-b4a22e86-e95b-575c-b888-e106d083a251/serviceCallback/1501244156289","context": ...}
callback
ー イベント完了時に呼び出される関数で、更新されたメッセージとコンテキストを ボット プラットフォームに送信します。
サンプル: 以下のコードスニペット onAgentTransfer イベントは、ユーザーをライブ エージェントに接続し、ユーザー メッセージ、ボット メッセージ、セッションの履歴チャットメッセージを渡します。
function connectToAgent(requestId, data, cb){ var formdata = {}; console.log("userlog",JSON.stringify(data.context.session.UserContext._id)); formdata.licence_id = config.liveagentlicense; formdata.welcome_message = ""; var visitorId = _.get(data, 'channel.channelInfos.from'); if(!visitorId){ visitorId = _.get(data, 'channel.from'); } visitorId = data.context.session.UserContext._id; userDataMap[visitorId] = data; data.message="An Agent will be assigned to you shortly!!!"; var d = new Date(); data.context.session.BotUserSession.startTime = new Date().toLocaleString(); console.log("userlog",JSON.stringify(data.context.session)); sdk.sendUserMessage(data, cb); formdata.welcome_message = "Link for user Chat history with bot: "+ config.app.url +"/history/index.html?visitorId=" + visitorId; return api.initChat(visitorId, formdata) .then(function(res){ _map[visitorId] = { secured_session_id: res.secured_session_id, visitorId: visitorId, last_message_id: 0 }; }); }
OnEvent
このイベントは、ダイアログ タスクまたは FAQ がボット内で終了し、リクエスト ID とコンテキストを SDK に送信したときにトリガーされます。構文:on_event : 関数 (requestId, data, callback) パラメータ:
- requestId ー 各メッセージ イベントに固有の ID です。
- data ー 以下のサンプルに示すような、JSON のレスポンス ペイロードです。
- callback ー イベントが完了した後に呼び出される関数で、更新されたメッセージとコンテキストを ボット プラットフォーム に送り返すために使用されます。
サンプル:
on_event : function (requestId, data, callback) { return sdk.sendAlertMessage(data, callback); }
このイベントでは、キットに送られた データ オブジェクトに以下のコードが追加されます:
"event": { "event Type": "endDialog"/ “endFAQ” }
OnAlert
このイベントは、ボット ユーザーがアラートを受信したときにトリガーされます。構文: on_alert : 関数 (requestId, data, callback) パラメータ:
requestId
ー 各メッセージ イベントに固有の ID。data
— JSON のレスポンス ペイロードです。callback
ー イベント完了時に呼び出される関数で、更新されたメッセージとコンテキストを ボット プラットフォーム に送り返します。
サンプル:
on_alert: function(requestId, data, callback) { return sdk.sendAlertMessage(data, callback); }
アラート レスポンス データは、キットに送られたデータ オブジェクトの中にあります。
OnVariableUpdate
このイベントは、ボットが公開された際に variable_update でトリガーされます。構文: variable_update : 関数 (requestId, data, callback) パラメータ:
requestId
ー 各メッセージ イベントに固有の ID。data
— JSON のレスポンス ペイロードですcallback
ー イベント完了時に呼び出される関数で、更新されたメッセージとコンテキストを ボット プラットフォーム に送り返します。
var event = data.eventType; console.log("event----------->", event); if (first || event == "variable_update") { // fetch BotVariables List for published Bots sdk.fetchBotVariable(data, langArr, function(err, response) { dataStore.saveAllVariables(response, langArr); first = false; }); } else { var lang = data.language; //update Existing BotVariables in Storage updateBotVariableInDataStore(botVariables, data, event, lang); } console.log(dataStore);
OnClientEvent
このイベントは、ボットがサード パーティ アプリケーションから送信されたクライアント イベントを受信すると、client_event でトリガーされます。構文: on_client_event : 関数 (requestId, data, callback) パラメータ:
requestId
ー 各メッセージ イベントに固有の ID。data
— JSON のレスポンス ペイロードですcallback
ー イベント完了時に呼び出される関数で、更新されたメッセージとコンテキストを ボット プラットフォームに送り返します。
on_client_event : function (requestId, data, callback) { console.log("on_client_event --> : ", data.preDefinedEvent, data.customEvent); return sdk.sendBotEvent(data, callback); }
これらのイベントは、BotKit のイベント タイプである onMessage および onagenttransfer をサブスクライブするアプリケーションに関連付けられています。これらのイベントは、ユーザーが入力している、ユーザーが入力を止めた、ユーザーがメッセージを読んだ、などのイベントを追跡するために使用できます。サンプル:
- ユーザーが入力を開始したとき: リクエスト: { "resourceid": "/bot.clientEvent", "preDefinedEvent" : { "type": "TYPING_STARTED" }, "customEvent": {"test":"test"}, "botInfo": {"chatBot":"<bot-name>", "taskBotId":"<bot-id>"} } Response1: {"ok":true,"type":"ack"} Response2: {"type":"events", "from":"bot", "botInfo": {"chatBot":"<bot-name>", "taskBotId":"<bot-id>"} }, "preDefinedEvent":{"type":"TYPING_STARTED"}, "customEvent":{"test":"test"},"traceId":"6b12f4cc73c806dd"}
- ユーザーが入力を停止したとき: リクエスト: { "resourceid": "/bot.clientEvent", "preDefinedEvent" : { "type": "TYPING_STOPPED" }, "customEvent": {"test":"test"}, "botInfo": {"chatBot":"<bot-name>", "taskBotId":"<bot-id>"} } Response1: {"ok":true,"type":"ack"} Response2: {"type":"events", "from":"bot", "botInfo": {"chatBot":"<bot-name>", "taskBotId":"<bot-id>"} }, "preDefinedEvent":{"type":"TYPING_STOPPED"}, "customEvent":{"test":"test"},"traceId":"6b12f4cc73c806dd"}
- ユーザーがメッセージを既読にしたとき: リクエスト: { "resourceid": "/bot.clientEvent", "preDefinedEvent" : { "type": "MESSAGE_READ", "id": "<msg-id>" }, "customEvent": {"string"}, "botInfo": {"chatBot":"<bot-name>", "taskBotId":"<bot-id>"} } Response1: {"ok":true,"type":"ack"} Response2: {"type":"events", "from":"bot", "botInfo": {"chatBot":"<bot-name>", "taskBotId":"<bot-id>"} }, "preDefinedEvent":{"type":"MESSAGE_READ", "id":"<msg-id>"}, "customEvent":{"string"},"traceId":"6b12f4cc73c806dd"}