Dialogflow простой способ авторизации - PullRequest
0 голосов
/ 26 мая 2018

Существует ли простой способ подключения моего агента Dialogflow к моему node.js коду?Когда я использую этот код с правильным идентификатором проекта, взятым со страницы настроек агента Dialogflow, у меня возникает следующая ошибка:

Ошибка: непредвиденная ошибка при получении учетных данных приложения по умолчанию: не удалось загрузить учетные данные по умолчанию.Перейдите к https://developers.google.com/accounts/docs/application-default-credentials для получения дополнительной информации.

const sessionClient = new dialogflow.SessionsClient();
const sessionPath = sessionClient.sessionPath(projectId, sessionId);

Я посетил страницу, но то, что я хочу, я думаю, довольно запутано (они цитируют другой API и много настроек), как можноЯ разрешаю это?

Я хотел бы сделать это, принимая информацию из файла и загружая все без установки потери API или какой-либо другой ...

Ответы [ 4 ]

0 голосов
/ 08 марта 2019

Начиная с исходного вопроса, документация для аутентификации Dialogflow была улучшена.Вы должны найти все свои ответы здесь:

Аутентификация и контроль доступа

0 голосов
/ 21 августа 2018

Я пишу код, который работал для меня.Выполните все шаги, указанные в Ссылочная ссылка 2 , и для целей кодирования вы можете использовать предоставленный фрагмент.

Я также добавил образец JSON Google Cloud Oauth

Рекомендации:

  1. https://www.npmjs.com/package/dialogflow#samples
  2. https://medium.com/@tzahi/how-to-setup-dialogflow-v2-authentication-programmatically-with-node-js-b37fa4815d89

//Downloaded JSON format

{
  "type": "service_account",
  "project_id": "mybot",
  "private_key_id": "123456asd",
  "private_key": "YOURKEY",
  "client_email": "yourID@mybot.iam.gserviceaccount.com",
  "client_id": "098091234",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/yourID%40mybot.iam.gserviceaccount.com"
}


//------*********************---------------------------
//
const projectId = 'mybot';

//https://dialogflow.com/docs/agents#settings
// generate session id (currently hard coded)
const sessionId = '981dbc33-7c54-5419-2cce-edf90efd2170';
const query = 'hello';
const languageCode = 'en-US';

// Instantiate a DialogFlow client.
const dialogflow = require('dialogflow');
let privateKey = 'YourKey';

// as per goolgle json
let clientEmail = "yourID@mybot.iam.gserviceaccount.com";
let config = {
  credentials: {
    private_key: privateKey,
    client_email: clientEmail
  }
}
const sessionClient = new dialogflow.SessionsClient(config);

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

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

// Send request and log result
sessionClient
  .detectIntent(request)
  .then(responses => {
    console.log('Detected intent');
    const result = responses[0].queryResult;
    console.log(`  Query: ${result.queryText}`);
    console.log(`  Response: ${result.fulfillmentText}`);
    if (result.intent) {
      console.log(`  Intent: ${result.intent.displayName}`);
    } else {
      console.log(`  No intent matched.`);
    }
  })
  .catch(err => {
    console.error('ERROR:', err);
  });
0 голосов
/ 04 октября 2018

У меня та же проблема несколько месяцев назад, проверьте это, вот как я ее решаю.Из вашего JSON Google Cloud извлекает эти строки.

const dialogflow = require('dialogflow');
const LANGUAGE_CODE = 'en-US'
const projectId = 'projectid';
const sessionId = 'sessionId';
const query = 'text to check';


let privateKey = "private key JSON";
let clientEmail = "email acount from JSON";
let config = {
credentials: {
    private_key: privateKey,
    client_email: clientEmail
}
};

sessionClient = new dialogflow.SessionsClient(config);

async function sendTextMessageToDialogFlow(textMessage, sessionId) {
// Define session path
const sessionPath = this.sessionClient.sessionPath(projectId, sessionId);
// The text query request.
const request = {
    session: sessionPath,
    queryInput: {
        text: {
            text: textMessage,
            languageCode: LANGUAGE_CODE
        }
    }
}
try {
    let responses = await this.sessionClient.detectIntent(request)
    console.log('DialogFlow.sendTextMessageToDialogFlow: Detected intent', responses);
    return responses
} catch (err) {
    console.error('DialogFlow.sendTextMessageToDialogFlow ERROR:', err);
    throw err
}
};


sendTextMessageToDialogFlow(query, sessionId)
0 голосов
/ 26 мая 2018

Это не очень хорошо задокументировано, но самый простой способ аутентификации - это использовать файл JSON, предоставленный на консоли облачной платформы Google.

const sessionClient = new dialogflow.SessionsClient({
    keyFilename: '/path/to/google.json'
});
const sessionPath = sessionClient.sessionPath(projectId, sessionId);

Это также работает для всех остальных клиентов.ContextsClients, EntityTypesClient и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...