问题描述
我正在构建一个 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 (将#修改为@)