Добавить ярлык в ветку Gmail только с 1 сообщением (исходное сообщение) - PullRequest
0 голосов
/ 10 февраля 2020

Когда я отправляю цитату клиенту, я хочу написать скрипт, который легко добавит метку в электронное письмо. Суть в том, что я хочу добавить метку только один раз в поток, а затем никогда больше. У меня есть другой скрипт, который будет принимать все письма с этим ярлыком, добавлять напоминание календаря и удалять ярлык, чтобы он не продолжал добавлять событие. Проблема, с которой я сталкиваюсь, заключается в том, что, когда клиент отвечает на это первое электронное письмо, метка затем повторно применяется, что вызывает еще одно событие календаря. Есть ли способ добавить метку в поток только с количеством сообщений 1? Таким образом, в случае изображения ниже, метка должна применяться только ко второму потоку, а не к первому.

Два потока, один с одним электронным письмом, а другой с 5

function QuoteReminder() {
  var reminderLabel = "STS Quotes", //Substitute your label here
      calendarName = "Quote Follow-ups", ////Substitute your Calendar name here
      label = GmailApp.getUserLabelByName(reminderLabel),
      threads = label.getThreads();

     if (threads.length > 0) {
       for (i in threads) {
         if (i.getMessageCount() == 1) {
          //get calendar by name
          var cals = CalendarApp.getCalendarsByName(calendarName);

          //This is run the next day around 9am, calendar invite will be created for 13 days form then to account for the next day
          var now = new Date().getTime();
          var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
          for (i in threads) {
            cals[0].createEvent(reminderLabel + '- '+ i.getFirstMessageSubject(),
             new Date(now+(MILLIS_PER_DAY*13)),
             new Date(now+(MILLIS_PER_DAY*13)+900000), {description: i.getPermalink()});
      }
      //Remove the label from the mails to avoid duplicate event creation on next run 
      label.removeFromThreads(threads);
         }
       }
     }
}

1 Ответ

0 голосов
/ 10 февраля 2020

Да, есть.

Я не могу предоставить вам решение для копирования-вставки, поскольку я не видел ваш код и даже не знаю, какой язык программирования вы используете, но

есть метод Users.threads: get , который возвращает вам все сообщения потока.

Таким образом, вы можете включить простой оператор if, чтобы проверить либо длина массива сообщений больше 1 и, соответственно, выполните оставшуюся часть кода.

ОБНОВЛЕНИЕ:

  • Для получения количества сообщений в потоке в скрипте приложений вам необходимо можно использовать метод getMessageCount()
  • Это сообщение необходимо применить к одному потоку
  • Метод label.getThreads() возвращает вам массив потоков
  • Чтобы получить доступ к отдельным элементам массива потоков, вам необходимо обратиться к ним с их позицией в массиве, например, threads[0], threads[1] или - в al oop threads[i]

В вашем случае:

вам необходимо изменить if (i.getMessageCount() == 1) {... t o if (threads[i].getMessageCount() == 1) {....

В противном случае оператор if просто проверяет, что переменная счетчика i равна 1 - что всегда будет иметь место на одной из итераций, если threads.length > 0

...