Как я могу использовать script.google.com или Google APIs, чтобы получить список последних входов пользователя в Google?

Вопрос или проблема

Я пытаюсь получить последние входы пользователя в платформе Google, используя script.google.com, но когда я пробую этот пример:
https://github.com/googleworkspace/apps-script-samples/blob/main/adminSDK/reports/quickstart.gs
я получаю только старые данные. Я заметил, что для этого события есть значительная задержка:
https://apps.google.com/supportwidget/articlehome?hl=en&article_url=https%3A%2F%2Fsupport.google.com%2Fa%2Fanswer%2F7061566%3Fhl%3Den&assistant_id=generic-unu&product_context=7061566&product_name=UnuFlow&trigger_context=a

Кто-нибудь знает, как получить эту информацию без задержки?
Мне нужно, чтобы каждый пользователь организации в Google получал электронное письмо с информацией о последних входах каждый раз, когда пользователь входит в систему.

Я пробовал с этим примером:
https://github.com/googleworkspace/apps-script-samples/blob/main/adminSDK/reports/quickstart.gs

function listLogins() {
  const userKey = 'all';
  const applicationName="login";
  const optionalArgs = {
    maxResults: 10
  };
  try {
    const response = AdminReports.Activities.list(userKey, applicationName, optionalArgs);
    const activities = response.items;
    if (!activities || activities.length === 0) {
      console.log('Нет найденных входов.');
      return;
    }
    // Печать событий входа
    console.log('Входы:');
    for (const activity of activities) {
      console.log('%s: %s (%s)', activity.id.time, activity.actor.email,
          activity.events[0].name);
    }
  } catch (err) {
    // TODO (разработчик) - Обработать исключение из Report API
    console.log('Не удалось, ошибка %s', err.message);
  }
}

Но я получаю старые данные

Ответ или решение

Чтобы получить информацию о последних входах пользователей в Google-платформе с использованием Google Apps Script или Google APIs, необходимо учитывать несколько факторов, включая задержки в обработке данных и правильную настройку API. Вот подробное руководство, которое поможет вам организовать этот процесс.

1. Введение

С помощью Google Admin SDK Reports API вы можете получать данные о входах пользователей. Однако важно понимать, что существует естественная задержка в обновлении данных, что может привести к тому, что вы будете получать устаревшую информацию. В этом контексте решение проблемы задержки данных является главной задачей.

2. Основы работы с Admin SDK Reports API

Вы уже используете библиотеку AdminReports на Google Apps Script для получения данных о входах. Имеющаяся вами функция listLogins() правильно установлен в качестве примера, но, если вы наблюдаете старые данные, это может быть связано с промедлением в обновлении отчетов или отсутствием событий входа в заданный временной диапазон.

3. Решение проблемы с задержкой

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

A. Частота запросов

Google API имеет ограничения на частоту запросов. Убедитесь, что вы не превышаете эти лимиты. Например, можно запланировать выполнение скрипта каждые 1-5 минут для отслеживания входов в реальном времени, если ваша организация позволяет такую частоту.

B. Использование Webhooks

Рассмотрите возможность использования Google Workspace Events API. С его помощью можно настраивать3 Webhooks, которые будут отправлять уведомление каждый раз, когда происходит событие входа. Это позволит вам мгновенно получать данные, не полагаясь на периодические запросы к API.

C. Настройка логики по времени

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

const lastCheckedTime = new Date(); // сохраняйте текущее время после получения данных

const optionalArgs = {
  maxResults: 10,
  startTime: lastCheckedTime.toISOString()
};

4. Отправка уведомлений пользователям

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

function sendLoginNotification(userEmail, loginTime) {
  const subject = 'Уведомление о входе';
  const body = `Вы успешно вошли в вашу учетную запись Google в ${loginTime}`;
  MailApp.sendEmail(userEmail, subject, body);
}

function listLogins() {
  const userKey = 'all';
  const applicationName = 'login';
  const optionalArgs = {
    maxResults: 10
  };

  try {
    const response = AdminReports.Activities.list(userKey, applicationName, optionalArgs);
    const activities = response.items;

    if (!activities || activities.length === 0) {
      console.log('Входы не найдены.');
      return;
    }

    // Отправка уведомлений
    for (const activity of activities) {
      const loginTime = activity.id.time;
      const userEmail = activity.actor.email;
      sendLoginNotification(userEmail, loginTime);
    }
  } catch (err) {
    console.log('Произошла ошибка: %s', err.message);
  }
}

5. Заключение

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

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

Оцените материал
Добавить комментарий

Капча загружается...