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 (将#修改为@)