Аутентификация Google Sheets API в Dialogflow Fullfilment

Я новичок в этой области, надеюсь, я ясно объясняю проблему.

Я пытаюсь развернуть код, который успешно работает в node.js, в Dialogflow Fulfillment (DF). Код позволяет мне читать и писать таблицы Google с помощью API Google Sheets.

Поскольку я не могу загрузить файл json, содержащий учетные данные моего проекта в DF, я предположил, что мне пришлось использовать учетные данные среды, чтобы вытащить client_email и private_key для аутентификации с помощью API. Я создал учетные данные среды в Firebase, на самом деле я могу получить к ним доступ из node.js с помощью функций firebase:config:get --project "projectID".

Однако при развертывании кода в DF я получил следующую ошибку:

Ошибка: нет ключа или keyFile установлен. в GoogleToken.getTokenAsync (/srv/node_modules/googleapis/node_modules/gtoken/build/src/index.js:125:19) в GoogleToken.getToken (/srv/node_modules/googleapis/node_modules/grctoken / build.js:77:21) в JWT.refreshTokenNoCache (/srv/node_modules/googleapis/node_modules/google-auth-library/build/src/auth/jwtclient.js:156:36) в JWT.refreshToken (/srv/googleapis/node_modules/google-auth-library/build/src/auth/oauth2client.js:143:25) в JWT.authorizeAsync (/srv/node_modules/googleapis/node_modules/google-auth-library/build/src/auth/jwtclient.js:139:35) в JWT.authorize (/srv/node_modules/googleapis/node_modules/google-auth-library/build/src/auth/jwtclient.js:132:18) в приветствии (/srv/index.js:29:12) в WebhookClient.handleRequest (/srv/node_modules/dialogflow-fulfillment/src/dialogflow-fulfillment.js:303:44) по адресу exports.dialogflowFirebaseFulfillment.functions.https.onRequest (/srv/index.js:65:9) в cloudFunction (/srv/node_modules/firebase-functions/lib/providers/https.js:57:9)

Это index.js, который у меня есть в Dialogflow Fulfillment

'use strict';
 
const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');
const axios = require('axios');
const {google} = require('googleapis');
 
process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements
 
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
  const agent = new WebhookClient({ request, response });
  console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
  console.log('Dialogflow Request body: ' + JSON.stringify(request.body));

  
   
  function welcome(agent) {
    const scopes = 'https://www.googleapis.com/auth/spreadsheets';
 const client = new google.auth.JWT(
   process.env.CLIENT_EMAIL,
    null,
    process.env.PRIVATE_KEY,
    scopes
  );
  
 
    client.authorize(function(err,tokens){

     if(err){
        console.log(err);
        return;
     } else {
        console.log('Connected');
        gsrun(client);
     }   
    });
  
   const gsrun = function(cl){
     const gsapi =google.sheets({version:'v4', auth: cl});
     const appendopt = {
         spreadsheetId: '1q_ePvnom7IVQH1uaGs8scSnFvFqgf4-QnAx6lHDl3IY',
         range: 'Cart!A1:H4',
         valueInputOption: 'USER-ENTERED',
         resource: {values: [['Pedro','Stoke']]}
     };
     let newrow = new Promise(gsapi.spreadsheets.values.append(appendopt));
     console.log(newrow);
   };
  }
  function fallback(agent){
    agent.add(`I didn't understand`);
    agent.add(`I'm sorry, can you try again?`);
  }

  
 
   
  let intentMap = new Map();
  intentMap.set('Default Welcome Intent', welcome);
  intentMap.set('Default Fallback Intent', fallback);
  // intentMap.set('your intent name here', yourFunctionHandler);
  // intentMap.set('your intent name here', googleAssistantHandler);
  agent.handleRequest(intentMap);
});

Есть идеи о том, в чем может быть проблема? Привет,

0 ответов

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