Dialogflow CX webhook 用于使用 nodejs 回复用户

Dialogflow CX webhook for fulfilment to reply user using nodejs

我尝试使用 dialogflow-fulfillment 库,但我想它是用于 Dialogflow ES 的,所以现在我正在使用 @google-cloud/dialogflow-cx 库,但我不知道如何使用此库进行 webhook 连接以回复使用 fulfilments 的用户,Dialogflow CX 可用的 material 很少。

// use credentials or keyFilename i'm using keyFile
    credentials: {
        private_key: "-----BEGIN PRIVATE KEY-----==\n-----END PRIVATE KEY-----\n",
 
        client_email:"pro1a3711.iam.gserviceaccount.com",
    },                                                                                                                                                                                                                                                                                                                                                                              
        keyFilename: './pr.json'
}

const {SessionsClient} = require('@google-cloud/dialogflow-cx');
const projectId = 'pro1-293711';
const location = 'global';
const agentId = 'da2271f5-0221-4dce-98d3-efa----9dd';
const languageCode = 'en';
 const query = ['hello'];
// Imports the Google Cloud Some API library
//console.log(WebhooksClient)
const client = new SessionsClient(config);
   //console.log("client",client)
     async function detectIntentText() {
        const sessionId = Math.random().toString(36).substring(7);
    const sessionPath = client.projectLocationAgentSessionPath(
      projectId,
      location,
      agentId,
      sessionId
    );
    console.info(sessionPath);
    const request = {
        session: sessionPath,
        queryInput: {
          text: {
            text: query,
          },
          languageCode,
        },
      };
      const [response] = await client.detectIntent(request);
      console.log(`User Query: ${query}`);
      for (const message of response.queryResult.responseMessages) {
        if (message.text) {
          console.log(`Agent Response: ${message.text.text}`);
        }
      }
      if (response.queryResult.match.intent) {
        console.log(
          `Matched Intent: ${response.queryResult.match.intent.displayName}`
        );
      }
      console.log(
        `Current Page: ${response.queryResult.currentPage.displayName}`
      );
    }

 detectIntentText()```

注意 dialogflow-fulfillment library only supports Dialogflow ES and the @google-cloud/dialogflow-cx library is only used for node.js applications to access Dialogflow CX API.

由于尚无适用于 Dialogflow CX 的实现库,您可以参考 Dialogflow CX webhook request and webhook response 为您的 Dialogflow CX 代理构建 webhook 服务。

您还可以使用下面的 Node.js 和 express 参考 Dialogflow CX 的示例 Webhook 服务代码:

const express = require("express");
const app = express();
const bodyParser = require("body-parser");

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

app.post("/webhook", (request, response) => {
  let tag = request.body.fulfillmentInfo.tag;
  let jsonResponse = {};
  if (tag == "welcome tag") {
    //fulfillment response to be sent to the agent if the request tag is equal to "welcome tag"
    jsonResponse = {
      fulfillment_response: {
        messages: [
          {
            text: {
              //fulfillment text response to be sent to the agent
              text: ["Hi! This is a webhook response"]
            }
          }
        ]
      }
    };
  } else {
    jsonResponse = {
      //fulfillment text response to be sent to the agent if there are no defined responses for the specified tag
      fulfillment_response: {
        messages: [
          {
            text: {
              ////fulfillment text response to be sent to the agent
              text: [
                `There are no fulfillment responses defined for "${tag}"" tag`
              ]
            }
          }
        ]
      }
    };
  }
  response.json(jsonResponse);
});

const listener = app.listen(process.env.PORT, () => {
  console.log("Your app is listening on port " + listener.address().port);
});