Аутентификация 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);
});
Есть идеи о том, в чем может быть проблема? Привет,