SMS
Orbit’in SMPP ağ geçidi altyapısı üzerinden dünya genelinde SMS mesajları gönderin. Orbit, 190’dan fazla ülkede birinci sınıf operatörler ve toplayıcılarla bağlanır; birleştirme (concatenation), kodlama ve teslimat takibini otomatik olarak yönetir. Bu sayfa kanalı uçtan uca anlatır: hangi göndericiyi bağlayacağınız, trafiğin kabul edilmeden önce hangi ülkelerde kayıt gerektiği, her gönderimin maliyetini kodlamanın nasıl belirlediği, durum yaşam döngüsünün size ne söylediği ve hata döndüğünde onu nasıl okuyacağınız.SMS gönderin
to hem de from E.164 olarak doğrulanır — ülke önekli tam uluslararası biçim, örneğin +14155552671. Orbit’in numaraları nasıl doğruladığı ve normalleştirdiği Numaralar yaşam döngüsü sayfasında anlatılır.
Prototip yaparken bir sandbox anahtarı kullanın (curl’de dv_test_sk_…, kodda ORBIT_API_KEY) — sandbox gönderimleri simüle edilir, ücretsizdir ve asla bir operatöre ulaşmaz. Üretime geçerken canlı anahtarı takın; yukarıdaki kodun hiçbir satırı değişmez.
Yukarıdaki Node sekmesi genel orbit.messages.send({ channel: 'sms', ... }) yardımcısını kullanır; kanal başına tiplenmiş orbit.messages.sendSms({ to, body, from }) metodu aynı POST’u yapar — tek bir şekil seçin ve tutarlı kullanın.
Yanıt
Uç HTTP 202 Accepted ile yanıtlar — mesaj kalıcılaştırılmış ve teslimat için kuyruğa alınmıştır (henüz operatöre teslim edilmemiştir).id, msg_ öneki ve ardından 32 küçük harf hex karakterinden oluşan bir platform mesaj kimliğidir (kanal araekleri yok); yaşam döngüsünü teslimat webhook’ları üzerinden izleyin.
data.id okuyun ve data.status’a göre dallanın (başlangıçta queued olur):
- Node.js / fetch (TypeScript) — SDK veya
res.json()dönüş değeri zarfı taşır:message.data.id,message.data.status. - Python —
send_smsham JSON gövdesini dict olarak döndürür:message["data"]["id"],message["data"]["status"]. - Go —
SendSMSzarfı tiplenmiş bir struct’a çözer:msg.Data.ID,msg.Data.Status. - Ruby / PHP (kaçış kapağı) —
client.requestham JSON gövdesini döndürür:send.dig("data", "id")/$send['data']['id'].
segments ve encoding okuyun — faturalama bunlar üzerinden hesaplanır ve aşağıdaki Kodlama ve birleştirme bölümü ikisini de gönderimden önce nasıl tahmin edeceğinizi gösterir.
Yaygın kalıplar
İki kalıp, üretimdeki SMS entegrasyonunun neredeyse tamamını kapsar: gönderimde güvenli yeniden denemeler ve mesaj geçmişini sayfalama.Idempotency-Key ile idempotent gönderim
Kaynak oluşturan POST uçları birIdempotency-Key başlığını kabul eder. Aynı anahtarı sunan bir yeniden deneme, özgün zarfı döndürür — yinelenen gönderim yok, ikinci ücret yok. SDK’lar çağrı başına otomatik olarak bir UUID üretir; ham HTTP’de bunu açıkça siz ayarlarsınız. Her iki durumda da tek bir mantıksal gönderimin denemeleri arasında sabit bir anahtar geçirin; her yeniden denemenin kendi anahtarını üretmesine izin vermeyin.
Node
Python
SDK liste çağrılarıyla GET /messages sayfalama
Mesaj geçmişi imleç (cursor) ile sayfalanır: her sayfameta.pagination.cursor ve meta.pagination.has_more taşır; has_more false olana kadar imleci geri geçirin. Node SDK bir imleç döngüsü ve otomatik sayfalayan bir yineleyici sunar; diğer SDK’lar liste metotları veya kaçış kapağı üzerinden sayfalar:
Node
Python
Çalışılmış örnek: gönderin, sorgulayın, hataları yönetin
Aşağıdaki sıra uçtan uca tek bir akıştır: gönderimi POST edin,GET /messages/{id} sorgulayın (veya webhook alın — sorgulama yedek yoldur) ve bir şey başarısız olduğunda belirleyici olarak dallanın. Gövde, GSM-7 fiyatlaması varsaymak yerine kodlama kararının geri geldiğini görmeniz için bilinçli olarak UCS-2 gönderimidir.
1. Mesajı gönderin
from, sender_pool_id, messaging_service_id veya from_extension — aksi halde uç HTTP 422 ile SENDER_REQUIRED döndürür (örneğin isteğinize "from": null gibi bir yapıştırma sızdığında). Her seçicinin ne anlama geldiği için Gönderici türü seçin bölümüne bakın.
2. Gönderim yanıtını okuyun
status: queued başlangıç durumudur — henüz hiçbir şey teslim edilmemiştir ve hiçbir external_id (operatör tarafı referans) geri dönmemiştir. segments ve encoding alanları, segment başına fiyatlamanın tam olarak çarptığı değerlerdir; onlara bir ipucu değil, fatura gibi davranın.
3. Satırı sorgulayın
Webhook’lara abone olamıyor (veya olmak istemiyorsanız), gönderimin döndürdüğü kimlikleGET /messages/{id} sorgulayın. Satır sending → sent → delivered / terminal hata sırasını izler. Her yanıt ayrıca terminal hatalar için metadata.classified_error_code ve Meta-DM satırları için metadata.no_dlr_channel yüzeyine çıkarır; bu yüzden etiket dizelerine değil, makine tarafından okunabilen status alanına göre dallanın.
delivered öncesi sending (sağlayıcı aldı) veya sent (sağlayıcı kabul etti). Fan-out geçmişini aynı turda istiyorsanız ?include=webhook_deliveries ekleyin.
4. Hatalara göre dallanın
Sorgulamastatus’una, webhook data.status’una veya metadata.classified_error_code’a göre dallanın — hepsi aynı hikâyeyi anlatır. Aşağıdaki hata aileleri gerçekte ele almanız gerekenlerdir:
Herhangi bir
message.failed webhook’unda data.status, dallanılacak alandır — submitted_no_receipt ve expired aynı etkinlikte taşınır ve bunlardan birinin ardından bile daha sonra bir message.delivered webhook’u gelebilir.
SMS teslim edilebilirliği temelleri
SMS teslim edilebilirliği üç şeye dayanır, bu sırayla: kimden gönderdiğiniz, nereden ve ne hızla. Bunları doğru ayarlayın, geriye kalan tek maliyet değişkeni kodlama olur.Gönderici türü seçin
Göndericiler tek bir nedenle var olur: teslim edilebilirlik. Hedef ülkenin kurallarına uygun onaylı bir gönderici ID’sine ihtiyacınız vardır, aksi halde operatör trafiği size bir segmente mal olmadan önce filtreler — bkz. Ülke Uyumluluk Gereksinimleri.
Gösterge tablosu üzerinden başlangıç
Gösterge tablosu anlatımı beş dakikadan az sürer ve kod yazmadan önce aşağıdaki iki hata biçimini yakalar.- Gösterge tablosunda Channels → SMS açın.
- Attach Sender tıklayın ve yukarıdan bir gönderici türü seçin. Orbit biçimi doğrular (E.164 numarası, 3–11 alfanümerik ID veya havuz referansı) ve varsayılan seçtiğiniz hedefin kayıt gerektirip gerektirmediğini kontrol eder.
- Sahip olduğunuz bir numaraya bir test mesajı gönderin. Düzenleyici
segmentsveencoding’i satır içi gösterir, bu yüzden göndermeden önce tahmini segment başına maliyeti görürsünüz. - Hedef kapınız bağlamayı reddederse (10DLC kampanyasız ABD, gönderici-ID onayı olmayan kapılı ülke), sihirbaz sizi kayıt akışına yönlendirir — sonraki iki bölüme bakın.
GET /api/v1/messaging/senders’in API üzerinden ne döndürdüğünü denetlemenin de yoludur.
10DLC kaydı & kampanya türleri (ABD)
Numerik uzun kodlar üzerinden ABD hedeflerine gönderiyorsanız, operatörler kayıt gerektirir; kayıtsız trafik filtrelenir, ek ücretlendirilir veya ikisi birden. Orbit kaydı sizin adınıza The Campaign Registry üzerinden sunar — tam anlatım (marka → kampanya → onay → kapasite katmanları) 10DLC Kaydı kılavuzu sayfasındadır. Akılda tutmanız gereken ABD’ye özgü nokta: kayıt sonrası kapasite, marka vetting puanınıza dayalı bir günlük, numara başına segment sınırı olarak verilir — saniyelik bir hız değil. Daha fazla günlük kapasite gerekiyorsa, vetting puanınızı yükseltin (tam marka verisi, EIN, web sitesi) veya kampanyaya daha fazla numara atayın. Alfanümerik gönderici ID’lerini kapılayan ABD dışı hedefler için (Avrupa’nın çoğu, Brezilya, Bangladeş, APAC’ın parçaları), paralel kayıt akışı Gönderici-ID Kaydı’dır; bu, onayınızı ülke başına kaydeder ve destekleyici KYC belgelerini bağlar. Gönderim anındaki kapı, eşleşen ülkenin girişiapproved olana kadar kapılı ülkelere trafiği reddeder — sessiz filtreleme yok, hata görünür bir rejected olarak geri gelir.
Hindistan bir istisnadır: gönderici ID’leri (“Headers”) genel akış yerine DLT/TRAI üzerinden kaydolur — bkz. DLT-Hindistan Başlangıç.
Kodlama ve birleştirme
Kodlama, düzgün kayıtlı bir göndericiden geriye kalan tek maliyet değişkenidir. SMS segment başına faturalanır ve segment sayısı tamamen gövdenin hangi alfabeye sığdığına bağlıdır.GSM-7 karşı UCS-2
- GSM-7 — 7 bit GSM alfabesi (ASCII artı birkaç ekstra:
@,£,€, biraz Yunanca). Ona uyan bir gövde segment başına 160 karaktere kadar alır veya çok parçalı gönderimde 153 karakter (7’si segment başına UDH birleştirme başlığına gider). - UCS-2 — GSM-7 dışındaki herhangi bir karakter (emoji, CJK, kıvrık tırnaklar, çoğu Latin dışı yazı) tüm mesajı 16 bit kodlamaya çevirir. Bir gövde segment başına 70 karaktere kadar alır, çok parçalıda 67.
Çalışılmış örnek
Siparişiniz kargoya verildi — yanıt EVET — 30 karakter, tamamı GSM-7 → 1 segment, GSM-7.
Tek bir emoji eklemek alfabeyi çevirir: UCS-2’de 54 karakter → hâlâ 1 segment, ama 160 karakterlik bir ASCII bülteni bir emoji sızdığı anda 2 UCS-2 segmenti olur. Ölçekte, maliyeti belirleyen sayı budur.
Platform göndermeden önce segmentleri sayar; gönderim yanıtı kararı taşır:
wasTruncated: true ile işaretler, böylece kuyruğun nereye gittiğini merak etmezsiniz. Özellikler listesinin “10 segmente kadar birleştirilmiş mesajlar” dediği şey budur. Her gönderimde segments okuyun ve fatura tahminlerinizi buna göre dallayın — segment başına fiyatlamanın çarptığı tam olarak budur.
Hız sınırları, kapasite ve gönderici havuzları
SMS kapasitesi üzerinde iki bağımsız sınır vardır ve ikisini de aşmanız gerekir:- API tarafı istek sınırı.
POST /messages/sms’te kiracı başına varsayılan 100 istek/dakika, kuruluş başına anahtarlanır. Üzerinde429 RATE_LIMITEDalırsınız; başlıklar ve yeniden deneme işlemi için Hız Sınırları kılavuzu sayfasına bakın. Kanal başına tam tablo aşağıdadır. - Gönderici tarafı kapasite. ABD 10DLC: vetting katmanınızın belirlediği günlük, numara başına segment sınırı. Başka yerlerde: hedefin rotasının gönderici başına desteklediği şey.
sticky, round_robin, random veya geomatch stratejisiyle aralarında dağıtın ve gönderici başına kapasite havuz boyutuyla çarpılır. Havuzlar ayrıca bozulan bir göndericinin gönderim kodunuzu değiştirmeden devreden çıkmasına izin verir — havuz sağlık ucu, hangi üyenin bozulduğunu bir teslim edilebilirlik sorunu olmadan önce söyler.
Mesaj durum yaşam döngüsü
Her giden SMS, mesaj API çağrınızdan ahizeye — veya bir terminal hataya — ilerledikçe ilerleyen birstatus taşır:
queued → sending → sent → delivered (veya failed / undelivered / rejected / expired)
Durum geçişlerine message.sent, message.delivered ve message.failed etkinliklerini kullanan webhook’lar üzerinden abone olun — geçiş başına bir webhook, her biri mesaj id’sini ve yeni status değerini taşır.
İşletmecileri yakalayan incelikler:
submitted_no_receipt— sağlayıcı gönderimi kabul etti, 30 dakikalık SMPP ölü süresi penceresi içinde DLR geri gelmedi. Ara (is_terminal: false) olarak etiketlenir, çünkü geç birdeliveredveya hata DLR’si hâlâ gelebilir ve üzerine yazabilir. Onu sonuç bilinmiyor olarak değerlendirin; teslim değil, hata değil.expired— geç gelme penceresi kapandıktan sonra bir DLR geldi. Kapalı satır, sonuç bilinemez;message.failedüzerinden fan-out olur.cancelled— yalnızca sizin tarafınızdan ulaşılabilir; onun için hiçbir webhook ateşlenmez.
is_terminal’ın ne anlama geldiği Teslimat yaşam döngüsü sayfasındadır; durum başına anlamlar ve tam geçiş tablosu mesaj durum yaşam döngüsü referansı sayfasındadır.
Sorun giderme
message.failed geldiğinde, yükün status’una göre dallanın, etkinlik türüne değil — submitted_no_receipt ve expired de o etkinlikte fan-out olur. Makine işlemi için metadata.classified_error_code okuyun ve bilet açarken operatörün kendi ifadesi için error_code / error_message.
Bir destek bileti ilk turda yanıtı getiren yükseltme paketi: kiracı ID’niz, bir mesaj ID’si ve satırın
classified_error_code’u — artı DLR belirtili satırlar için Teslim Kaydı’ndan Sağlayıcı Referansı. Teslim kaydı kılavuzu durumu nasıl filtreleyeceğinizi gösterir; Numara Sorgusu yeniden göndermeden önce ölü bir numarayı canlı birinden ayırmaktır.
Fiyatlandırma
SMS fiyatlandırması segment başınadır ve hedef ülkeye göre değişir. Fiyat sayfasını kontrol edin veya gerçek zamanlı oranlar içinGET /api/v1/pricing/messaging?country=<ISO> uçunu sorgulayın (dönen channels dizisi sms içerir).
Planlama sayısı önceki bölümlerden gelir: fiyatlandırma ucunun döndürdüğü segment başına oranı, gönderim yanıtının taşıdığı segments değeriyle çarpın. İki aksi halde özdeş gönderim, birinin kodlaması UCS-2’ye çevirdiği anda farklı faturalanır — bunun ne zaman olduğunu ve nasıl geri normalleştirileceğini Kodlama ve birleştirme bölümüne bakın.
Özellikler
- A2P ve P2P mesajlaşma — uygulamadan kişiye ve kişiden kişiye destek
- Küresel erişim — Devotel’in toplayıcı ağı üzerinden 190’dan fazla ülke
- Teslim raporları — her mesaj için gerçek zamanlı durum webhook’ları
- Birleştirilmiş mesajlar — çok parçalı SMS şeffaf olarak işlenir (10 segmente kadar)
- E.164 doğrulama — otomatik telefon numarası biçim doğrulaması
- Unicode desteği — otomatik algılama ve akıllı noktalama normalleştirmesiyle tam GSM-7 ve UCS-2 kodlama
- Gönderici ID — yerel düzenlemelerin desteklediği yerlerde alfanümerik gönderici ID’leri, gerektiğinde kayıt kapılı
Hız Sınırları
SMS gönderimleri/messages/sms uçunda varsayılan olarak kiracı başına 100 istek/dakika ile sınırlandırılır. Sınır kiracı başına (kuruluş başına) anahtarlanır, IP veya plan başına değil, bu yüzden aynı kiracı içindeki eşzamanlı çağıranlar bir havuzu paylaşırken ayrı kiracılar birbirlerini asla etkilemez.
Daha yüksek bir tavan mı gerekiyor? Kiracı başına sınır, kuruluşunuzun mesajlaşma ayarları (channel_rate_overrides.sms) üzerinden aşılabilir — destek ile iletişime geçin veya gösterge tablosundan ayarlayın. Sınırı aşmak 429 Too Many Requests ile RATE_LIMITED hata kodunu döndürür; başlıklar ve yeniden deneme işlemi için Hız Sınırları kılavuzu sayfasına bakın.
Aynı kanal başına, dakika başına, kiracı başına model mesajlaşma kanalları arasında geçerlidir (her biri bağımsız olarak aşılabilir):