W GMailu, mimo że jest obecnie najpopularniejszym klientem poczty, nie zrealizowano funkcji wysyłania notyfikacji SMS o nowych mailach.
Posiadacze smartfonów mogą dowiadywać się o nowych mailach dzięki funkcji push e-mail, ale pobiera to dodatkowe megabajty, więc dla niektórych to odpada.
Zobaczmy zatem, jak wykorzystać możliwości Kalendarz Google, aby zorganizować powiadomienia smsowe o nowych wiadomościach w usłudze GMail.
(Obrazek: Our’s Article)
Na początek przypominamy, że notyfikacje SMS o nowych wydarzeniach potrafi wysyłać inna aplikacja Google – Kalendarz Google. Warto włączyć tę usługę, jeżeli zdarza nam się zapominać o zaplanowanych spotkaniach.
Jeżeli mamy już podany w Kalendarzu GMail numer telefonu komórkowego, tworzymy na GMailu nową etykietę (korzystanie z etykiet), np. SMS oraz filtr, który będzie oznaczał nową etykietą wszystkie wiadomości przychodzące na nasz adres mailowy.
Otwieramy Dysk Google i klikamy Utwórz>Więcej>Skrypt. Za chwilę dodamy prosty skrypt, ale tytułem wyjaśnienia: skrypt działa w ten sposób, że tworzy nowe wydarzenia w naszym Kalendarzu Google.
1). Jeżeli chcemy, by wydarzenia były kasowane tuż po wysłaniu powiadomienia, wybieramy skrypt nr 1:
Aby uniknąć błędów, wchodzimy do Ustawień Kalendarza Google:
Powiadomienia>Domyślnie przypominaj za pośrednictwem i ustawiamy SMS: 0 min przed każdym wydarzeniem
[stextbox id=”grey” caption=”Skrypt”]
function Notification()
{
var threads = GmailApp.getUserLabelByName(’SMS’).getThreads(); //zmienna przechowujące kolekcję łańcuszków z naszą etykietą SMS
var now = new Date();
if(threads == 0) return; // zaprzestanie wykonywania, jeżeli brak nowych łańcuszków</code>
for(i in threads) // tworzymy zdarzenia
{
CalendarApp.createEvent(threads[i].getFirstMessageSubject(),
new Date(now.getTime()+60000),
new Date(now.getTime()+60000)).setDescription(’this-is-sms_notification-mark’);
//this-is-sms_notification-mark – etykieta utworzonego zdarzenia, dzięki której można będzie je znaleźć podczas kasowania
}
GmailApp.getUserLabelByName(’SMS’).removeFromThreads(threads); //usuwanie etykiety „SMS”
Utilities.sleep(300000);
var TodaysEvents = CalendarApp.getDefaultCalendar().getEventsForDay(now);
for (i in TodaysEvents) // wyszukiwanie według zdarzenia i kasowanie po wysłaniu
{
if (TodaysEvents[i].getDescription()==’this-is-sms_notification-mark’)
TodaysEvents[i].deleteEvent();
}
}
[/stextbox]
2). Można też utworzyć nowy kalendarz, np. „GMail: Powiadomienia SMS” i przechowywać w nim takie zdarzenia. Skrypt nr 2:
[stextbox id=”grey” caption=”Skrypt”]
function my_notification()
{
var calendar = CalendarApp.getOwnedCalendarsByName(’email’)[0]; //otwieramy kalendarz o nazwie „email”
if (!calendar){
calendar = CalendarApp.createCalendar(’email’); //lub tworzymy nowy, jeżeli jeszcze go nie ma
calendar.setHidden(true);
}
var threads = GmailApp.getUserLabelByName(’SMS’).getThreads(); //zmienna, w której zapisywana jest kolekcja łańcuszków z etykietą SMS
var now = new Date();
if(threads == 0) return; // zaprzestanie wykonywania, jeżeli brak nowych łańcuszków
for(i in threads) // tworzenie zdarzeń
{
calendar.createEvent(threads[i].getFirstMessageSubject(),
new Date(now.getTime()+60000),
new Date(now.getTime()+60000));
}
GmailApp.getUserLabelByName(’SMS’).removeFromThreads(threads); //usuwanie etykiet „SMS” z łańcuszków
}
[/stextbox]
Po uruchomieniu skryptu wchodzimy do Ustawień Kalendarza Google:
Powiadomienia>Domyślnie przypominaj za pośrednictwem i ustawiamy SMS: 0 min przed każdym wydarzeniem
Po wklejeniu kodu, tworzymy wyzwalacz dla bieżącego skryptu. Klikamy Zasoby>Wyzwalacze bieżącego skryptu i definiujemy częstotliwość wykonywania, np. 1 h (wartość domyślna, więc wystarczy potwierdzić):
Teraz zgadzamy się na autoryzację:
i uruchamiamy skrypt:
Aby uniknąć ewentualnych błędów usuwamy notyfikację w oknie edytora wyzwalaczy.
Zrobiłem wszystko według 1 skryptu.
Proszę o pomoc dlaczego otrzymuje podwójne powiadomienia.
Tzn.
przychodzi powiadomienie sms a za jakąś minutę przychodzi to samo powtórzone.
Odstęp czasu mam ustawiony co godzinę.
Czy rozwiązałeś problem? mam to samo
mi też przychodzą po dwa smsy. troche wkurzające to jest.. jak naprawić błąd???
Dobry kod który działa
function Notification()
{
var threads = GmailApp.getUserLabelByName(’
SMS’).getThreads(); //zmienna przechowujące kolekcję łańcuszków z naszą etykietą SMS
var now = new Date();
if(threads == 0) return; // zaprzestanie wykonywania, jeżeli brak nowych łańcuszków
for(i in threads) // tworzymy zdarzenia
{
CalendarApp.createEvent(threads[i].getFirstMessageSubject(),
new Date(now.getTime()+60000),
new Date(now.getTime()+60000)).setDescription(’this-is-sms_notification-mark’);
//this-is-sms_notification-mark – etykieta utworzonego zdarzenia, dzięki której można będzie je znaleźć podczas kasowania
}
GmailApp.getUserLabelByName(’SMS’).removeFromThreads(threads); //usuwanie etykiety „SMS”
Utilities.sleep(300000);
var TodaysEvents = CalendarApp.getDefaultCalendar().getEventsForDay(now);
for (i in TodaysEvents) // wyszukiwanie według zdarzenia i kasowanie po wysłaniu
{
if (TodaysEvents[i].getDescription()==’this-is-sms_notification-mark’)
TodaysEvents[i].deleteEvent();
}
}
u mnie działa w większości przypadków;) co jakiś czas dostaję „failure notification”. Może to dlatego, że nie wiem co to znaczy „usuwamy notyfikację w oknie edytora wyzwalaczy”. Tzn. muszę usunąć wyzwalacz, który utworzyłam?
Człowieku, albo naucz się programować, albo tłumaczyć te swoje wypociny.
Ludzie chcą z tego skorzystać i nie mogą, bo wyskakują błędy jak tu kolega napisał bo w programie jest inna nazwa i użytkownik inaczej to uzupełnił u siebie. Debagowanie też nic nie, bo pokazuje całą linijkę, a nie konkretny błąd.
Wytłumacz to krok po kroku po można orła wywinąć.
Ten skrypt jest napisany dla takich co mają o tym pojęcie, ale samodzielnie nie napiszą takiego skryptu. Oni będą wiedzieli co poprawić.
Mam co chwilę błąd w innej linijce i nie wiem co mam zmienić.
25 lat temu programowałem w Turbo Pascalu i to mi nic nie daje.
Albo się chce pomóc innym, albo popisać co to ja nie umiem.
Wiesz do czego się taka pomoc nadaje.
nara
Witam, przy tworzeniu skryptu wyskakuje mi ”
Brak znaku ] za listą elementów. (wiersz 2)”. U mnie wiersz nr 2 to: [stextbox id=”grey” caption=”Skrypt”], bo zaczalem pisac od drugiej linijki.
Wie ktoś jak to zmienić, żeby było dobrze? Przepisałem skrypt nr2
Kolego usun 1 i ostatnią linike kodu
I działa :)
a jak usunąć działanie skryptu? usunąłem plik z dysku Google, a wciąż w ustawieniach kalendarza wyświetla mi się kalendarz „email”, co nowa wiadomość na skrzynce to nowy kalendarz „email” , co robić?
Pousuwałeś etykiety i kalendarz pod powiadomienia? No właśnie ;)
A mi to nie działa, poprawiłem błędy w apostrofach, ale i tak mi jakies głupie błedy w 10 wierszu wyskakuja. Nie działa.
Ja od jakiegoś czasu włączone mam powiadomienia za pomocą tej metody: https://developers.google.com/apps-script/articles/gmail_filter_sms
Działa bardzo dobrze.
Następny cudak. Wszyscy znają angielski, tak ? Dogaduję się po angielsku, ale o pierdołach. Tutaj trzeba znać angielski dobrze.
Może Chrome coś pomoże.
a mi przyszło takie powiadomienie na maila:
ReferenceError: „now” is not defined. (line 16)
i nie bangla :D
Fajna sprawa.
Próbował ktoś już?Mi podczas uruchamiania skryptu wyskakuje błąd:
Illegal character. (wiersz 3)
i zaznaczona jest linia:
var threads = GmailApp.getUserLabelByName(‘powiadomienia-sms’).getThreads(); //zmienna przechowujące kolekcję łańcuszków z naszą etykietą SMS
Mam etykietę 'powiadomienia-sms’ w gmailu…
Testowałem w „czystym” gmail’u oraz w apps google, rezultat ten sam.
Może ktoś ma jakieś sugestie?
Odpowiedź masz w swoim komentarzu ;) Skrypt zakłada, że etykieta nazywa się „SMS”. Albo zmień nazwę etykietę, albo popraw odpowiednio wklejony skrypt (kod) ;)
Świadomie zmieniłem nazwę zakładki (bo taką już miałem w gmailu) w dwóch miejscach w kodzie, więc myślę, że nazwa zakadki nie powinna mięć wpływu na działanie kodu.
Jednak probowałem też z nazwą zakładki SMS, tak jak jest w pierwotnym kodzie, (skopiowałem raz jeszcze), ale efekt jest taki sam:
Illegal character. (wiersz 3)
:(
Może to kwestia błędnego przeklejenia skryptu bezpośrednio ze strony?
Mam na myśli zamianę znaków (apostrof przy cudzysłowiu) ’ i ` (nad tyldą) chociażby w (’SMS’).
W całym skrypcie 3 czy 4 razy trzeba to podmienić. Zmianę zauważysz po zmianie koloru w pisanym skrypcie.
np.
var threads = GmailApp.getUserLabelByName(‘SMS’).getThreads(); //zmienna przechowujące kolekcję łańcuszków z naszą etykietą SMS
zmienić na
var threads = GmailApp.getUserLabelByName(’SMS’).getThreads(); //zmienna przechowujące kolekcję łańcuszków z naszą etykietą SMS
Dzięki Mateusz, faktycznie to był problem apostrofów i cudzysłowów. Pozmieniałem i skrypt ruszył. Teraz czekam na pierwszego maila i powiadomienie sms!
Jak zadziała to będzie super sprawa! :)