Чат-бот из Google Sheets Event - двойная функция?

Совершенно новичок в этом. Я делаю все, что в моих силах, учитывая то, что я знаю (это действительно тяжелые вещи, и я снимаю шляпу перед всеми вами, которые зарабатывают этим на жизнь - надеюсь, однажды я доберусь до этого)

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

У меня функция работает на

  1. Отметка времени и getEffectiveUser (). GetEmail - для подотчетности
  2. функция sendReminder () - которая использует веб-перехватчик для отправки сообщения в чат (украл это из Google Dev)

Вот код, который у меня есть, и я пробовал много-много вариантов вызова функции sendReminder, если e.value == FALSE (я понимаю, что это не идеальный метод и, конечно, открыт для предложений)

Вот код в его нынешнем виде, но единственный способ его работы - вручную - снова хотелось бы, чтобы sendReminder сработал, когда в ячейке будет FALSE.

function onEdit(e){

  if(e.value == "TRUE"){
    e.source.getSheetByName("Daily").getRange(e.range.rowStart,e.range.columnStart+1).setValue(Session.getEffectiveUser().getEmail());
    e.source.getSheetByName("Daily").getRange(e.range.rowStart,e.range.columnStart+2).setValue(new Date()).setNumberFormat("MM/dd/yyyy hh:mm");}
return e.value;
}

function sendReminder(){
var data = {
text: "Looks like LCH Temp is open right now - Can someone take over?"
};
var payload = JSON.stringify(data);
var options = {
method: 'POST',
contentType: 'application/json',
payload: payload
};
var url = 'https://chat.googleapis.com/v1/spaces/AAAAuBSsspc/messages?key=AIzaSyDdI0hCZtE6vySjMm-WEfRq3CPzqKqqsHI&token=jqvtFaKqM1a_spMOJFByn29jTEL5iF-JZQ9BEFws9u4%3D'
var rsp = UrlFetchApp.fetch(url, options);
}

Заранее благодарим за терпение, понимание и помощь. Я читаю и изучаю столько, сколько могу, но это требует большого внимания.


person Cade Slayton    schedule 11.09.2020    source источник


Ответы (1)


Отвечать:

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

Больше информации:

Согласно документации по простым триггерам:

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

Поскольку UrlFetchApp требует авторизации, вы не сможете запустить это с помощью простого триггера.

Исправить:

Вам понадобится ваш проверочный код onEdit(e) на ЛОЖЬ, например:

function whenEdited(e) {
  // whatever code you already have
  // change "C5" on the next line to whatever specific cell you want to check:
  if (e.range.getA1Notation() == "C5" && e.value == "FALSE") { 
    sendReminder()
  }
}

Затем вам нужно будет настроить вашу whenEdited() функцию в качестве устанавливаемого триггера:

Настройка триггера:

Сохраните сценарий с помощью значка сохранения, нажмите кнопку запуска (►) и подтвердите аутентификацию запуска сценария.

Отсюда, после пункта меню Edit > Current project's triggers, у вас откроется новая страница в Центре разработчиков G Suite. Нажмите кнопку + Add Trigger в правом нижнем углу и настройте параметры триггера следующим образом:

  • Выберите, какую функцию запустить: whenEdited
  • Выберите, какое развертывание следует запустить: Голова
  • Выберите источник события: из электронной таблицы
  • Выберите тип триггера по времени: При редактировании

И нажмите "Сохранить". Теперь всякий раз, когда указанная вами ячейка редактируется, функция sendEmails() будет запускаться, предварительно авторизованная вами.

Надеюсь, это будет вам полезно!

Использованная литература:

person Rafa Guillermo    schedule 11.09.2020