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 密钥得到解决。
我在这篇在线文章之后使用 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 密钥得到解决。