From 479b24ef8a021fecab5f0641a63f09916ac85421 Mon Sep 17 00:00:00 2001 From: pradeepmvn Date: Fri, 19 Oct 2018 10:43:45 -0400 Subject: [PATCH 1/5] Added abilty to publish events from webhook to rasa core. --- server/routes/mw_routes/core_router.js | 121 ++++++++++++++----------- 1 file changed, 66 insertions(+), 55 deletions(-) diff --git a/server/routes/mw_routes/core_router.js b/server/routes/mw_routes/core_router.js index 6cf069a..26853a0 100644 --- a/server/routes/mw_routes/core_router.js +++ b/server/routes/mw_routes/core_router.js @@ -59,9 +59,9 @@ var await = require('asyncawait/await'); console.log("First request to Rasa Core. Resonse: "+ JSON.stringify(responseBody)); //updateCacheWithRasaCoreResponse(responseBody, cache_key) responseBody.actionTimestamp=Date.now(); - await( getActionResponses(req,responseBody,res,cache_key,agentObj) ); + var events = await( getActionResponses(req,responseBody,res,cache_key,agentObj)); if (responseBody.next_action != "action_listen"){ - startPredictingActions(core_url, req, responseBody.next_action,cache_key,res,agentObj); + startPredictingActions(core_url, req, responseBody.next_action,cache_key,res,agentObj, events); }else{ //got and actionlisten. Send response and flush data. sendCacheResponse(200, res,cache_key); @@ -73,14 +73,14 @@ var await = require('asyncawait/await'); } }); - var startPredictingActions = async (function (core_url, req, currentAction,cache_key,res,agentObj){ + var startPredictingActions = async (function (core_url, req, currentAction,cache_key,res,agentObj, events){ while (true){ console.log("*********** Executed this ***********: " + currentAction); - var responseBody = await (rasaCoreRequest(req,"continue",JSON.stringify({"executed_action":currentAction,"events": []}))); + var responseBody = await (rasaCoreRequest(req,"continue",JSON.stringify({"executed_action":currentAction,"events": events}))); console.log("Rasa Core Resonse from Continue: "+ JSON.stringify(responseBody)); //updateCacheWithRasaCoreResponse(responseBody, cache_key) responseBody.actionTimestamp=Date.now(); - await(getActionResponses(req,responseBody,res,cache_key,agentObj)); + events =await(getActionResponses(req,responseBody,res,cache_key,agentObj)); currentAction = responseBody.next_action; if(currentAction === "action_listen"){ //last loop. done predicting all ACTIONS @@ -240,64 +240,74 @@ var await = require('asyncawait/await'); } var getActionResponses = async (function (req,rasa_core_response,res,cacheKey,agentObj) { - //inspect the rasacore response - if(rasa_core_response.next_action !='action_listen'){ - if(rasa_core_response.next_action.startsWith("utter_webhook_")){ - //webhook type. Make a call to external webhook and append response - var webhookResponse =await(fetchActionDetailsFromWebhook(req,rasa_core_response, agentObj)); - console.log("------ Webhook Response for action : " +rasa_core_response.next_action+ "------------"); - console.log(webhookResponse); - console.log("------------------------------------------------------------"); - if(webhookResponse != undefined){ - try { - rasa_core_response.response_text = JSON.parse(webhookResponse).displayText; - rasa_core_response.response_rich=JSON.parse(webhookResponse).dataToClient; - addResponseInfoToCache(req,cacheKey,rasa_core_response); - } catch (e) { + var events=[]; + return new Promise((resolve, reject) => { + if(rasa_core_response.next_action !='action_listen'){ + if(rasa_core_response.next_action.startsWith("utter_webhook_")){ + //webhook type. Make a call to external webhook and append response + var webhookResponse =await(fetchActionDetailsFromWebhook(req,rasa_core_response, agentObj)); + console.log("------ Webhook Response for action : " +rasa_core_response.next_action+ "------------"); + console.log(webhookResponse); + console.log("------------------------------------------------------------"); + if(webhookResponse != undefined){ + try { + rasa_core_response.response_text = JSON.parse(webhookResponse).displayText; + rasa_core_response.response_rich=JSON.parse(webhookResponse).dataToClient; + events = JSON.parse(webhookResponse).events; + addResponseInfoToCache(req,cacheKey,rasa_core_response); + resolve(events); + } catch (e) { + console.log("Unknown response from Webhook for action: "+rasa_core_response.next_action); + console.log("Webhook Response" + webhookResponse); + rasa_core_response.response_text = "Please check your Webhook Conenction. Got an error response."; + addResponseInfoToCache(req,cacheKey,rasa_core_response); + reject(e); + return; + } + }else{ console.log("Unknown response from Webhook for action: "+rasa_core_response.next_action); - console.log("Webhook Response" + webhookResponse); - rasa_core_response.response_text = "Please check your Webhook Conenction. Got an error response."; + rasa_core_response.response_text = "Unknown response from Webhook for action: "+rasa_core_response.next_action; addResponseInfoToCache(req,cacheKey,rasa_core_response); + resolve(events); } - }else{ - console.log("Unknown response from Webhook for action: "+rasa_core_response.next_action); - rasa_core_response.response_text = "Unknown response from Webhook for action: "+rasa_core_response.next_action; - addResponseInfoToCache(req,cacheKey,rasa_core_response); - } - }else if(rasa_core_response.next_action.startsWith("utter_")){ - //utter Type - var actionRespObj = await( fetchActionDetailsFromDb(rasa_core_response.next_action)); - console.log("------ Utter Response for action : " +rasa_core_response.next_action+ "------------"); - console.log(actionRespObj); - console.log("------------------------------------------------------------"); - if(actionRespObj != undefined){ - var slot_to_fill= actionRespObj.response_text.match(/{(.*)}/ig); - if(slot_to_fill!=null && slot_to_fill.length>0){ - for(var i=0; i0){ + for(var i=0; i Date: Fri, 19 Oct 2018 16:06:59 -0400 Subject: [PATCH 2/5] events logging --- server/routes/mw_routes/core_router.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/server/routes/mw_routes/core_router.js b/server/routes/mw_routes/core_router.js index 26853a0..23fc905 100644 --- a/server/routes/mw_routes/core_router.js +++ b/server/routes/mw_routes/core_router.js @@ -253,7 +253,10 @@ var await = require('asyncawait/await'); try { rasa_core_response.response_text = JSON.parse(webhookResponse).displayText; rasa_core_response.response_rich=JSON.parse(webhookResponse).dataToClient; - events = JSON.parse(webhookResponse).events; + if("undefined" !== typeof(JSON.parse(webhookResponse).events)){ + events = JSON.parse(webhookResponse).events; + console.log("-******************---------------" +events+ "-------**************-----------"); + } addResponseInfoToCache(req,cacheKey,rasa_core_response); resolve(events); } catch (e) { From 3b824108721fb224d7bb8aa4e00b4844eebbcbc4 Mon Sep 17 00:00:00 2001 From: pradeepmvn Date: Tue, 23 Oct 2018 00:05:09 -0400 Subject: [PATCH 3/5] Fix to get static responses per agent --- server/routes/mw_routes/core_router.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server/routes/mw_routes/core_router.js b/server/routes/mw_routes/core_router.js index 23fc905..525ffa5 100644 --- a/server/routes/mw_routes/core_router.js +++ b/server/routes/mw_routes/core_router.js @@ -275,7 +275,7 @@ var await = require('asyncawait/await'); } }else if(rasa_core_response.next_action.startsWith("utter_")){ //utter Type - var actionRespObj = await( fetchActionDetailsFromDb(rasa_core_response.next_action)); + var actionRespObj = await( fetchActionDetailsFromDb(rasa_core_response.next_action,agentObj.agent_id)); console.log("------ Utter Response for action : " +rasa_core_response.next_action+ "------------"); console.log(actionRespObj); console.log("------------------------------------------------------------"); @@ -313,10 +313,10 @@ var await = require('asyncawait/await'); }); }); - function fetchActionDetailsFromDb(action_name){ + function fetchActionDetailsFromDb(action_name, agent_id){ return new Promise((resolve, reject) => { - db.any('SELECT * FROM ACTIONS, responses where actions.action_id = responses.action_id and actions.action_name=$1 '+ - 'order by random() LIMIT 1', action_name) + db.any('SELECT * FROM ACTIONS, responses where actions.action_id = responses.action_id and actions.action_name=$1 and actions.agent_id=$2 '+ + ' order by random() LIMIT 1', [action_name, agent_id]) .then(function (data) { if (data.length > 0) { resolve(data[0]); From d600df753b99171c359fbb7d823d4d0f6d780806 Mon Sep 17 00:00:00 2001 From: pradeepmvn Date: Tue, 23 Oct 2018 17:53:14 -0400 Subject: [PATCH 4/5] Added ability to execute action_restart --- server/routes/mw_routes/core_router.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/server/routes/mw_routes/core_router.js b/server/routes/mw_routes/core_router.js index 525ffa5..bf024f1 100644 --- a/server/routes/mw_routes/core_router.js +++ b/server/routes/mw_routes/core_router.js @@ -300,7 +300,25 @@ var await = require('asyncawait/await'); addResponseInfoToCache(req,cacheKey,rasa_core_response); } resolve(events); - }else{ + }else if (rasa_core_response.next_action.startsWith("action_restart")){ + console.log("Got an action_restart. Restarting conversation!! "); + try { + request({method: "POST", + uri: global.rasacoreendpoint +"/conversations/"+req.jwt.username+ "/continue", + body: JSON.stringify({"events": [{"event": "restart"}]}) + }, function (error, response, body) { + if(error){ + console.log("Restart Error: "+ error); + } + console.log("Restarted Successfully!! "); + }); + }catch (err) { + console.log(err); + sendHTTPResponse(500, res, '{"error" : "Exception caught !!"}'); + return; + } + } + else{ console.log("Unrecognized Actions. Rasa UI can only process 'utter' type and 'utter_webhook' type. Got: "+rasa_core_response.next_action +" . Logging and skipping it."); resolve(events); } From b2ca497d43d5e88f3873e189e6e8cf4bc43432de Mon Sep 17 00:00:00 2001 From: pradeepmvn Date: Tue, 23 Oct 2018 18:10:51 -0400 Subject: [PATCH 5/5] Added events resolution --- server/routes/mw_routes/core_router.js | 1 + 1 file changed, 1 insertion(+) diff --git a/server/routes/mw_routes/core_router.js b/server/routes/mw_routes/core_router.js index bf024f1..8c33418 100644 --- a/server/routes/mw_routes/core_router.js +++ b/server/routes/mw_routes/core_router.js @@ -317,6 +317,7 @@ var await = require('asyncawait/await'); sendHTTPResponse(500, res, '{"error" : "Exception caught !!"}'); return; } + resolve(events); } else{ console.log("Unrecognized Actions. Rasa UI can only process 'utter' type and 'utter_webhook' type. Got: "+rasa_core_response.next_action +" . Logging and skipping it.");