PERMISSION_DENIED: IAM 权限 'dialogflow.sessions.detectIntent' 节点 js

PERMISSION_DENIED: IAM permission 'dialogflow.sessions.detectIntent' Node js

我在这篇在线文章之后使用 NodeJS 为 WhatsApp Chatbot 创建了一个 webhook:https://dev.to/newtonmunene_yg/creating-a-whatsapp-chatbot-using-node-js-dialogflow-and-twilio-31km

Webhook 已链接到 WhatsApp 的 Twilio 沙盒。

我还向 Google 云平台上的服务帐户提供了 DialogFlow 管理员 API 权限。

当我从 WhatsApp 发送一条新消息时,它在 Twilio 上收到并触发了 webhook,但我在本地计算机的控制台上收到以下错误。

"Error: 7 PERMISSION_DENIED: IAM permission 'dialogflow.sessions.detectIntent' on 'projects/xxxx-xxx-xxxx/agent' denied." 

我正在使用 Ngrok 将本地主机构建隧道传输到网络,并使用它 URL 作为 Twilio 中的网络钩子 URL。

我们有此功能的客户端演示,如有任何快速帮助,我们将不胜感激。我将我的对话流代码和控制器代码放在下面

dialogflow.ts

const dialogflow = require("dialogflow");
const credentials = require("../../credential-new.json");

const sessionClient = new dialogflow.SessionsClient({
  credentials: credentials
});
const projectId: string = process.env.DIALOGFLOW_PROJECT_ID!;

export const runQuery = (query: string, number: string) => {
  return new Promise(async (resolve, reject) => {
    try {
      // A unique identifier for the given session
      //const sessionId = uuid.v4();
      const sessionId = number;
      // Create a new session

      const sessionPath = sessionClient.sessionPath(projectId, sessionId);

      // The text query request.
      const request = {
        session: sessionPath,
        queryInput: {
          text: {
            // The query to send to the dialogflow agent
            text: query,
            // The language used by the client (en-US)
            languageCode: "en-US"
          }
        }
      };

      // Send request and log result
      const responses = await sessionClient.detectIntent(request);

      const result = responses[0].queryResult;

      resolve(result);
    } catch (error) {
      reject(error);
    }
  });
};

我认为问题出在服务帐户上。确保您使用在 Dialogflow 和 GCP 中注册的同一电子邮件,然后创建一个服务帐户,并确保服务帐户电子邮件存在于凭据-new.json 文件中,与具有对话流的服务帐户相同管理员角色,并检查您是否在代码中提供了访问凭证-new.json 文件的有效路径。

您可以安全地执行此操作,方法是转到 Dialogflow 上的设置菜单,然后单击项目 ID,它将带您到正确的位置。

此外,您可能忘记启用 GCP API 部分中的 Dialogflow API。

此问题已通过在 DialogFlow 上创建新帐户并提供新的 API 密钥得到解决。