我们在Dialogflow中同时管理多个用户交互时遇到了问题。 我们如何使用自定义事件来管理用户唯一会话,该事件将处理我们的第三方API,然后将响应返回给特定用户。 要管理用户唯一会话,我们尝试使用Dailogflow设置/获取上下文方法,从用户发出第一个请求时首先从第一个意图设置具有唯一ID的上下文(使用此ID会将API响应存储到Redis服务器的API响应),然后遍历该唯一ID通过自定义事件 将从Context中获取该唯一ID,并从Redis服务器中获取我们最初存储在其中的数据。 我们使用agent.set.context()设置了唯一的ID,但是该方法不适用于“ dialogflow-fulfillment”版本^ 0.5.0,要进行这项工作,我们已将版本更新为“ ^ 0.6.1”。但这将提供其他错误,例如“ UnhandledPromiseRejectionWarning:错误:平台未定义任何响应:null”。
必填输出:具有唯一ID的上下文集,将获得正确的响应。 当前输出:UnhandledPromiseRejection警告:错误:没有为平台定义响应:空
async function searchFromAPI(agent){
axios.post('https://testApi.com', searchString.data, {headers: headers})
.then((resp) => {
response.data = resp;
redisClient.set(sessionId, JSON.stringify(response));
}
}).catch(error => {
response.error = true;
response.message = error.response.statusText;
redisClient.set(sessionId, JSON.stringify(response));
});
await customsleep(2000);
const sessionId = uuid.v4();
const contextData = {'name':'userSession','lifespan': 5,'parameters':{'sessionId':sessionId}};
agent.context.set(contextData);
console.log(contextData);
agent.add('We are processing your request, Could you please wait?');
agent.add(new Suggestion("Yes"));
agent.add(new Suggestion("No"));
}
// wait for 4.5sec and call custom event
async function followOne(agent){
await customsleep(4500);
agent.setFollowupEvent('followUpTwo');
}
// wait for 4.7sec then red API response from redis server and return
async function followUpTwo(agent){
await customsleep(4000);
sess = session;
//get context
const response = agent.context.get('userSession');
// get the sessionId, Get the data from redis server
agent.add(response);
}
async function PleaseWait(agent){
await customsleep(3500);
agent.setFollowupEvent('followUpOne');
}
答案 0 :(得分:0)
检查此资源以了解如何设置新的Dialogflow传出上下文 dialogflow webhook-client。
希望对您有帮助吗?
答案 1 :(得分:0)
我找到了通过context.set(ctx)重新分配新上下文对象的唯一解决方法。然后它起作用了。
//update context to show full menu
let context = agent.context.get('user_data');
if (!context) throw "User_data context ius nod defined in PreferrenceAdd"
let context2 = new Object();
context2 = {'name': 'user_data', 'lifespan': 40,
'parameters': context.parameters};
console.log("ctx: = " + JSON.stringify(context2));
context2.parameters.new = false;
context2.parameters.refresh = true;
agent.context.set(context2);