Ошибка: имя ресурса 'foo' не совпадает с 'projects/*/agent'

Я пытаюсь создать новый Entity на DialogFlow:

const dialogflow = require('dialogflow');

/**
 * trains the NLP to recognize language constructs
 */
export function intTraining() {

  const ENTITY_DEFINITION_BOOLEAN = {
    parent: 'foo',
    entityType: {
      displayName: 'myBoolean',
      kind: 'KIND_MAP',
      autoExpansionMode: 'AUTO_EXPANSION_MODE_UNSPECIFIED',
      entities: [
        {value: 'true',  synonyms: [ 'yes', 'yeah', 'sure', 'okay' ]},
        {value: 'false', synonyms: [ 'no', 'no thanks', 'never' ]}
      ],
    },
  };

  // allocate
  const entityTypesClient = new dialogflow.EntityTypesClient();
  // declare promises
  const promises = [];
  // allocate entities
  prepareEntity(entityTypesClient, promises, ENTITY_DEFINITION_BOOLEAN);
  // execute state initialization
  Promise.all(promises);
}

/** Buffers an Entity onto the Promise Queue. */
function prepareEntity(entityTypesClient, promises, definition) {
  // boolean entity
  promises.push(entityTypesClient
    .createEntityType(definition)
    .then(responses => { })
    .catch(err => { console.error('', err) })
  );
}

Однако когда я выполняю этот код, я получаю следующую ошибку:

Error: Resource name 'foo' does not match 'projects/*/agent'.

Я уже использовал gcloud auth application-default login создать учетные данные доступа к API на моем компьютере, с foo настроен как текущий выбранный проект, но это не помогло.

Что я делаю неправильно?

2 ответа

Решение

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

// Imports the Dialogflow library
const dialogflow = require('dialogflow');

// Instantiates clients
const entityTypesClient = new dialogflow.EntityTypesClient();
const intentsClient = new dialogflow.IntentsClient();

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

// Create an entity type named "size", with possible values of small, medium
// and large and some synonyms.
const sizeRequest = {
  parent: agentPath,
  entityType: {
    displayName: 'size',
    entities: [
      {value: 'small', synonyms: ['small', 'petit']},
      {value: 'medium', synonyms: ['medium']},
      {value: 'large', synonyms: ['large', 'big']},
    ],
  },
};

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);
  })
);

Вам необходимо указать точный путь к агенту вашего проекта. Вместо того, чтобы использовать parent : foo в вашем распределении ENTITY_DEFINITION_BOOLEAN, вы должны использовать:

parent: 'projects/foo/agent'

Это соответствует структуре пути, ожидаемой DialogFlow.

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