NetSendo v2.7.2: naprawione kampanie SMS i poprawki bezpieczeństwa
Wyobraź sobie taką sytuację: piszesz SMS na wyprzedaż błyskawiczną, dobierasz idealną porę, klikasz Wyślij teraz i widzisz, że kampania ma status „wysłana”. Tymczasem do klientów nie dociera ani jedna wiadomość. Użytkownicy NetSendo, którzy wysyłali SMS-y z panelu, trafiali na ten problem za każdym razem, a na ekranie nic tego nie zdradzało.
NetSendo v2.7.2 to naprawia. Wydanie przywraca też działanie testowych SMS-ów, narzędzia MCP send_sms dla asystentów AI i wtyczki WordPress. Do tego zamyka trzy luki, przez które na współdzielonej instancji dane lub konta wysyłkowe jednego użytkownika mogły trafić do konta innego.
POST /api/v1/sms/send przyjmuje content lub message, a wtyczka WordPress 1.1.2 znowu dopisuje osoby do list. Zapasowe skrzynki i dostawcy SMS, tagi w API oraz webhooki zakupów nie wychodzą już poza konto, do którego należą. Aktualizacja: docker compose pull && docker compose up -d, bez migracji.
🚀 Co nowego w v2.7.2
SMS-y, które naprawdę wychodzą
Kampanie z panelu zapisują się tak samo jak kampanie email: ze statusem scheduled i poprawnym scheduled_at.
Uczciwy testowy SMS
Jeśli dostawca odrzuci testowy SMS, zobaczysz jego błąd zamiast fałszywego komunikatu „Test SMS sent”.
Działające MCP send_sms
Asystenci AI wysyłają SMS-y przez API bez błędu 422.
Izolacja kont
Skrzynek, dostawców SMS, tagów i kontaktów nie da się już używać między kontami.
Przebudowane planowanie kampanii SMS
Przed tym wydaniem działały trzy osobne błędy. To jak trzy drzwi, z których każde było zamknięte.
- Wyślij teraz zapisywało kampanię ze statusem
sent. Cron SMS obsługuje tylko kampaniescheduled, więc nic nie wychodziło. - Zaplanuj zapisywało wybraną datę w
send_at, a cron czytascheduled_at. Zaplanowany SMS wychodził przy najbliższym uruchomieniu crona, a nie o wybranej godzinie. - SMS-y kolejkowe (autoresponder) zapisane jako aktywne zostawały ze statusem
senti nigdy się nie uruchamiały.
Teraz „Wyślij teraz” zapisuje kampanię jako scheduled z scheduled_at ustawionym na bieżący moment. „Zaplanuj” przyjmuje godzinę w Twojej strefie czasowej i zapisuje ją w UTC. SMS-y kolejkowe zapisują się jako scheduled i aktywne. Formularz edycji pokazuje zaplanowaną godzinę w Twojej strefie czasowej.
Testowy SMS i API SMS
Przycisk „Wyślij testowy SMS” przekazywał dostawcom SMS parametr message:, a oni oczekują content:. Ta pomyłka powodowała błąd PHP, którego blok catch (\Exception) nie przechwytywał. Teraz jest to naprawione.
POST /api/v1/sms/send miał odwrotny problem: klient MCP wysyłał content, a endpoint wymagał message, więc zwracał 422. Teraz endpoint przyjmuje obie nazwy pola, a samo subscriber_id wystarcza:
curl -X POST https://your-netsendo.example.com/api/v1/sms/send \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"subscriber_id": 42, "message": "Twoje zamówienie zostało wysłane!"}'
Komunikaty błędów też są czytelniejsze. Subskrybent z innego konta daje odpowiedź 404. Numer, którego nie ma żaden kontakt, daje 422 zamiast 500.
Wtyczka WordPress 1.1.2
Wersja 1.1.2 naprawia dwa problemy:
- Wtyczka wysyłała
list_id, a API wymagacontact_list_id. Każdy zapis i każde odblokowanie treści kończyło się błędem. - Blokady „tylko dla subskrybentów” traktowały pojedynczego subskrybenta zwracanego przez API jak listę, więc nikogo nie rozpoznawały.
Wersję 1.1.2 pobierzesz w Marketplace → WordPress → Download Plugin. Strony z już zainstalowaną wtyczką dostaną propozycję aktualizacji.
Poprawki bezpieczeństwa
Gdy domyślnej skrzynki lub dostawcy SMS nie dało się użyć, NetSendo szukało innej aktywnej pozycji takim surowym warunkiem. Brakowało w nim nawiasów:
// Przed: OR wychodził poza warunek użytkownika
->whereRaw('daily_limit IS NULL OR sent_today < daily_limit')
// Po: warunek jest zgrupowany
->whereRaw('(daily_limit IS NULL OR sent_today < daily_limit)')
Przez to kampania mogła wyjść przez skrzynkę lub konto SMS innego użytkownika. Dwa kolejne endpointy API zbyt luźno sprawdzały, do kogo należą dane:
POST /api/v1/subscribersprzyjmował ID tagów z innych kont. Tagi muszą teraz należeć do konta klucza API, tak jak wcześniej listy.POST /api/webhooks/purchasemógł dopasować email kontaktu w dowolnym koncie. Teraz szuka tylko w koncie klucza API.
⚠️ Ważne: Jeśli z Twojej instancji NetSendo korzysta kilku użytkowników lub klientów, zainstaluj tę aktualizację jak najszybciej. Błąd w wyborze zapasowej skrzynki mógł wysłać kampanię jednego klienta przez skrzynkę lub konto SMS innego.
💼 Korzyści i przypadki użycia
E-commerce: promocje SMS na czas
Możesz zaplanować SMS o weekendowej wyprzedaży na sobotę 9:00 czasu lokalnego i wyjdzie on o 9:00, a nie przy najbliższym uruchomieniu crona. SMS-y z autorespondera dla porzuconych koszyków i wiadomości po zakupie działają teraz tak, jak powinny.
SaaS: wiadomości z pomocą AI
Twój zespół wsparcia może poprosić asystenta AI połączonego przez MCP: „napisz SMS-a do subskrybenta 42, że jutro kończy mu się okres próbny”, a wiadomość zostanie dostarczona. Samo subscriber_id wystarcza, więc asystent nie musi najpierw szukać numeru telefonu.
Agencje: bezpieczne środowiska wielu klientów
Jeśli prowadzisz jedną instancję dla wielu klientów, kampanie każdego z nich korzystają teraz tylko z jego własnych skrzynek i dostawców SMS. Tagi i webhooki zakupów są ograniczone do konta, do którego należą. Twoje dane pozostają rozdzielone na sprzęcie, który kontrolujesz.
🛠️ Aktualizacja krok po kroku
- Pobierz obraz i uruchom ponownie
Uruchom poniższe polecenia. Pliki konfiguracyjne się nie zmieniają, a od 2.7.1 nie ma żadnych migracji.
docker compose pull && docker compose up -d - Ponownie zakolejkuj zablokowane kampanie SMS
Kampanie SMS zapisane ze statusem
sentprzed tym wydaniem nie zostaną wysłane automatycznie. Otwórz każdą z nich i zapisz ponownie albo kliknij jeszcze raz Wyślij. - Sprawdź SMS-y kolejkowe
Zapisz ponownie SMS-y autorespondera, żeby miały status
scheduledi były aktywne. - Wyślij testowy SMS
Wyślij test na własny numer. Jeśli dostawca go odrzuci, zobaczysz teraz prawdziwy błąd, np. problem z nadawcą lub brak środków.
- Zaktualizuj wtyczkę WordPress
Zaakceptuj aktualizację do 1.1.2 w WordPressie albo pobierz ją z Marketplace → WordPress → Download Plugin. Potem przetestuj jeden formularz zapisu i jedną blokadę treści.
- Przejrzyj integracje API
Jeśli Twoje skrypty wysyłają ID tagów z innych kont albo polegają na dopasowywaniu zakupów między kontami, takie wywołania teraz zakończą się błędem lub nie znajdą kontaktu. Zmień je tak, żeby używały ID z konta danego klucza API.
ℹ️ Uwaga: Zanim ponownie zakolejkujesz stare kampanie, sprawdź, czy ich treść jest nadal aktualna. Promocję, która już wygasła, lepiej poprawić albo usunąć, niż wysłać.
🎯 Wskazówki eksperta
Godzinę wysyłki podajesz w swojej strefie czasowej, a system zapisuje ją w UTC. Przed planowaniem sprawdź, czy strefa w profilu jest poprawna.
Sprawdzanie własności opiera się teraz na koncie klucza API. Daj każdemu klientowi lub integracji osobny klucz, żeby dostęp był wyraźnie rozdzielony.
Mechanizm zapasowy wybiera inną aktywną skrzynkę lub dostawcę poniżej dziennego limitu. Ustaw realistyczne limity, żeby ruch rozkładał się tak, jak tego oczekujesz.
Traktuj 404 z API SMS jako „to nie Twój subskrybent”, a 422 jako „nieznany numer”. Zapisuj takie przypadki w logach do przejrzenia, zamiast ponawiać próby.
✅ Podsumowanie
v2.7.2 naprawia SMS-y w kampaniach z panelu, wysyłkach testowych, API i narzędziu MCP. Przywraca zapisy i blokady treści we wtyczce WordPress oraz zaostrza izolację kont na współdzielonych instancjach. Wydanie zawiera nowe testy: SmsCampaignSchedulingTest, SmsSendApiTest, ProviderFallbackOwnerScopeTest i ApiAccountScopeTest.
Zaktualizuj do v2.7.2 już dziś
Pobierz nowy obraz, ponownie zakolejkuj zablokowane kampanie SMS i gotowe. Przeczytaj dokumentację albo przejrzyj integracje. Jeśli NetSendo oszczędza Ci czas, zostaw projektowi ⭐ na GitHubie.



