SQL Server w logistyce

Tabela _sms w bazie danych SQL Server

Rejestr wiadomości SMS w obie strony — z identyfikatorem od operatora, liczbą prób i treścią ostatniego błędu.

sql.server.net.pl/sql/
Uśmiechnięty analityk w garniturze przy szerokim monitorze
Uśmiechnięty analityk w garniturze przy szerokim monitorze
W skrócie
  • Tabela obsługuje ruch w obie strony — kolumna TYP rozdziela wiadomości wychodzące od przychodzących.
  • Status w kolumnie ACH ma cztery stany, w tym osobny dla wiadomości oczekującej na ponowną próbę.
  • Kolumny SMS_ID i SMS_KIEDY przechowują dane od operatora — podstawa przy reklamacji niedostarczonej wiadomości.
  • Para POWIAZANIE_TYP i POWIAZANIE_REFNO wiąże wiadomość z obiektem, którego dotyczy.

Do czego służy tabela [dbo].[_sms]

SMS ma w logistyce zastosowanie, którego nie zastąpi poczta elektroniczna: dociera do kierowcy stojącego przy bramie i do magazyniera bez służbowej skrzynki. Powiadomienie o przydzielonym oknie czasowym, kod potwierdzający wjazd, monit o gotowości towaru — wszystkie one trafiają do tabeli [dbo].[_sms].

Rejestr obejmuje ruch dwukierunkowy. Wiadomości wychodzące zapisywane są przed wysłaniem i aktualizowane po odpowiedzi operatora. Przychodzące — po odebraniu, co pozwala zbudować prostą komunikację zwrotną: kierowca odpowiada na powiadomienie, a system wiąże jego odpowiedź z awizacją dzięki kolumnom powiązania.

Praktycznie najważniejsze są trzy kolumny opisujące niepowodzenia. LICZBA_BLEDOW zlicza nieudane próby, OSTATNI_BLAD przechowuje treść komunikatu od operatora, a OSTATNI_BLAD_KIEDY moment jego wystąpienia. Razem odpowiadają na pytanie, czy problem dotyczy jednego numeru, czy całej usługi — a to zupełnie różne sytuacje.

Cykl życia wiadomości SMS w systemie
Utworzenie UtworzenieZdarzenie w systemie tworzy wiersz ze statusem do wysłania
Przekazanie PrzekazanieUsługa przesyła treść operatorowi i zapisuje zwrócony identyfikator
Potwierdzenie PotwierdzenieStatus zmienia się na wysłany, zapisywany jest czas od operatora
Niepowodzenie NiepowodzenieLicznik błędów rośnie, treść komunikatu trafia do rejestru

Identyfikator nadany przez operatora jest jedynym punktem odniesienia przy reklamacji wiadomości, która nie dotarła do odbiorcy.

Budowa tabeli — wykaz kolumn

Osiemnaście kolumn opisuje treść wiadomości, jej strony, stan wysyłki oraz powiązanie z obiektem w systemie.

Wykaz kolumn tabeli
KolumnaTypWymaganaZnaczenie
Treść i strony
WIADOMOSCvarchar(1530)
tekst do 1530 znaków
takTreść sms-a, maksymalna długość 1530 bez znaków specjalnych, ze specjalnymi 670
NUMER_DOvarchar(20)
tekst do 20 znaków
takOdbiorca sms-a
NUMER_ODvarchar(20)
tekst do 20 znaków
nieNadawca sms-a
TYPvarchar(20)
tekst do 20 znaków
takTyp sms-a, WYCH - wychodzący, PRZYCH - przychodzący
Stan wysyłki
ACHvarchar(1)
tekst do 1 znaków
takOznaczenie rekordu, 1 - sms do wysłania, 2 - sms wysłany, 3 - sms do wysłania błędny, 6 - sms odebrany, X - sms usunięty
LICZBA_BLEDOWint
liczba całkowita
takLiczba nieudanych prób wysłania sms-a
OSTATNI_BLADvarchar(1000)
tekst do 1000 znaków
nieOstatni błąd podczas wysyłania sms-a
OSTATNI_BLAD_KIEDYdatetime
data i godzina
nieData ostatniego błędu wysyłania sms-a
SMS_IDvarchar(100)
tekst do 100 znaków
nieIdentyfikator sms-a podawany przez dostawcę usługi
SMS_KIEDYdatetime
data i godzina
nieData wysłania lub odebrania sms-a podawana przez dostawcę usługi
Powiązania i metryka
ID_SMSint
liczba całkowita
takIdentyfikator wiersza tabeli
REFNObigint
liczba całkowita 64-bitowa
takSystemowy numer referencyjny
POWIAZANIE_TYPvarchar(20)
tekst do 20 znaków
nieTyp obiektu powiązanego
POWIAZANIE_REFNObigint
liczba całkowita 64-bitowa
nieSystemowy numer referencyjny obiektu powiązanego
PRXvarchar(5)
tekst do 5 znaków
nieKod pozwalający podzielić zapisywane rekordy na poszczególne źródła
ROLASYSvarchar(3)
tekst do 3 znaków
nieKod roli systemowej
KIEDYdatetime
data i godzina
takData i godzina dopisania rekordu
LOGINvarchar(50)
tekst do 50 znaków
takNazwa użytkownika dodającego rekord

