diff --git a/server/routes/mw_routes/core_router.js b/server/routes/mw_routes/core_router.js index 6cf069a..8c33418 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,70 +240,102 @@ 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; + 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) { + 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 { - 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]); @@ -340,7 +372,8 @@ var await = require('asyncawait/await'); //var response_text={ // "speech": "", // "displayText": "", - // "dataToClient":{} + // "dataToClient":{}, + // "events":[] //} resolve(body); return;