Функция загрузки намерений Dialogflow V2 - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь разработать API для загрузки намерения в Dialogflow V2. Я попробовал приведенный ниже фрагмент, который не работает, однако, если он пытается связаться с Dialogflow, он работает (определяет намерение) и получает ответ от Dialogflow на запросы.

РАЗРЕШЕНИЯ

Я & АДМИНИСТРАЦИЯ> СЧЕТА ОБСЛУЖИВАНИЯ> DIALOGFLOW ADMIN

ОШИБКА

Ошибка: 7 PERMISSION_DENIED: разрешение IAM 'dialogflow.entityTypes.create' on 'projects / dexter-47332 / agent' отклонено.

БЛОГИ / ССЫЛКИ

  1. Dialogflow простой способ авторизации
  2. https://github.com/dialogflow/dialogflow-nodejs-client-v2/blob/master/samples/resource.js#L26
  3. https://www.npmjs.com/package/dialogflow
  4. https://developers.google.com/apis-explorer/
  5. https://cloud.google.com/docs/authentication/production

//------- keys.json (test 1)

{
  "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"
}


//--------------------- ** (test 2) ** ---------

let privateKey = 'key';
let clientEmail = "email";

let config = {
  credentials: {
    private_key: privateKey,
    client_email: clientEmail
  }
}

function createEntityTypes(projectId) {
  // [START dialogflow_create_entity]
  // Imports the Dialogflow library
  const dialogflow = require('dialogflow');

  // ******** Instantiates clients (Test 1)********
  const entityTypesClient = new dialogflow.EntityTypesClient({
    'keyFilename': './keys.json'
  });
  const intentsClient = new dialogflow.IntentsClient({
    'keyFilename': './keys.json'
  });

  // ******** Instantiates clients (Test 2)********
  const entityTypesClient = new dialogflow.EntityTypesClient(config);
  const intentsClient = new dialogflow.IntentsClient(config);


  // The path to the agent the created entity type belongs to.
  const agentPath = intentsClient.projectAgentPath(projectId);

  const promises = [];

  // Create an entity type named "size", with possible values of small, medium
  // and large and some synonyms.
  const sizeRequest = {
    parent: agentPath,
    entityType: {
      displayName: 'test',
      kind: 'KIND_MAP',
      autoExpansionMode: 'AUTO_EXPANSION_MODE_UNSPECIFIED',
      entities: [{
          value: 'small',
          synonyms: ['small', 'petit']
        },
        {
          value: 'medium',
          synonyms: ['medium']
        },
        {
          value: 'large',
          synonyms: ['large', 'big']
        },
      ],
    },
  };
  promises.push(
    entityTypesClient
    .createEntityType(sizeRequest)
    .then(responses => {
      console.log('Created size entity type:');
      logEntityType(responses[0]);
    })
    .catch(err => {
      console.error('Failed to create size entity type ----->:', err);
    })
  );
}

createEntityTypes(projectId);

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Я столкнулся с той же ошибкой. Я исправил это, удалив текущую учетную запись службы и создав новую, и выбрал для роли параметр «владелец».

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

Вы можете использовать JWT (JSON Web Tokens) для аутентификации с помощью учетных записей служб, как в этом примере

 const serviceAccount = { };    // JSON key contents {"type": "service_account",...

 const serviceAccountAuth = new google.auth.JWT({
 email: serviceAccount.client_email,
 key: serviceAccount.private_key,
 scopes: 'https://www.googleapis.com/auth/calendar'
});

Чтобы узнать больше об OAuth2.0 для API Google, вы можете увидеть полный список здесь .

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