Kolumna WIADOMOSC mieści 1530 znaków, co odpowiada dziesięciu wiadomościom standardowym. Użycie polskich znaków diakrytycznych skraca ten limit mniej więcej o połowę, bo wymusza inne kodowanie — a każda rozpoczęta wiadomość jest osobno rozliczana przez operatora.

Indeksy i wydajność zapytań

Tabela ma zdefiniowany wyłącznie klucz główny, co przy rosnącym wolumenie wysyłek staje się ograniczeniem.

Indeksy zdefiniowane na tabeli
IndeksKolumnyRodzaj
PK__smsID_SMSklucz główny

Usługa wysyłająca pyta cyklicznie o wiadomości oczekujące, czyli filtruje po kolumnie ACH. Bez indeksu na tej kolumnie każde takie zapytanie oznacza przejrzenie całej tabeli. Przy kilkuset wiadomościach nie ma to znaczenia; przy kilkuset tysiącach warto rozważyć indeks na parze ACH i KIEDY.

Co wpływa na koszt i skuteczność wysyłki

SMS jest rozliczany za każdą rozpoczętą wiadomość, a jego skuteczność zależy od kilku rzeczy, które łatwo przeoczyć przy konfiguracji.

  • Polskie znaki podwajają koszt. Wiadomość ze znakami diakrytycznymi mieści 70 znaków zamiast 160, więc dłuższy tekst rozbija się na więcej części.
  • Nadawca alfanumeryczny wymaga zgłoszenia. Nazwa firmy zamiast numeru buduje zaufanie, ale wymaga rejestracji u operatora i wyklucza odpowiedź zwrotną.
  • Format numeru ma znaczenie. Numery bez prefiksu kierunkowego bywają odrzucane; warto ujednolicić je już w kartotece.
  • Ponawianie ma granicę. Wiadomość odrzucona z powodu błędnego numeru nie zostanie nadana za setnym razem — licznik prób powinien mieć próg.
  • Pora wysyłki wpływa na odbiór. Powiadomienie o oknie czasowym wysłane o czwartej rano zostanie zignorowane albo źle przyjęte.

Pierwszy punkt bywa źródłem nieprzyjemnych niespodzianek przy rozliczeniu. Powiadomienie o długości 150 znaków wygląda na pojedynczą wiadomość, ale jeśli zawiera polskie znaki, zostanie rozbite na trzy części — i tak też rozliczone. Przy kilku tysiącach wysyłek miesięcznie różnica przestaje być drobiazgiem, dlatego szablony powiadomień warto sprawdzić pod tym kątem przed uruchomieniem.

Jak korzystać z tabeli w praktyce

Przy korzystaniu z wysyłki SMS obowiązują następujące zasady:

  • Ujednolicaj format numerów w kartotece, z prefiksem kierunkowym — to najczęstsza przyczyna odrzuceń po stronie operatora.
  • Sprawdź długość szablonu z uwzględnieniem polskich znaków; te skracają limit pojedynczej wiadomości ze 160 do 70 znaków.
  • Ustaw próg dla kolumny LICZBA_BLEDOW, po którym system przestaje ponawiać — błędny numer nie stanie się poprawny.
  • Zachowuj identyfikator z kolumny SMS_ID; przy reklamacji u operatora jest jedynym punktem odniesienia.
  • Wypełniaj kolumny powiązania, aby dało się ustalić, którego zlecenia albo awizacji dotyczyła wiadomość.
  • Rozważ indeks na parze ACH i KIEDY, gdy liczba wiadomości przekroczy kilkadziesiąt tysięcy.

Zestawienie skuteczności wysyłki z ostatniego tygodnia w podziale na dni, wraz z najczęstszym komunikatem błędu:

SELECT  CAST(KIEDY AS date) AS DZIEN,
        COUNT(*)                                    AS WSZYSTKICH,
        SUM(CASE WHEN ACH = '2' THEN 1 ELSE 0 END)  AS WYSLANYCH,
        SUM(CASE WHEN LICZBA_BLEDOW > 0 THEN 1 ELSE 0 END) AS Z_BLEDAMI,
        MAX(LEFT(OSTATNI_BLAD, 80))                 AS PRZYKLADOWY_BLAD
