He estado tratando de actualizar una entidad en Dialogflow es usando el SDK de nodejs, pero no he podido hacerlo, la referencia de la API no brinda suficiente información, por lo que necesito ayuda.
el nombre de la entidad que quiero agregar un nuevo valor es @Productos
Hasta ahora, este ha sido el código que he estado tratando de implementar.
updateEntity:async (req, res) => { try{ const projectAgentPath = entityClient.projectAgentPath(clientId) /// (clientId); console.log('whats projectAgentPaht',projectAgentPath); const request = { parent: projectAgentPath, } const response = await entityClient.updateEntityType({ entityType: { name: '@Productos', displayName: "Productos", entities: [ {value: 'Nuevo producto'} ] }, }); // const response = entityClient.getEntityType(request) /*const [response] = await intentsClient.listIntents(request);*/ console.log('whats response ', response); return res.json(response).status(200) }catch(e){ console.log('e ', e) return res.json({message: 'ocurrio un problema al procesar la solictud'}).status(500); }el código de arriba da el siguiente error
projectAgentPaht projects/prod-proinvestec/agent e Error: 3 INVALID_ARGUMENT: Resource name '@Productos' does not match 'projects/*/locations/*/agent/entityTypes/*'. at Object.callErrorFromStatus (D:\Projects\iqbit\chatbot-server\node_modules\@grpc\grpc-js\build\src\call.js:31:26) at Object.onReceiveStatus (D:\Projects\iqbit\chatbot-server\node_modules\@grpc\grpc-js\build\src\client.js:189:52) at Object.onReceiveStatus (D:\Projects\iqbit\chatbot-server\node_modules\@grpc\grpc-js\build\src\client-interceptors.js:365:141) at Object.onReceiveStatus (D:\Projects\iqbit\chatbot-server\node_modules\@grpc\grpc-js\build\src\client-interceptors.js:328:181) at D:\Projects\iqbit\chatbot-server\node_modules\@grpc\grpc-js\build\src\call-stream.js:187:78 at processTicksAndRejections (node:internal/process/task_queues:78:11) { code: 3, details: "Resource name '@Productos' does not match 'projects/*/locations/*/agent/entityTypes/*'.", metadata: Metadata { internalRepr: Map(1) { 'grpc-server-stats-bin' => [Array] }, options: {} }, note: 'Exception occurred in retry method that was not classified as transient'Quiero agregar nuevos valores a la entidad de productos. Espero que alguien pueda ayudarme. ¡Gracias!
Acabo de usar expresiones regulares para detectar el nombre de los productos en lugar de agregar valores a la entidad de productos.
jajaja
Primero debe obtener el nombre del recurso de su tipo de entityType específico que desea actualizar. Puede usar el siguiente comando cURL para obtener el nombre del recurso .
curl -X GET \ -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ -H "Content-Type: application/json; charset=utf-8" \ "https://dialogflow.googleapis.com/v2/projects/<your-project-id>/agent/entityTypes" A continuación se muestra una captura de pantalla de muestra donde encontrar el nombre del recurso en el resultado del comando cURL . 
Ahora puede usar el código actualizado a continuación (derivado de su código publicado) en el que usamos el nombre del recurso en el parámetro "nombre" y agregamos el parámetro "tipo" ya que esto es necesario cuando se usa la función updateEntityType() .
const dialogflow = require('@google-cloud/dialogflow'); const entityClient = new dialogflow.EntityTypesClient(); async function main() { const projectAgentPath = entityClient.projectAgentPath('your-project-id') console.log('whats projectAgentPath',projectAgentPath); const request = { parent: projectAgentPath, } const response = await entityClient.updateEntityType({ entityType: { name: "projects/<your-project-id>/agent/entityTypes/<entity-type-id>", displayName: "Productos", kind: 'KIND_MAP', entities: [ {value: 'Nuevo producto'} ] }, }); // const response = entityClient.getEntityType(request) /*const [response] = await intentsClient.listIntents(request);*/ console.log('whats response ', response); } process.on('unhandledRejection', err => { console.error(err.message); process.exitCode = 1; }); main(...process.argv.slice(2));