Twoje żądanie wysyłki może się powieść, zanim telefon odbiorcy cokolwiek otrzyma. Późniejszy raport operatora dostarcza kolejny wynik, który Twoja aplikacja musi obsłużyć niezależnie od akceptacji żądania.
Co mówi mi potwierdzenie dostarczenia?
Potwierdzenie raportuje sukces dostarczenia lub problem z dostarczeniem z perspektywy sieci.
Wynik dostarczenia SMS może nadejść, gdy telefon leży nieprzeczytany w szufladzie. Nie dowodzi, że odbiorca zobaczył tożsamość nadawcy. Nie potwierdza też, że przeczytał całą wiadomość.
Sieć wysyła potwierdzenia niezależnie od odpowiedzi na żądanie wysyłki. Może też pomijać niektóre raporty. Dokumentacja potwierdzeń SMPP opisuje te mechanizmy dla połączeń z operatorem.
Które potwierdzenia od operatora udostępnia Bird?
Otrzymujesz publiczne zdarzenia dla rozpoznanych wyników dostarczenia. Zbuforowane potwierdzenia pozostają wewnętrzne.
Zbuforowane potwierdzenie oznacza, że operator wstrzymuje wiadomość. Bird rejestruje je w wewnętrznym logu zdarzeń, nie zmieniając publicznego statusu wiadomości. Nie zobaczysz aktualizacji na publicznej osi czasu ani w webhookach.
| Status potwierdzenia od operatora | Zdarzenie Bird |
|---|---|
delivered | sms.delivered |
expired | sms.expired |
rejected | sms.rejected |
delivery_failed z odwracalną przyczyną | sms.undelivered |
delivery_failed z trwałą lub niesklasyfikowaną przyczyną | sms.failed |
buffered | Brak publicznego zdarzenia |
Nierozpoznany status operatora nie generuje zdarzenia. Brak publicznej aktualizacji nie oznacza więc, że operator nie wysłał potwierdzenia.
Dlaczego jeden status błędu generuje różne zdarzenia?
Bird używa przyczyny błędu od operatora, aby ustalić, czy problem może ustąpić.
| Przyczyna operatora | Kod błędu Bird | Klasyfikacja |
|---|---|---|
unavailable_subscriber | unreachable | Odwracalny |
received_network_error | provider_unavailable | Odwracalny |
capacity_limit_reached | provider_unavailable | Odwracalny |
unknown_subscriber | invalid_destination | Trwały |
opted_out | recipient_opted_out | Trwały |
carrier_rejected | content_rejected | Trwały |
Odwracalny błąd generuje sms.undelivered. Wiadomość jest mimo to ostateczna: Bird nie ponawia jej automatycznie. Dotarcie do odbiorcy wymaga osobnego wysłania po ustąpieniu problemu.
Trwały błąd generuje sms.failed. Niesklasyfikowana przyczyna również generuje to zdarzenie z kodem błędu unknown. Ten wynik oznacza, że Bird nie zdołał sklasyfikować przyczyny od operatora. Nie dowodzi to samo w sobie, że cel jest trwale nieosiągalny.
Czy mogę ustawić, kiedy operator przestaje próbować?
Nie możesz ustawić terminu dostarczenia operatora przez endpoint wysyłki Bird.
Bird odrzuca każde podane validity_period z HTTP 422 SMSUnsupportedFeature. To pole kontrolowałoby, jak długo operator próbuje dostarczyć wiadomość.
Odpowiadające pole odpowiedzi nie jest zwracane. Bird generuje sms.expired, gdy operator zgłosi wygaśnięcie. Twoja aplikacja nie może wywnioskować okresu oczekiwania operatora z nieobecnego pola.
Jak obsługiwać potwierdzenia w mojej aplikacji?
Śledź wyniki dostarczenia niezależnie od akceptacji żądania i od działań odbiorcy.
Traktuj wiadomość bez ostatecznego wyniku dostarczenia jako oczekującą. Odczytaj kod błędu ze zdarzenia błędu, aby móc zbadać jego przyczynę. Zachowuj nieznane kody w logach, ponieważ zbiór kodów błędów jest rozszerzalny.
Używaj zdarzeń dostarczenia do metryki dostarczeń. W przypadku kodu weryfikacyjnego lub przepływu potwierdzenia rejestruj sukces, gdy odbiorca wykona akcję. Samo potwierdzenie dostarczenia nie dostarcza takiego pomiaru.
Zdarzenia SMS dokumentuje ładunki publicznych zdarzeń i oś czasu wiadomości.
W skrócie
Dostarczenie nie potwierdza odczytania.
Potwierdzenie raportuje wynik dostarczenia w sieci, nie potwierdzając, że odbiorca zobaczył wiadomość.
Niektóre potwierdzenia nie mają publicznego zdarzenia.
Bird rejestruje zbuforowane potwierdzenia wewnętrznie, nie zmieniając publicznego statusu, osi czasu ani strumienia webhooków.
Przyczyna determinuje zdarzenie błędu.
Odwracalne przyczyny operatora generują sms.undelivered; trwałe lub niesklasyfikowane przyczyny generują sms.failed.
Odwracalna przyczyna nie wyzwala ponownego wysłania.
Niedostarczona wiadomość jest ostateczna, więc kolejna próba wymaga osobnego wysłania.