NetSendo
Platform Updates

NetSendo v2.7.2: naprawione kampanie SMS i poprawki bezpieczeństwa

NetSendo Team6 min czytania

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.

TL;DR: Od v2.7.2 kampanie SMS z panelu są naprawdę wysyłane: od razu albo o godzinie zaplanowanej w Twojej strefie czasowej. Testowy SMS pokazuje teraz prawdziwy komunikat błędu dostawcy. 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 kampanie scheduled, więc nic nie wychodziło.
  • Zaplanuj zapisywało wybraną datę w send_at, a cron czyta scheduled_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 sent i 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 wymaga contact_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/subscribers przyjmował ID tagów z innych kont. Tagi muszą teraz należeć do konta klucza API, tak jak wcześniej listy.
  • POST /api/webhooks/purchase mó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

  1. 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
  2. Ponownie zakolejkuj zablokowane kampanie SMS

    Kampanie SMS zapisane ze statusem sent przed tym wydaniem nie zostaną wysłane automatycznie. Otwórz każdą z nich i zapisz ponownie albo kliknij jeszcze raz Wyślij.

  3. Sprawdź SMS-y kolejkowe

    Zapisz ponownie SMS-y autorespondera, żeby miały status scheduled i były aktywne.

  4. 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.

  5. 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.

  6. 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

1
Ustaw strefę czasową w profilu

Godzinę wysyłki podajesz w swojej strefie czasowej, a system zapisuje ją w UTC. Przed planowaniem sprawdź, czy strefa w profilu jest poprawna.

2
Jeden klucz API na konto

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.

3
Ustawiaj dzienne limity świadomie

Mechanizm zapasowy wybiera inną aktywną skrzynkę lub dostawcę poniżej dziennego limitu. Ustaw realistyczne limity, żeby ruch rozkładał się tak, jak tego oczekujesz.

4
Obsłuż 404 i 422 w kodzie

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.

#sms#security#api#wordpress#mcp#bug-fixes#multi-tenant
Udostępnij