API Календаря Google Node JS, не удается добавить участников с учетной записью службы - PullRequest
2 голосов
/ 25 марта 2020

В настоящее время я пытаюсь разработать простую программу Node JS, развернутую в облачной функции GCP, для использования API Календаря Google с учетной записью службы.

Программа проста, я просто хочу создать событие и добавление участников.

Мой код работает хорошо, однако я не могу добавить участников с учетной записью службы, у меня есть эта ошибка:

There was an error contacting the Calendar service: Error: Service accounts cannot invite attendees without Domain-Wide Delegation of Authority.

API активирован, и я разрешил календарь область действия GSuite Admin Security, моя учетная запись службы проверила полномочия делегирования на GCP.

Я ищу много решений, но моя проблема не решается ..

Это код моего модуля. :

const { google } = require('googleapis');
const sheets = google.sheets('v4');

const SCOPES = ['https://www.googleapis.com/auth/spreadsheets','https://www.googleapis.com/auth/calendar'];
let privatekey = require("../creds.json");

async function getAuthToken() {
    let jwtClient = new google.auth.JWT(
           privatekey.client_email,
           null,
           privatekey.private_key,
           SCOPES);
    //authenticate request
    jwtClient.authorize(function (err, tokens) {
     if (err) {
       console.log(err);
       return;
     } else {
       console.log("Successfully connected!");
     }
    });
    return jwtClient;
}


async function insertEvents(auth,items) {

  const calendar = google.calendar({ version: 'v3', auth });

  var startDate = new Date();
  var endDate = new Date();
  startDate.setHours(14, 0, 0, 0);
  endDate.setHours(15, 0, 0, 0);

    var attendees = [];

    items.forEach(function(item){
       attendees.push({email: item[2]});
    });


  var event = {
    summary: 'Stack Roulette : It\'s Coffee Time =)',
    location: 'Partout, mais avec un café',
    description: "",
    start: {
      dateTime: startDate.toISOString(),
      timeZone: 'Europe/London'
    },
    end: {
      dateTime: endDate.toISOString(),
      timeZone: 'Europe/London'
    },
   attendees: attendees,
    reminders: {
      useDefault: false,
      overrides: [
        { method: 'email', minutes: 24 * 60 },
        { method: 'popup', minutes: 10 }
      ]
    },
    conferenceData: {
    createRequest: {requestId: Math.random().toString(36).substring(2, 10),
      conferenceSolution: {
        key: {
            type: "hangoutsMeet"
        }
      },}
  }
  };



  calendar.events.insert(
    {
      auth: auth,
      calendarId: 'primary',
      resource: event,
      conferenceDataVersion: 1
    },
    function(err, event) {
      if (err) {
        console.log(
          'There was an error contacting the Calendar service: ' + err
        );
        return;
      }
      console.log('Event created: %s', event.data.htmlLink);
    }
  );
}

module.exports = {
  getAuthToken,
  getSpreadSheetValues,
  insertEvents
}

Я уточнил, что для моего приложения нет внешнего интерфейса, код запускается с облачной функцией, такой как конечная точка API.

PS: это не облачная функция Firebase, а GCP Облачная функция Если я удаляю участников из создания события, это работает хорошо, но не может видеть событие.

Спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Когда вы создаете jwtClient, я думаю, что вы должны поместить основной электронный адрес пользователя в метод JWT.

Как:

let jwtClient = new google.auth.JWT(
           privatekey.client_email,
           null,
           privatekey.private_key,
           SCOPES,
           "yourUserPrimaryEmail"); // here
0 голосов
/ 25 марта 2020

Чтобы настроить делегирование полномочий для всего домена

  • Посетите облачную консоль
  • Go до IAM & Admin -> Сервисные учетные записи
  • Выберите учетную запись службы, которую вы используете в своем скрипте
  • Проверьте Enable G Suite Domain-wide Delegation

Если вы уверены, что вы уже включили делегирование всего домена для правильной учетной записи службы и вы сталкиваетесь с проблемами только при создании событий с участниками:

Ваша проблема, вероятно, связана с этой проблемой, зарегистрированной в системе отслеживания проблем Google:

В настоящее время существуют ограничения для создания события с посетителями, имеющими учетную запись службы, особенно когда участники находятся за пределами вашего домена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...