5 listopada 2014

Profil: Głosowe wysyłanie wiadomości SMS

Dziś przedstawię kolejny profil, w którym główne skrzypce odgrywa komunikacja głosowa z urządzeniem. Dokładnie chodzi o podyktowanie i wysłanie wiadomości SMS tylko za pomocą głosu.
Profil uruchamia się następującymi komendami głosowymi:

  • wyślij wiadomość do Jan Kowalski
  • wyślij sms do Jan Kowalski
  • wyślij smsa do Jan Kowalski
  • wiadomość do Jan Kowalski
  • sms do Jan Kowalski
przy założeniu, że wysłać ma wiadomość do kontaktu Jan Kowalski.
Po uruchomieniu profil sprawdza czy w kontaktach znajduje się kontakt o podanej nazwie oraz czy kontakt ten ma wpisany numer telefonu komórkowego następnie prosi użytkownika o podyktowanie treści wiadomości i jeśli użytkownik zatwierdzi jej poprawność wysyła ją do odbiorcy. W przypadku braku zatwierdzenia poprawności treści wiadomości profil proponuje ponowne jej podyktowanie.

Wymagania

  • wtyczka AutoVoice w wersji płatnej
  • wtyczka AutoContacts w wersji płatnej
  • generator głosu Text-To-Speech, przykładowo IVONA lub Google TTS
  • do poprawnego działania profilu niezbędny jest porządek w książce adresowej tzn. numery telefonów komórkowych muszą być opisane jako komórka

Opis wykonania

Profil uruchamiany jest za pomocą kontekstu AutoVoice Recognized z zaznaczoną opcją Event Behavior, Use Regex i filtrem komendy ustawionym na (?:wyślij )?(?:wiadomość|sms[a]?) do (?<contact>.*).

W tym miejscu spróbuję rozszyfrować ten zapis. Jest to wyrażenie regularne, które pozwala wywołać uruchomienie profilu kilkoma komendami głosowymi według powyższego schematu.
Wyrażenie (?:wyślij )? oznacza, że w komendzie może ale nie musi pojawić się słowo wyślij ze spacją po nim. Ostatni znak zapytania gwarantuje to, że słowo wyślij nie jest obligatoryjne. Dzięki temu profil można uruchomić komendą wyślij wiadomość do Jan Kowalski ale również wiadomość do Jan Kowalski.
Zestaw znaków (?: ) tworzy grupę, która w tym przypadku ma tylko jeden element czyli wyślij .
Następna część wyrażenia regularnego (?:wiadomość|sms[a]?) tworzy kolejną grupę, która ma dwa elementy oddzielone znakiem |. Zapis sms[a]? oznacza słowo sms oraz jeden znak a, który może ale nie musi wystąpić. Dzięki temu profil zostanie uruchomiony komendą wyślij sms do Jan Kowalski ale także wyślij smsa do Jan Kowalski.
W końcu wyrażenie (?<contact>.*) tworzy parametr, który zostanie przekazany do Taskera w postaci zmiennej %contact czyli w tym przypadku w tej zmiennej znajdzie się wartość Jan Kowalski.
Task zadania zaczyna się od akcji AutoContacts ze zmienną %contact wpisaną w pole Contact Name or Nickname. Dzięki temu wtyczka wyszukuje w kontaktach przykładowego Jana Kowalskiego i wypełnia zmienne danymi jego kontaktu.
Następnie sprawdzana jest zmienna %acnumber, która powinna otrzymać wartość pierwszego numeru telefonu kontaktu. Jeśli nie ma nadanej wartości oznacza task powiadamia głosowo użytkownika o nieznalezieniu kontaktu i zatrzymuje dalsze akcje.
Kolejnym krokiem jest ustalenie, który numer telefonu jest numerem komórkowym. Jeśli numer komórkowy nie zostanie odnaleziony generowana jest głosowa informacja o błędzie, a task zostaje zatrzymany.

Następnie task głosowo prosi o podyktowanie treści wiadomości i za pomocą akcji AutoVoice Recognize rejestruje co powiedział użytkownik. Kolejnym krokiem jest głosowe odczytanie podyktowanej treści i pytanie czy treść jest poprawna. Jeśli użytkownik potwierdzi poprawność, wiadomość jest wysyłana za pomocą akcji Send SMS, w której w polu Number należy podać zmienną %komórka, a w polu Message %sms. Jeśli użytkownik nie potwierdzi poprawności smsa, task proponuje ponowne podyktowanie wiadomości i wraca do prośby o podyktowanie jej treści.

