Вопрос или проблема
Я пытаюсь получить последние входы пользователя в платформе 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 и старайтесь оптимизировать работу вашего скрипта для получения наилучших результатов.
Если у вас возникнут дополнительные вопросы или потребуется помощь с кодом, не стесняйтесь обращаться за поддержкой!