Pulpit panelu SMS z powitaniem Dzień dobry, przyciskami Wyślij SMS, Rozmowy i Kontakty, kafelkami z dzisiejszym ruchem i stanem bramki: działa, sygnał 70 procent, karta SIM1, sieć zarejestrowana

Programowanie

Panel SMS: powiadomienia wysyłane z przeglądarki

Nakładka WWW na moją bramkę SMS: wysyłka do numerów, kontaktów i grup, wysyłka zaplanowana, rozmowy, wspólna skrzynka i zapisy na powiadomienia z potwierdzeniem kodem SMS. Jeden kod działa w dwóch instancjach, każda z własną kartą SIM i wyglądem.

5.11.2026

Moja bramka SMS ma API dla systemów, ale ludzie potrzebują czegoś prostszego. Chcą wpisać numer albo wybrać grupę, napisać treść i zobaczyć, czy wiadomość doszła.

Tak powstał panel SMS, aplikacja WWW nałożona na bramkę. Nie rozmawia z modemem bezpośrednio, tylko z API bramki. Klucz API zna wyłącznie serwer panelu, a sama bramka jest dostępna tylko z sieci lokalnej.

Pulpit panelu SMS z powitaniem Dzień dobry, przyciskami Wyślij SMS, Rozmowy i Kontakty, kafelkami z dzisiejszym ruchem i stanem bramki: działa, sygnał 70 procent, karta SIM1, sieć zarejestrowana(powiększ)
Pulpit panelu: ruch z dzisiaj i stan bramki

Jeden kod, dwie instancje

Panel działa w dwóch miejscach: jako moja prywatna instancja i jako instancja instytucji, z jej znakiem i kolorami. Każda jest osobnym klientem bramki, z własną kartą SIM, kluczem API i webhookiem.

Nazwę, właściciela, wygląd startowy i połączenie z bramką opisuje plik konfiguracyjny instancji. Nowa wersja to tag w repozytorium, a obie instancje pobierają go same.

Wysyłka

Formularz wysyłki łączy kilka źródeł odbiorców i od razu pokazuje koszt w SMS-ach:

  • numery wpisane ręcznie, kontakty i całe grupy w dowolnym połączeniu, bez powtórzeń,
  • licznik znaków i części liczony tak samo jak w bramce, najwyżej 10 części,
  • wysyłka od razu albo w wybranym terminie, z możliwością anulowania,
  • postęp na żywo: czeka, wysłano, doręczono, nieudane,
  • ponowienie wysyłki tylko do odbiorców, do których się nie udało.

Polskie litery skracają SMS ze 160 do 70 znaków. Panel ostrzega o tym pod polem treści, więc łatwo zdecydować, czy warto pisać bez ogonków.

Formularz Wyślij SMS z polami na numery telefonów i treść, licznikiem znaków i części, nazwą wysyłki, wyborem Od razu albo W wybranym terminie oraz podsumowaniem liczby odbiorców i SMS-ów(powiększ)
Formularz wysyłki z licznikiem części i wyborem terminu

Rozmowy i wspólna skrzynka

Instancja ma jeden numer, więc skrzynka i rozmowy są wspólne dla wszystkich użytkowników. Archiwum i kosz każdy porządkuje dla siebie. Rozmowy grupują wiadomości według numeru i pozwalają odpowiedzieć z wątku.

Statusy wiadomości przychodzą z bramki podpisanym webhookiem. Gdy webhooka nie ma, panel co 30 sekund sprawdza historię bramki. Status może tylko rosnąć, więc spóźnione zdarzenie nie cofnie „doręczono” do „wysłano”.

Skrzynka z zakładkami Odebrane, Wysłane, Zaplanowane, Archiwum i Kosz, wyszukiwarką oraz przyciskami Do archiwum i Do kosza, na liście jedna wysłana wiadomość z rozmytym numerem(powiększ)
Skrzynka z folderami i wyszukiwaniem

Książka adresowa

Kontakty i grupy mogą być prywatne albo wspólne. Wspólne widzą wszyscy, a zmieniać je może autor albo administrator. Import i eksport CSV obsługuje średnik, bo tak zapisuje Excel, i pomija numery, które już są w książce.

Strona Kontakty z wyszukiwarką, przyciskami Nowy kontakt i Eksport CSV, formularzem nowego kontaktu z polem Wspólny oraz importem z pliku CSV(powiększ)
Kontakty z formularzem i importem CSV

Zapisy na powiadomienia

Grupę można otworzyć na publiczne zapisy. Wtedy ma własną stronę, okienko do osadzenia na innej stronie WWW i proste API. Tak instytucja może zbierać numery osób, które chcą dostawać powiadomienia SMS.

  • numer zawsze potwierdza kod SMS, a treść zgody jest zapisywana razem z zapisem,
  • limity na numer, adres IP i grupę chronią przed nabijaniem kosztów,
  • wypisanie odpowiedzią STOP albo na stronie wypisu, z potwierdzeniem SMS.

Bezpieczeństwo

  • hasła argon2id i sesje w Redis,
  • obowiązkowa weryfikacja dwuetapowa: aplikacja albo kod SMS, do tego kody zapasowe,
  • limit prób logowania i blokada czasowa,
  • role administratora i użytkownika,
  • dziennik zdarzeń przechowywany 12 miesięcy.

Wygląd i dostępność

Panel ma siedem zestawów wyglądu: paletę kolorów, kroje pisma i kształty. Administrator wybiera zestaw w Ustawieniach i od razu widzi podgląd w trybie jasnym i ciemnym. Tryb i wielkość tekstu każdy użytkownik ustawia sam.

Interfejs jest projektowany pod WCAG 2.2 AA. Kontrast kolorów wszystkich zestawów sprawdza skrypt przed każdym wydaniem.

Ustawienia wyglądu: lista zestawów Grafit, Las, Cegła, Atrament, Noc, Malina i zestaw instytucji, obok podgląd wybranego zestawu w trybie jasnym i ciemnym, niżej połączenie z bramką(powiększ)
Wybór zestawu wyglądu z podglądem w obu trybach

Statystyki

Statystyki pokazują wysłane wiadomości i części, skuteczność i średni czas doręczenia oraz szacunkowy koszt. Wykresy mają obok tabelę z danymi, czytelną także dla czytników ekranu. Dostępność bramki panel mierzy sam co 30 sekund.

Dobra wysyłka SMS nie kończy się na przycisku Wyślij. Ważne jest to, co dzieje się potem: czy wiadomość doszła, kto odpisał i czy ktoś chce się wypisać.

- Aleksander Kowal

Stack

  • Astro 7 z renderowaniem po stronie serwera i własnym API,
  • TypeScript, Tailwind v4, DaisyUI v5 i ikony Lucide,
  • PostgreSQL 16 i Redis 7,
  • Docker, wdrożenie z tagu w repozytorium.

Kliknij albo przewiń, żeby przybliżyć. Przeciągnij, żeby przesunąć.Stuknij dwa razy albo rozsuń palce, żeby przybliżyć.

Przydał się ten tekst?

Nowe teksty na maila

Raz na jakiś czas, gdy pojawi się nowy wpis albo projekt. Bez reklam.

Masz pomysł, pytanie albo uwagę? Napisz do mnie:Włącz JavaScript, żeby zobaczyć adres e-mail