Задать вопрос

Как в Google Apps Script отличить запуск ф-ии по триггеру своего и чужого аккаунта?

Google Spreadsheet редактирует несколько пользователей. По событию редактирования при определённых условиях надо отправлять письмо MailApp.sendEmail() от имени того аккаунта, который сделал правку.

Для этого, как я понял, требуется, во-первых, чтобы триггер был не простой, а installable trigger – при этом дается разрешение на отправку писем от своего аккаунта.

Во-вторых, надо будет установить такой триггер каждому аккаунту, от имени которого возможна отправка письма. Т.к. такой триггер выполняется от имени установившего его аккаунта, и соотв. письмо уходит от имени этого аккаунта.

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

Вопрос: как в вызываемой функции определить, что юзер, чей триггер вызвал её, и юзер, что внёс правку – совпадают?

Была мысль сохранять UniqueId триггера, инсталлированного самому себе - в Properties. Только пока не нашёл, как при вызове функции определять – каким именно триггером она вызвана, чтобы отловить именно «свой». Пробовал с тремя аккаунтами – ActiveUser показывает email'ы каждого из установивших триггер. Остаётся отловить «себя».
  • Вопрос задан
  • 930 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
Id сработавшего триггера можно получить через e.triggerUid.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
oshliaer
@oshliaer Куратор тега Google Apps Script
Google Products Expert
Возможно, вы уже читали статью "Эффективный пользователь против Активного", на основании которой ваш вопрос можно считать риторическим. Если у вас, конечно, gmail аккаунт, а не G Suite.

Подтверждая ваши слова, вам необходимо создать один standalone скрипт. Позволить каждому пользователю зарегистрировать триггер - каждый сам себе. При такой настройке, во время срабатывания скрипта для каждого владельца скрипта в Active User будет его email, иначе пусто.

Но тут существует подводный камень. Это не всегда работает. В какой-то момент Google раскрыл для владельцев (не G Suite) адреса Effective Users. Это было неприятно. Представьте, я даю вам доступ по ссылке, вы открываете Таблицу, а мой триггер onOpen уже знает, кто вы есть (ну, как минимум ваш адрес электронной почты). Что было делать - отрубить и не давать.

Как можно решать вашу проблему? Нет эффективных методов решения этой задачи. Они либо громоздкие, либо слишком мутные, чтобы оставаться в рабочем состоянии долгое время.

Я одно время использовал монитор почты, но пользователю необходимо подписаться на изменения в Таблице. Может быть в новом API есть возможность подписать пользователя автоматически?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы