与 WhatsApp 的 Twilio 集成时我的代理出现问题

Problem with my Agent when Integrated with Twilio for WhatsApp

大家好,

自一周以来,我一直在尝试将 Dialogflow 与 Twilio 集成以用于 WhatsApp 消息传递。

集成已配置成功,但在使用 Axios 通过 HTTP 请求检索我们的产品时遇到奇怪的错误。

测试代码在这里:

function testLoopReply(agent) {
   const category_name = 'Small%20Appliances';  
   return new Promise((resolve, reject) => {
       axios.get(`https://sheetdb.io/api/v1/qvlk728a5p23g/search?Categories=*${category_name}*&Status=1&limit=1`).then(function (res) {
           let Categories = res.data;
           if (Categories) {                
                 for (const product of Categories ){
                    agent.add(`https://alaswadtrading.com/index.php?route=product/product&product_id=${product.ProductID}\n\n${product.Name}`);
                }
           } else {
                agent.add(`No items found in the selected category (${category_name})`);
           }

           resolve();
       });
   }); 
  }

考虑场景一:

{
  "fulfillmentMessages": [
    {
      "text": {
        "text": [
          "https://alaswadtrading.com/index.php?route=product/product&product_id=2\n\nBEKO STANDARD COOKER HOOD 60CM - INOX"
        ]
      }
    },
    ...
    {
      "text": {
        "text": [
          "https://alaswadtrading.com/index.php?route=product/product&product_id=44\n\nBEKO GAS COOKER 90X60 CLOSE DOOR"
        ]
      }
    }
  ],
  "outputContexts": []
}

在这种情况下,代理通常根据附加的快照回复这些多个结果:

但 Twilio 没有响应,并且根据附加的快照触发了错误 11200:

现在,考虑第 2 种情况

{
  "fulfillmentText": "https://alaswadtrading.com/index.php?route=product/product&product_id=1\n\nBEKO TURKISH COFFEE MACHINE SINGLE CUP SKY BLUE",
  "outputContexts": []
}

在这种情况下,代理通常根据附加的快照回复结果:

此外,Twilio 运行良好,根据附加的快照正常响应:

我已经联系了 Dialogflow 和 Twilio,但没有找到解决方案,这里是他们的回复:

我不确定问题出在哪里,也不知道如何解决才能发布我们的代理。

请问,有什么建议吗?

相关Post:

这里是 Twilio 开发人员布道者

抱歉,我通常不使用 Dialogflow,但我知道如何调试 Twilio,所以我需要问一下您是如何将两者联系起来的。

这里的明显区别是 agent 对象在 agent.add 仅给出一段文本时与多次调用 agent.add 时的行为。当你多次调用它时,它似乎生成一个 fulfillmentMessages 数组而不是一个 fulfillmentText 字符串,它适用于 Twilio。

看起来您正在使用现有的 DialogFlow 集成,according to this code 只会发回您 agent 响应的 fulfillmentText 部分中的响应文本。

因此,您应该弄清楚如何更新 DialogFlow 集成,以便它可以处理多个 fulfillmentMessages 或者在您的循环中,建立您的响应,以便它可以作为一个发送 fulfillmentText,类似于:

function testLoopReply(agent) {
   const category_name = 'Small%20Appliances';  
   return new Promise((resolve, reject) => {
       axios.get(`https://sheetdb.io/api/v1/qvlk728a5p23g/search?Categories=*${category_name}*&Status=1&limit=1`).then(function (res) {
           let Categories = res.data;
           let response = '';
           if (Categories) {                
                 for (const product of Categories ){
                    response += `https://alaswadtrading.com/index.php?route=product/product&product_id=${product.ProductID}\n\n${product.Name}\n\n`;
                }
           } else {
                response = `No items found in the selected category (${category_name})`);
           }
           agent.add(response);
           resolve();
       });
   }); 
  }