Webhook 停止工作。是否有贬值或需求变化?

Webhook stopped working. Has there been a deprication or requirements change?

我正在重新审视几年前设置的 Dialogflow Essentials 应用程序,该应用程序在 webhook 调用时突然停止工作。响应 webhook 的 URL 仍然可以正常运行。 webhook 要求是否发生变化或 Google 贬值可能导致此问题?

应用程序内部的“帮助”和“再见”功能仍在运行,但是当执行 webhook 调用时,我们收到应用程序“现在没有响应。请稍后再试”的回复。然后应用程序离开了对话。

相关代码是 NodeJS 版本 8(虽然已删除,但应该仍然可以使用)并使用 Dialogflow 中的内联编辑器应用。以下是功能:

function get_keywords(agent) {
   const keywords = agent.parameters.keywords;
   const site_id = agent.parameters.site_id;
   return axios.get(`https://www.FutureOfNews.com/AdEverywhere/SI/PR/AN/GA_API/StorySummary_API.cfm?SiteID=${site_id}&Keywords=${keywords}`)
      .then((result) => {
         console.log(result.data);

         if (response.statusCode != 200) {
            agent.add(`Error. Could not connect to news server.`);
         } else {

            if (result.data.storyFound.length < 1) {
               agent.add(result.data.speech);
            } else {

               if (result.data.storyPhotoURL.length > 1) {
                  agent.add(result.data.speech);
                  agent.add(new Card({
                     title: result.data.storyHeadline,
                     imageUrl: result.data.storyPhotoURL,
                     buttonText: 'Full Story',
                     buttonUrl: result.data.storyURL,
                     imageDisplayOptions: "WHITE"
                  }));

               } else {
                  agent.add(result.data.speech);
                  agent.add(new Card({
                     title: result.data.storyHeadline,
                     buttonText: 'Full Story',
                     buttonUrl: result.data.storyURL,
                     imageDisplayOptions: "WHITE"
                  }));
               }
            }
         }
      });
}

function get_rss_feed_id(agent) {
   const rss_feed_id = agent.parameters.rss_feed_id;
   const site_id = agent.parameters.site_id;
   return axios.get(`https://www.FutureOfNews.com/AdEverywhere/SI/PR/AN/GA_API/NewsHeadlines_API.cfm?SiteID=${site_id}&RSSFeedID=${rss_feed_id}`)
      .then((result) => {
         agent.add(result.data.speech);
      });
}

以下是 webhook 调用的 URL 版本(具有 real/live 参数值):

Headlines Group

Specific news item

我在与这些调用相关的日志中没有看到任何 activity,也没有看到任何 billing/credit-card 问题。

任何关于为什么突然失败的想法将不胜感激!

我无法创建 NodeJS 8 环境,因为它已被弃用。相反,我在 NodeJS 10 中测试了您的代码,它对我来说工作正常。

为了测试,我使用了一个由“测试”触发的意图,并且我对 keywordssite_idrss_feed_id 的值进行了硬编码。它返回了代码的预期结果。

用于测试的代码:

'use strict';

const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card} = require('dialogflow-fulfillment');
const axios = require('axios');

process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
  const agent = new WebhookClient({ request, response });
  
function yourFunctionHandler(agent) {
   const keywords = 'investigation';
   const site_id = 15;
   return axios.get(`https://www.FutureOfNews.com/AdEverywhere/SI/PR/AN/GA_API/StorySummary_API.cfm?SiteID=${site_id}&Keywords=${keywords}`)
      .then((result) => {
         console.log(result.data);
         if (response.statusCode != 200) {
            agent.add(`Error. Could not connect to news server.`);
         } else {
            if (result.data.storyFound.length < 1) {
               agent.add(result.data.speech);
            } else {
              if (result.data.storyPhotoURL.length > 1) {
                  agent.add(result.data.speech);
                  agent.add(new Card({
                     title: result.data.storyHeadline,
                     imageUrl: result.data.storyPhotoURL,
                     buttonText: 'Full Story',
                     buttonUrl: result.data.storyURL,
                     imageDisplayOptions: "WHITE"
                  }));

               } else {
                  agent.add(result.data.speech);
                  agent.add(new Card({
                     title: result.data.storyHeadline,
                     buttonText: 'Full Story',
                     buttonUrl: result.data.storyURL,
                     imageDisplayOptions: "WHITE"
                  }));
               }
            }           
         }
     
   });
   }
function get_rss_feed_id(agent) {
   const rss_feed_id = 1;
   const site_id = 15;
   return axios.get(`https://www.FutureOfNews.com/AdEverywhere/SI/PR/AN/GA_API/NewsHeadlines_API.cfm?SiteID=${site_id}&RSSFeedID=${rss_feed_id}`)
      .then((result) => {
         agent.add(result.data.speech);
      });
}
  
  // Run the proper function handler based on the matched Dialogflow intent name
  let intentMap = new Map();
  intentMap.set('test intent', yourFunctionHandler);
  //intentMap.set('test intent', get_rss_feed_id);
  agent.handleRequest(intentMap);
});

Package.json:

{
  "name": "dialogflowFirebaseFulfillment",
  "description": "This is the default fulfillment for a Dialogflow agents using Cloud Functions for Firebase",
  "version": "0.0.1",
  "private": true,
  "license": "Apache Version 2.0",
  "author": "Google Inc.",
  "engines": {
    "node": "10"
  },
  "scripts": {
    "start": "firebase serve --only functions:dialogflowFirebaseFulfillment",
    "deploy": "firebase deploy --only functions:dialogflowFirebaseFulfillment"
  },
  "dependencies": {
    "firebase-functions": "^2.0.2",
    "firebase-admin": "^5.13.1",
    "googleapis": "^27.0.0",
    "actions-on-google": "2.2.0",
    "dialogflow-fulfillment": "0.6.1",
    "axios": "0.21.1"
  }
}

测试使用 get_keywords():

测试使用 get_rss_feed_id():

我的建议是升级到 NodeJS 10,以确保该功能在 Node.js 的受支持版本上。参见 migration guide