
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.
(powiększ)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.
(powiększ)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”.
(powiększ)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.
(powiększ)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.
(powiększ)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.
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
