Upload Intent function Dialogflow V2

匿名 (未验证) 提交于 2019-12-03 01:05:01

问题:

I am trying to develop an API to upload the intent to Dialogflow V2. I have tried below snippet, which it is not working however if trying to communicate with Dialogflow it does work (detect intent)and does get a reply from the Dialogflow for queries.

PERMISSION

I AM & ADMIN > SERVICE ACCOUNTS > DIALOGFLOW ADMIN

ERROR

Error: 7 PERMISSION_DENIED: IAM permission 'dialogflow.entityTypes.create' on 'projects/dexter-47332/agent' denied.

BLOGS/ REFERENCES

  1. Dialogflow easy way for authorization
  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);

回答1:

You can use JWT(JSON Web Tokens) for authenticating with service accounts like in this example

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

For more OAuth2.0 scopes for Google APIs you can see the full list here.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!