如何解决Dialogflow webhook 在调用soap web 服务时复制意图调用,通过promise
我正在构建一个 Dialogflow 代理,它需要调用一个 soap 网络服务来在 CRM 中创建一个案例。 然而,当试图实现意图时,当我调用 webservice 承诺的 await 时,它似乎触发了对相同意图的第二次调用,具有相同的上下文,并且案例最终创建了两次。 (即两次成功调用网络服务,以及重复案例)
我做错了什么?网络钩子看起来像这样:
const CRMService = require('../services/crm/crm_soap');
const { Suggestions} = require('actions-on-google');
const { Suggestion } = require('dialogflow-fulfillment');
module.exports = async function (agent) {
agent.requestSource = agent.ACTIONS_ON_GOOGLE;
let conv = agent.conv();
let userContext = agent.context.get("usercontext");
agent.context.set(userContext);
if (userContext) {
//doing something with the context...
...
let caseData = {
userID: 'xxxxxxx',email: 'nee@nee.com',category: 'test'
};
try {
let crmResponse;
//this line triggers a second parallel call to the intent.
crmResponse = await CRMService.createCaseWebCallback(caseData);
campusCode = CRMService.getCampusCode(crmResponse)
console.log('campusCode: ',campusCode)
} catch (error) {
console.log("id not found")
}
if (crmResponse['STATUS']==='1') {
conv.ask(`${name}: ` + ',case created.');
...
服务功能如下所示:
const soap = require('soap');
const config = require('../../config');
module.exports = {
createCaseWebCallback: function (params,cb) {
return new Promise ((resolve,reject) => {
const args = params;
const url_case = "http://xxx.ws?WSDL";
soap.createClient(url_case,function (err,client) {
client.WM_createCase(args,result) {
return resolve(result["WM_createCaseResult"]);
});
});
});
},...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。