FROM    dbo._sms
WHERE   TYP   = 'WYCH'
  AND   KIEDY >= DATEADD(DAY, -7, GETDATE())
GROUP BY CAST(KIEDY AS date)
ORDER BY DZIEN DESC;

Nagły wzrost kolumny z błędami w jednym dniu wskazuje zwykle na problem po stronie usługi, a nie na serię błędnych numerów w kartotece.

Wysyłka SMS jest tanim sposobem skrócenia kolejki przy bramie i ograniczenia telefonów do dyspozytora — pod warunkiem że wiadomości faktycznie docierają. Rejestr daje wszystko, czego trzeba, żeby to sprawdzić; wystarczy raz na tydzień do niego zajrzeć.

Powiązane tabele i dokumentacja

Wysyłka SMS uzupełnia pozostałe kanały powiadamiania opisane w dokumentacji:

FAQ

Najczęściej zadawane pytania o tabelę _sms

01

Ile znaków mieści jedna wiadomość?

Kolumna przechowuje do 1530 znaków, ale rozliczenie u operatora działa inaczej. Wiadomość bez polskich znaków mieści 160 znaków w jednej części, ze znakami diakrytycznymi — tylko 70. Powiadomienie o długości 150 znaków z polskimi literami zostanie więc rozbite na trzy części i tak też rozliczone.

02

Do czego służą kolumny SMS_ID i SMS_KIEDY?

Przechowują dane zwrócone przez operatora: identyfikator wiadomości w jego systemie oraz czas nadania lub odebrania. Przy reklamacji niedostarczonej wiadomości identyfikator jest jedynym punktem odniesienia — bez niego operator nie odnajdzie zgłoszenia w swoich rejestrach.

03

Jak odróżnić problem z numerem od awarii usługi?

Przez rozkład błędów w czasie i po numerach. Pojedyncze niepowodzenia rozłożone na różne numery wskazują na błędne dane w kartotece. Nagły wzrost liczby błędów w jednym dniu, obejmujący numery wcześniej działające, oznacza problem po stronie usługi — najczęściej wyczerpany pakiet albo wygasłą autoryzację.

04

Czy system obsługuje wiadomości przychodzące?

Tak — rozróżnia je kolumna TYP o wartościach WYCH i PRZYCH. Wiadomość przychodząca może zostać powiązana z obiektem w systemie przez kolumny POWIAZANIE_TYP i POWIAZANIE_REFNO, co pozwala zbudować prostą komunikację zwrotną, na przykład potwierdzenie przyjazdu przez kierowcę.

Słownik pojęć

Słownik pojęć

Pojęcia związane z powiadamianiem kierowców i pracowników terenowych.

PPowiadomienia SMS i e-mail
Automatyczne komunikaty wysyłane po zajściu zdarzenia w systemie — potwierdzeniu awizacji, zmianie statusu reklamacji czy zbliżającym się terminie przeglądu.
AAwizacja
Wcześniejsze zgłoszenie przyjazdu pojazdu do magazynu wraz z rezerwacją okna czasowego przy rampie. Ogranicza kolejki i pozwala rozłożyć pracę w ciągu dnia.
OOkno czasowe
Zarezerwowany przedział czasu, w którym konkretny pojazd ma zostać obsłużony przy wskazanej rampie. Podstawowy mechanizm planowania pracy w systemie YMS.
MMicrosoft SQL Server
Serwer relacyjnej bazy danych, na którym pracują aplikacje SoftwareStudio. Odpowiada za spójność danych, uprawnienia dostępu, kopie zapasowe i wydajność zapytań.
IIndeks bazodanowy
Struktura przyspieszająca wyszukiwanie wierszy w tabeli. Dobrze dobrane indeksy skracają czas zapytań, ale spowalniają zapisy i zajmują miejsce na dysku.
AAPI
Interfejs programistyczny, przez który dwa systemy wymieniają dane w czasie rzeczywistym. Pozwala zintegrować oprogramowanie magazynowe z ERP, sklepem lub przewoźnikiem.
TTelematyka GPS
Rejestracja pozycji i parametrów pracy pojazdu przekazywana do systemu transportowego. Pozwala potwierdzić realizację kursu i rozliczyć czas pracy kierowcy.
YYMS
Yard Management System — system zarządzania placem i rampami. Porządkuje kolejność obsługi pojazdów, przydziela okna czasowe i mierzy rzeczywisty czas postoju.

Zobacz to w praktyce

Sprawdź, jak systemy SoftwareStudio oparte na MS SQL Server wspierają ten obszar Twojej firmy.