Rozpisany profil

Profile: Wyślij SMS (193)

State: AutoVoice Recognized [ Configuration:Event Behaviour: true
Command: "(?:wyślij )?(?:wiadomość|sms[a]?) do (?<contact>.+) (regex)" ]
Enter: Anon (200)
A1: AutoContacts [ Configuration:Contact Name or Nickname: %contact Package:com.joaomgcd.autocontacts Name:AutoContacts Timeout (Seconds):1000 Continue Task After Error:On ]
A2: If [ %acnumber !Set ]
A3: Say [ Text:Nie znaleziono kontaktu %contact Engine:Voice:default:default Stream:3 Pitch:5 Speed:5 Respect Audio Focus:Off Network:Off Continue Task Immediately:Off ]
A4: Stop [ With Error:Off Task: ]
A5: End If
A6: Variable Split [ Name:%acallnumbers1 Splitter:, Delete Base:Off ]
A7: Variable Split [ Name:%acallnumbertypes1 Splitter:, Delete Base:Off ]
A8: Variable Set [ Name:%index To:%acallnumbertypes1(#?Komórka) Do Maths:Off Append:Off ]
A9: Variable Split [ Name:%index Splitter:, Delete Base:Off ] If [ %index !~ 0 ]
A10: Variable Set [ Name:%komórka To:%acallnumbers1(%index1) Do Maths:Off Append:Off ] If [ %index !~ 0 ]
A11: If [ %komórka !Set ]
A12: Say [ Text:Nie znaleziono numeru komórkowego kontaktu %acname Engine:Voice:default:default Stream:3 Pitch:5 Speed:5 Respect Audio Focus:Off Network:Off Continue Task Immediately:Off ]
A13: Stop [ With Error:Off Task: ]
A14: End If
<podyktuj>
A15: Say [ Text:Podyktuj wiadomość po sygnale. Engine:Voice:default:default Stream:3 Pitch:5 Speed:5 Respect Audio Focus:Off Network:Off Continue Task Immediately:Off ]
A16: Variable Clear [ Name:%avcomm Pattern Matching:Off ]
A17: AutoVoice Recognize [ Configuration:
Voice command without headset
Command: "all" Package:com.joaomgcd.autovoice Name:AutoVoice Recognize Timeout (Seconds):120 ]
A18: Goto [ Type:Action Label Number:1 Label:podyktuj ] If [ %avcomm !Set ]
A19: Variable Set [ Name:%sms To:%avcomm Do Maths:Off Append:Off ]
A20: Say [ Text:Czy chcesz wysłać wiadomość do %acname o treści: %sms? Engine:Voice:default:default Stream:3 Pitch:5 Speed:5 Respect Audio Focus:Off Network:Off Continue Task Immediately:Off ]
A21: AutoVoice Recognize [ Configuration:
Voice command without headset
Command: "all" Package:com.joaomgcd.autovoice Name:AutoVoice Recognize Timeout (Seconds):120 ]
A22: If [ %avcomm ~ tak ]
A23: Send SMS [ Number:%komórka Message:%sms Store In Messaging App:On ]
A24: Say [ Text:Wiadomość wysłana. Engine:Voice:default:default Stream:3 Pitch:5 Speed:5 Respect Audio Focus:Off Network:Off Continue Task Immediately:Off ]
A25: Else
A26: Say [ Text:Czy chcesz poprawić wiadomość? Engine:Voice:default:default Stream:3 Pitch:5 Speed:5 Respect Audio Focus:Off Network:Off Continue Task Immediately:Off ]
A27: AutoVoice Recognize [ Configuration:
Voice command without headset
Command: "all" Package:com.joaomgcd.autovoice Name:AutoVoice Recognize Timeout (Seconds):120 ]
A28: Goto [ Type:Action Label Number:9 Label:podyktuj ] If [ %avcomm ~ tak ]
A29: End If

Pobieranie profilu

Profil Głosowe wysyłanie wiadomości sms [Tasker 4.5u1]