Пример nodejs обнаружения намерений Google Cloud Dialogflow не работает

Я пытаюсь реализовать очень простую интеграцию агента диалогового потока с nodejs.

Вот что я сделал до сих пор

  • Я следил за кодом из Обнаружение намерения
  • Я добавил на свой сервер файл закрытого ключа служебной учетной записи .json.
  • Я добавил переменную среды GOOGLE_APPLICATION_CREDENTIALS с путем к моему файлу закрытого ключа .json.

Вот код, который я пытаюсь запустить прямо сейчас:

require('dotenv').config()
const projectId = 'gg-chatbot-216808'; 
const sessionId = 'quickstart-session-id';
const query = 'hello';
const languageCode = 'en-US';

// Instantiate a DialogFlow client.
const dialogflow = require('dialogflow');
const sessionClient = new dialogflow.SessionsClient();

// Define session path
const sessionPath = sessionClient.sessionPath(projectId, sessionId);

// The text query request.
const request = {
    session: sessionPath,
    queryInput: {
        text: {
            text: query,
            languageCode: languageCode,
        },
    },
};

// This prints the private key path correctly.
console.info(process.env.GOOGLE_APPLICATION_CREDENTIALS);

// Send request and log result
sessionClient
    .detectIntent(request)
    .then(responses => {
        console.info('Detected intent');
        const result = responses[0].queryResult;
        console.info(`  Query: ${result.queryText}`);
        console.info(`  Response: ${result.fulfillmentText}`);
        if (result.intent) {
            console.info(`  Intent: ${result.intent.displayName}`);
        } else {
            console.info(`  No intent matched.`);
        }
    })
    .catch(err => {
        console.error('ERROR:', err);
    });

Затем я получаю эту ошибку в консоли при запуске этого файла

Auth error:Error: invalid_user: Robot is disabled.
ERROR: { Error: 14 UNAVAILABLE: Getting metadata from plugin failed with error: invalid_user: Robot is disabled.
    at Object.exports.createStatusError (/var/www/html/google_auth/node_modules/grpc/src/common.js:87:15)
    at Object.onReceiveStatus (/var/www/html/google_auth/node_modules/grpc/src/client_interceptors.js:1188:28)
    at InterceptingListener._callNext (/var/www/html/google_auth/node_modules/grpc/src/client_interceptors.js:564:42)
    at InterceptingListener.onReceiveStatus (/var/www/html/google_auth/node_modules/grpc/src/client_interceptors.js:614:8)
    at callback (/var/www/html/google_auth/node_modules/grpc/src/client_interceptors.js:841:24)
  code: 14,
  metadata: Metadata { _internal_repr: {} },
  details: 'Getting metadata from plugin failed with error: invalid_user: Robot is disabled.' }

вы разрабатываете веб-перехватчик для агента? в этом случае попробуйте использовать следующий клиент NodeJS github.com/dialogflow/dialogflow-fulfillment-nodejs

Abhinav Tyagi 19.09.2018 06:08

эта библиотека может помочь, npmjs.com/package/dialogflow-helper Я написал эту библиотеку поверх клиента отдыха диалогового потока

Inzamam Malik 17.02.2020 14:58
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
1 234
2

Ответы 2

Я также столкнулся с аналогичной проблемой для моего углового бота.

Что я сделал, так это то, что вместо использования google_credentials из файла json я создал объект с private_key, client_email {эти значения могут быть взяты из файла закрытого ключа учетной записи службы .json} и передал объект при настройке клиента сеанса.

var config = {
  credentials: {
    private_key: "YOUR_PRIVATE_KEY",
    client_email: "YOUR_CLIENT_EMAIL"
  }
}

const sessionClient = new dialogflow.SessionsClient(config);

Примечание: скопируйте полную строку private_key из .json. Он начнется как "-----BEGIN PRIVATE KEY-----\n......".

Кроме того, в GCP перейдите в проект-> IAM, затем попробуйте установить роль для службы как DIALOGLOW API ADMIN. Проверьте, работает ли это.

эта библиотека может помочь, npmjs.com/package/dialogflow-helper Я написал эту библиотеку поверх клиента отдыха диалогового потока

Inzamam Malik 17.02.2020 14:58

Если это еще не решено, решение состоит в том, чтобы предоставить "fileKey" внутри sessionClient.

const sessionClient = new dialogflow.SessionsClient({
fileKey:" path of your credentials.json file"
});

или

let filePath = process.env.GOOGLE_APPLICATION_CREDENTIALS  = "Location of credentials file".

const sessionClient = new dialogflow.SessionsClient({
fileKey:filePath
});

это будет работать, даже если системная переменная env не установлена ​​как GOOGLE_APPLICATION_CREDENTIALS.

Надеюсь, это будет полезно.

Другие вопросы по теме