Добавление событий в Google Calendar других пользователей через приложение node.js

За основу была взята реализация по статье из хабра: https://habr.com/ru/post/524240/ Событие записывается и обновляется в нашем пользовательском календаре

export async function addToGoogleCalendar(form, visitData, updateMode=false) {

    async function readPrivateKey() {
        return configGoogleCalendar;
    }

    async function authenticate(key) {
        const jwtClient = new google.auth.JWT(
            key.client_email,
            null,
            key.private_key,
            [SCOPE_CALENDAR, SCOPE_EVENTS]
        );
        await jwtClient.authorize();
        return jwtClient;
    }

    function getData() {
        let startDateTime = new Date(form.date);
        let finishDateTime = new Date(form.date);
        finishDateTime.setTime(finishDateTime.getTime() + (2*60*60*1000));
        const event = {
            'summary': `Встреча с пользователем ${visitData.persons[0].descriptions[0].lastname} ${visitData.persons[0].descriptions[0].firstname}`,
            'description': `Встреча пользователя ${visitData.user.surname} ${visitData.user.name} с пользователем ${visitData.persons[0].descriptions[0].lastname} ${visitData.persons[0].descriptions[0].firstname}`,
            'start': {
                'dateTime': startDateTime.toISOString(),
                'timeZone': 'Europe/Moscow',
            },
            'end': {
                'dateTime': finishDateTime.toISOString(),
                'timeZone': 'Europe/Moscow',
            },
            /*'attendees': [
                {'email': '[email protected]'}
            ],*/
        };
        return event;
    }

    //функция создания события в календаре
    async function createEvent(auth) {
        let event = getData();
        let calendar = google.calendar('v3');
        await calendar.events.insert({
            auth: auth,
            calendarId: CALENDAR_ID,
            resource: event,
            sendNotifications: true
        }, async function(err, event) {
            if (err) {
                console.log('There was an error contacting the Calendar service: ' + err);
                return;
            }
            console.log('Event created, eventId: %s', event.data.id);
            //возвращаем id задачи календаря
            let visit = await models.Visits.findById(visitData._id)
            visit.googleCalendarEvent = event.data.id
            visit.save()
        });
    }

    //функция обновления события в календаре
    async function updateEvent(auth) {
        let event = getData();
        let calendar = google.calendar('v3');
        await calendar.events.update({
            auth: auth,
            calendarId: CALENDAR_ID,
            sendNotifications: true,
            eventId: visitData.googleCalendarEvent,
            resource: event,
            //sendNotifications: true
        }, function(err, event) {
            if (err) {
                console.log('There was an error contacting the Calendar service: ' + err);
                return;
            }
            console.log('Обновленные данные события успешно записаны в календарь');
        });
    }

    // MAIN
    try {
        const key = await readPrivateKey();
        const auth = await authenticate(key);
        if (!updateMode) await createEvent(auth);
        else await updateEvent(auth);
    } catch (e) {
        console.log('Error: ' + e);
    }
}

Если записывать события только в наш календарь, оставив закомментированным блок с почтой 'attendees', то нет проблем, но критично, чтобы запись о событии добавлять в календари пользователям по указанному массиву адресов, а сейчас вылетает ошибка "Service accounts cannot invite attendees without Domain-Wide Delegation of Authority". При этом, если использовать корпоративный аккаунт гугла и соответственно календарь вместо пользовательского и выполнять все по инструкции для активации Domain-Wide Delegation, заветной галочки активации не появляется. Более того работа скрипта в этом случае возвращает not found. Подскажите, куда копать и может в реализации все куда проще


Ответы (0 шт):