1

I'm revisiting a Dialogflow Essentials app set up a few years ago that suddenly stopped working at the webhook calls. The URLs that respond to the webhooks are still functioning perfectly. Has there been a change in webhook requirements or a Google deprication that might account for this?

The "help" and "goodbye" functions internal to the app are still working, but when a webhook call is executed we get a reply that the app "isn't responding right now. Please try again soon." and the app leaves the conversation.

The relevant code is NodeJS version 8 (which should still be functional, though depricated) and is applied using the Inline Editor within Dialogflow. Here are the functions:

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);
      });
}

Here are versions of the URLs called by the webhooks (with real/live parameter values):

Headlines Group

Specific news item

I'm not seeing any activity in logs relating to these calls, and I see no billing/credit-card issues.

Any thoughts on why this is suddenly failing would be greatly appreciated!

Ricco D
  • 6,873
  • 1
  • 8
  • 18

1 Answers1

1

I cannot create a NodeJS 8 environment since it is already deprecated. Instead, I tested your code in NodeJS 10 and it works fine for me.

For testing, I used an intent that is triggered with "Test" and I hard coded values for keywords,site_id,rss_feed_id. And it returned the expected result from the code.

Code used for testing:

'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"
  }
}

Test using get_keywords():

enter image description here

Test using get_rss_feed_id():

enter image description here

What I could suggest is to upgrade to NodeJS 10 to ensure that the function is on a supported version of Node.js. See migration guide.

Ricco D
  • 6,873
  • 1
  • 8
  • 18
  • 1
    Thank you Ricco! The console page for Google Actions specifically said that NodeJS version 8 was depricated, but still functional. (At the time of posting the question). I had ruled out deprication of NodeJS V8 because of that, but you obviously knew better. Much appreciated! – Christopher Ryan Nov 02 '21 at 07:18