1

Dialogflow チャットからライブラリ カタログからデータを取得するアプリに取り組んでいます。エラーは発生しておらず、請求先アカウントがサービスに関連付けられています。インテントコードは次のとおりです。

const {WebhookClient} = require('dialogflow-fulfillment');
const function = require('firebase-functions');
const agent = new WebhookClient({ request: request, response: response });
const catalogSearch = require("rss-to-json");  

exports.libraryChat = functions.https.onRequest(request, response) => {  

    function catalog_search(agent) {
        var itemSubject = agent.parameters["item-subject"] ? "+" + agent.parameters["item-subject"] : "";
        var itemTitle = agent.parameters["item-title"] ? "+" + agent.parameters["item-title"] : "";
        var chatResponse = "";
        var itemList = new Array();
        if (agent.parameters["author-name"]) {
            var authorName = agent.parameters["author-name"]["name"] ? "+" + agent.parameters["author-name"]["name"] + " " + agent.parameters["author-name"]["last-name"] : "+" + agent.parameters["author-name"]["last-name"];
        }
        var searchString = "";
        if (itemSubject.length > 0) { searchString = searchString  + itemSubject; }
        if (itemTitle.length > 0 ) { searchString = searchString + itemTitle; }
        if (authorName.length > 0) { searchString = searchString + authorName; }
        var url = "https://gapines.org/opac/extras/opensearch/1.1/-/rss2-full?searchTerms=site(GCHR-CCO)" + searchString + "&searchClass=keyword";
        console.log(url);
        catalogSearch.load(url, (err, jsonResponse) => {
            if (!err) {
                itemList = jsonResponse.items;
                chatResponse = "The first ten items returned for your search are: ";
            }
            else {
                chatResponse = "I'm sorry! I've encountered an error while retrieving that data!";
            }
        });
        itemList.forEach( (title, index) => {
            chatResponse = chatResponse + (index + 1).toString() + title.title;
        });
        agent.add(chatResponse);
    }

    let intentMap = new Map();
    intentMap.set("Catalog Search", catalog_search);
}

インテントからの JSON レスポンスは次のとおりです。

{
  "responseId": "958f0d66-13ba-4bf5-bed8-83480da4c37e",
  "queryResult": {
    "queryText": "Do you have any books about goats?",
    "parameters": {
      "item-subject": "goats",
      "item-title": "",
      "author-name": ""
    },
    "allRequiredParamsPresent": true,
    "fulfillmentMessages": [
      {
        "text": {
          "text": [
            ""
          ]
        }
      }
    ],
    "intent": {
      "name": "projects/library-chatbot/agent/intents/a5f8ad9b-ff73-49f7-a8c0-351da3bf4802",
      "displayName": "Catalog Search"
    },
    "intentDetectionConfidence": 1,
    "diagnosticInfo": {
      "webhook_latency_ms": 3591
    },
    "languageCode": "en"
  },
  "webhookStatus": {
    "message": "Webhook execution successful"
  }
}

別の関数を使用して、Opensearch 呼び出しが機能し、タイトルのリストが生成されることを確認しましたが、Dialogflow インテントからアクセスしても何も返されません。無料アカウントの制限が原因かと思いましたが、請求情報を追加してアップグレードしてもエラーが続きます。

または、むしろ、応答が生成されないエラーの欠如。ここで私が見逃しているものはありますか?

4

2 に答える 2