Elo moto.
Od jakiegoś czasu po głowie chodził mi pomysł stworzenia skryptu/profilu do programu Tasker, który będzie odpowiadał na połączenia przychodzące kiedy mam aktywne spotkanie ze statusem zajęty.
Od kilkunastu dni po malutkim kawałeczku rozpisywałem sobie algorytm działania żeby kilka dni temu przelać to na profil taskera.
Zanim go wdrożę muszę sprawdzić czy nie ma błędów - badzo bym nie chciał aby program wysłał np. 1000 smsów :D
Założenie:
Profil aktywuje się w momencie kiedy poniższe konteksty zostaną spełnione:
- Połączenie przychodzące;
- Aktywny profil Spotkanie;
- Numer osoby dzwoniącej znajduje się w książce adresowej.
Skrypt wygląda tak:
Profile: Autoresponder (18)
State: Call [ Type:Incoming Number:* ]
//Kontekst przychodzące połączenie
State: Profile Active [ Name:Spotkanie ]
//Kontekst aktywny profil Spotkanie
State: Variable Value [ Name:%CNAME Op:Maths: Isn't Equal To Value:%CNUM ]
//Kontekst sprawdzający czy numer jest w książce. Normalnie nazwa numeru jest numerem jeżeli nie mamy jej w książce adresowej.
Jeżeli weźmiemy to pod uwagę możemy w łatwy sposób wykryć czy osoba, która do nas dzwoni jest w naszej książce adresowej.
Enter: Auto odpowiedź (20)
A1: Variable Set [ Name:%JEST To:0 Do Maths:Off Append:Off ]
//Zmienna %JEST ustawiana jest na wartość 0. Zmienna ta mówi mi czy osoba dostała już powiadomienie w tej sesji - w tym spotkaniu
A2: Variable Set [ Name:%NUMER To:%CNUM Do Maths:Off Append:Off ]
//Kopiowanie numeru osoby dzwoniącej do zmiennej %NUMER
A3: Variable Section [ Name:%NUMER From:1 Length:2 Adapt To Fit:Off Store Result In:%NUMER ]
//Zmienna %NUMER zostaje skrócona do pierwszych cyfr. Po co? Po pierwszych cyfrach wykrywam czy to numer stacjonarny, czy komórkowy :)
A4: For [ Variable:%KIERUNKOWY Items:1:12 ]
//W pętli FOR sprawdzam czy nasz numer jest numerem kierunkowym
A5: Variable Set [ Name:%index To:%index + 1 Do Maths:On Append:Off ]
A6: If [ %KIERUNKOWY(%index) = %NUMER ]
//Zmienna %KIERUNKOWY jest pseudotablicą, która przechowuje możliwe "prefixy" numerów komórkowych
A7: For [ Variable:%TEL Items:%TEL(#) ]
//Jeżeli jest to sprawdzam, czy już wysłaliśmy mu SMSa.
A8: Variable Set [ Name:%IND To:%IND + 1 Do Maths:Off Append:Off ]
A9: If [ %TEL(%IND) = %CNUM ]
A10: Variable Set [ Name:%JEST To:1 Do Maths:Off Append:Off ]
A11: End If
A12: End For
A13: If [ %JEST = 0 ]
//Jeżeli nie dostał to wysyłam SMSa i dodaję jego numer do pseudotablicy %TEL.
A14: Send SMS [ Number:%CNUM Message:Nie moge teraz rozmawiac. Bede osiagalny dopiero po godzinie: [
Tutaj mam zamiar wstawić godzinę zakończenia się wydarzenia, ewentualnie dodam sobie przypomnienie do kalendarza, które się wykona 5 minut po zakończeniu spotkania - przypomnienie o oddzwonieniu] Store In Messaging App:On ]
A15: Array Push [ Name:%TEL Position:1 Value:%CNUM Fill Spaces:Off ]
A16: End If
A17: End If
A18: End For
W momencie zakończenia się wydarzenia Spotkanie zostaje wyczyszczona zmienna %TEL.
Skrypt posiada takie zabezpieczenia jak:
- Odpisywanie tylko osobom z książki adresowej;
- Wysłanie tylko jednego SMSa do tej samej osoby w ciągu jednego wydarzenia;
- Wysłanie SMSa tylko na numer komórkowy.
Czy ten skrypt jest poprawny? Tak i logika, jak i implementacja?