Shopify Netgsm SMS entegrasyonu, Shopify mağazasındaki sipariş, kargo ve iptal olaylarını Netgsm'in SMS API'sine bağlar ve müşteriye markanın onaylı SMS başlığıyla otomatik mesaj gönderir. E-ticaret iletişim altyapısının bir parçasıdır ve iki katmandan oluşur: Shopify tarafında olayı yakalayan webhook ya da Flow tetikleyicisi, Netgsm tarafında mesajı operatöre ileten API. Kurduğumuz entegrasyonlarda arızaların çoğu API çağrısının kendisinden değil, iki katmanın arasından çıktı. Telefon numarası yanlış biçimde geliyor, aynı siparişe iki SMS gidiyor ya da kampanya mesajı İYS filtresinden geçmeden çıkıyor. Bir de güncel bir durum var: 13 Kasım 2026 itibarıyla Netgsm'in kendi Shopify uygulaması App Store'da listelenmiyor. Bu yüzden kurulum yolunu seçmek, işin ilk kararı haline geldi.
Shopify Netgsm SMS entegrasyonu nedir ve hangi mesajları otomatikleştirir?
Shopify Netgsm SMS entegrasyonu, Shopify'da gerçekleşen bir olayı (sipariş oluşturuldu, kargoya verildi, iptal edildi) Netgsm API'sine giden bir SMS isteğine çeviren otomasyondur. Sipariş onayı ve kargo takip numarası gibi bilgilendirme mesajları ile sepet hatırlatması ve kampanya gibi ticari mesajlar aynı altyapıdan çıkar. Ama ikisi farklı yasal kurala bağlıdır ve entegrasyonu bu ayrıma göre tasarlamanız gerekir.
Netgsm, Türkiye'de toplu SMS, OTP SMS ve sesli mesaj hizmeti veren bir iletişim şirketidir. Netgsm'in resmi JavaScript SDK dokümanına göre güncel API iki parçalıdır: mesaj gönderimi için /sms/v3, izin kayıtları için /iys/v1. Kimlik doğrulama /auth/v3 üzerinden token ile yapılır. Eski api.netgsm.com.tr adresi çalışmaya devam ediyor; ancak yeni projelerde ext-api.netgsm.com.tr adresini kullanın. Sandbox ortamı, teslim raporu webhook'u ve ayrıntılı hata kodları yalnızca yeni API'de var.
Bilgilendirme SMS'i ile ticari SMS arasındaki fark
6563 sayılı Elektronik Ticaretin Düzenlenmesi Hakkında Kanun, mal ya da hizmet tanıtan, pazarlayan veya satışı teşvik eden mesajları "ticari elektronik ileti" sayar. Bu mesajları göndermeden önce alıcının onayını almanız ve bu onayı İleti Yönetim Sistemi'ne (İYS) kaydetmeniz gerekir. Müşterinin verdiği siparişin durumunu bildiren mesaj ise bilgilendirme niteliğindedir; İYS onayı aramaz.
Ayrım mesajın türüne göre değil içeriğine göre yapılır. Bu yüzden entegrasyonun şablon tasarımı doğrudan hukuki risk taşır.
Kritik Not: Kargo takip numarası içeren bir SMS'in sonuna "Sıradaki siparişinizde %10 indirim: KOD10" eklediğiniz anda mesaj ticari ileti sayılır. Bilgilendirme şablonlarınızda kupon, kampanya ve ürün önerisi tutmayın.
İYS kaydının Shopify müşteri verisiyle nasıl eşleştiğini Shopify İYS entegrasyonu rehberimizde adım adım anlattık. SMS entegrasyonu o yapının üzerine oturur: izin verisi doğru değilse en temiz kurulmuş SMS akışı da hukuki risk üretir.
Shopify'ın yerleşik SMS bildirimleri neden yetmiyor?
Shopify, Ayarlar > Bildirimler ekranında sipariş onayı ve kargo güncellemesi için SMS şablonları sunar. Yönettiğimiz mağazalarda bu şablonları Türkiye pazarında üç nedenle yetersiz bulduk:
- Shopify bu SMS'leri yalnızca müşteri ödeme sayfasında iletişim bilgisi olarak telefon numarasını seçtiğinde gönderir. E-postayla sipariş veren ama teslimat adresine telefon yazan müşteri SMS almaz.
- Gönderici adı markanızın operatör onaylı SMS başlığı değildir. Müşteri mesajı tanımadığı bir numaradan alır ve dolandırıcılık mesajlarına alışkın Türk tüketicisi bu tür SMS'lerdeki linke daha az tıklar.
- Kapıda ödeme onayı, havale bekleme hatırlatması ya da ERP'den gelen kargo numarası gibi Türkiye'ye özgü akışlar yerleşik şablonlarda yoktur.
Bu sınırlar mağaza büyüdükçe görünür hale geliyor. Günde 20 siparişte fark edilmeyen "SMS almadım" şikâyeti, günde 300 siparişte müşteri hizmetlerine her gün ayrı bir iş yükü olarak döner.
Hangi Shopify olayı hangi SMS'i tetikler?
Her SMS, Shopify'da bir olaya ve o olayın webhook konusuna (topic) karşılık gelir. Aşağıdaki tablo, Türkiye'deki mağazalarda kurduğumuz standart akışı gösteriyor:
| SMS türü | Shopify webhook konusu / Flow tetikleyicisi | Mesaj niteliği | İYS onayı gerekir mi? |
|---|---|---|---|
| Sipariş alındı | orders/create | Bilgilendirme | Hayır |
| Ödeme onaylandı (havale/EFT) | orders/paid | Bilgilendirme | Hayır |
| Kapıda ödeme sipariş onayı | orders/create + ödeme yöntemi filtresi | Bilgilendirme | Hayır |
| Kargoya verildi + takip linki | fulfillments/create | Bilgilendirme | Hayır |
| Teslim edildi | fulfillments/update (durum: delivered) | Bilgilendirme | Hayır |
| Sipariş iptali / iade | orders/cancelled, refunds/create | Bilgilendirme | Hayır |
| Terk edilen sepet hatırlatması | Flow: "Customer abandons checkout" | Ticari | Evet |
| Kampanya / kupon duyurusu | Müşteri segmenti + toplu gönderim | Ticari | Evet |
Tablodaki en sık atlanan satır kapıda ödemedir. orders/create webhook'u, kapıda ödeme siparişinde de kartla ödenen siparişte de aynı anda tetiklenir. Ödeme yöntemine göre ayrı şablon kurmazsanız kapıda ödeme müşterisi "Ödemeniz alındı" mesajı alır. Nodus Works olarak kapıda ödeme oranı yüksek mağazalarda bu SMS'i bir onay adımına çeviriyoruz: müşteri "EVET" yazarak yanıt verdiğinde sipariş Shopify'da etiketleniyor ve depoya ancak o zaman düşüyor. Netgsm'in gelen mesaj webhook'u (registerInboxWebhook) bu yanıtı entegrasyona geri taşır.
Shopify'ı Netgsm'e bağlamanın 3 yolu: hazır uygulama, Shopify Flow ve özel entegrasyon
Shopify'ı Netgsm'e üç yoldan bağlarsınız: Netgsm'i tanıyan hazır bir Shopify uygulaması, Shopify Flow ile araya konan küçük bir servis ya da Shopify webhook'larını dinleyen özel bir uygulama. Standart şablonlarla yetinen ve ayda birkaç bin SMS'in altında kalan mağazalar için hazır uygulama yeterli. Kapıda ödeme onayı, ERP'den gelen kargo verisi ya da çok depolu gönderim varsa özel entegrasyon şart.
Seçimi belirleyen soru şu: SMS'in içeriğindeki her veri Shopify'ın içinde mi duruyor? Sipariş numarası, ürün adı ve kargo takip linki Shopify'daysa hazır uygulama işi görür. Takip numarası Nebim, Logo ya da bir kargo entegratöründen geliyorsa, uygulamanın şablon alanları o veriyi görmez.
Yol 1: Netgsm'i tanıyan hazır Shopify uygulaması
13 Kasım 2026'da kontrol ettiğimizde Netgsm'in kendi geliştirdiği "Netgsm SMS" uygulamasının listeleme sayfası "şu an Shopify App Store'da mevcut değil" uyarısı veriyordu. Uygulamayı daha önce kurmuş mağazalar için bu durum yeni kurulumun yapılamadığı anlamına gelir. Netgsm'e uygulamanın geri dönüp dönmeyeceğini doğrudan sorun.
Bugün Netgsm'i hazır olarak bağlayan uygulamalardan biri Gurmehub'ın geliştirdiği Sendzi: WhatsApp & SMS. Uygulama Netgsm, Kobikom, Verimor ve WhatsApp'ı tek panelden yönetiyor. Listeleme sayfasındaki planlar şöyle:
- Ücretsiz: 0 dolar/ay, mesaj başına 0,05 dolar kullanım ücreti
- Basic: 9 dolar/ay, ilk 1.000 mesaj ücretsiz, sonrası 0,03 dolar
- Growth: 19 dolar/ay, ilk 3.000 mesaj ücretsiz, Shopify Flow uyumu
- PRO: 49 dolar/ay, sınırsız mesaj
Uygulama 12 Ağustos 2026'da yayına girdi ve listeleme sayfasında henüz tek yorum var. Genç bir uygulamayı kurmadan önce iki soruyu geliştiriciye yazılı olarak sorun. Birincisi, listedeki mesaj ücreti Netgsm hesabınızdaki SMS kredisine ek mi? İkincisi, ticari mesajlarda İYS filtresi hangi değerle gönderiliyor?
Yol 2: Shopify Flow ve araya konan küçük bir servis
Shopify Flow, "Order created" veya "Customer abandons checkout" gibi bir tetikleyiciden sonra "Send HTTP request" aksiyonuyla dış bir adrese istek atabilir. İlk bakışta Flow'u doğrudan Netgsm'e bağlamak mümkün görünür. Pratikte iki engel çıkar:
- Netgsm'in yeni API'si önce
/auth/v3adresinden token alıp sonra gönderim yapmayı bekler. Flow'un tek HTTP isteği bu iki adımlı akışı temiz biçimde kuramaz. - Netgsm kullanıcı adı ve şifresi Flow aksiyonunun içine yazılır. Mağazada Flow'u düzenleme yetkisi olan her personel bu bilgiyi görür.
Çözüm araya bir Cloudflare Worker ya da benzeri küçük bir sunucusuz fonksiyon koymak. Flow, gizli bir başlıkla (X-Webhook-Secret gibi) Worker'a istek atar. Worker token'ı alır, numarayı biçimlendirir ve Netgsm'e iletir. Netgsm'in resmi SDK'sı Cloudflare Workers üzerinde çalışacak şekilde yazılmış; ek bağımlılık gerektirmiyor. Flow'un HTTP isteği aksiyonunun kendi planınızda açık olup olmadığını Flow editöründe kontrol edin.
Uzak Durulması Gereken Risk: Netgsm şifresini tema koduna, theme.liquid dosyasına ya da bir ScriptTag'e koymayın. Netgsm'in resmi SDK'sı tarayıcıda çalıştırıldığında bu yüzden hata verir: tarayıcıdaki her ziyaretçi şifrenizi görür ve hesabınızdan SMS gönderebilir.
Yol 3: Webhook dinleyen özel Shopify uygulaması
Özel uygulama, Shopify Admin'de oluşturulan ve yalnızca sizin mağazanıza kurulan bir uygulamadır. orders/create, fulfillments/create ve orders/cancelled gibi webhook konularına abone olur, gelen olayı kendi sunucusunda işler ve Netgsm'e gönderir. Bu yol, SMS içeriğine Shopify dışından veri katmanın tek yoludur.
Özel uygulamada en çok dikkat isteyen konu tekrar korumasıdır. Shopify webhook dokümantasyonuna göre uygulamanız 5 saniye içinde yanıt vermezse Shopify aynı olayı tekrar gönderir. Netgsm'in SDK dokümanı ise şunu açıkça yazıyor: API aynı isteği tekilleştirmez; ikinci istek ikinci bir gönderim işi açar ve müşteri mesajı iki kez alır.
Netgsm aynı isteği iki kez alırsa iki ayrı SMS gönderir; tekrarı engellemek Shopify tarafındaki uygulamanın işidir. Bu yüzden her webhook'un X-Shopify-Webhook-Id başlığını kaydedin ve aynı kimlik ikinci kez geldiğinde gönderimi atlayın. Netgsm isteğindeki referenceId alanına Shopify sipariş numarasını yazın; böylece teslim raporunda hangi SMS'in hangi siparişe ait olduğunu görürsünüz.
Kapıda ödeme onayı, ERP'den gelen kargo numarası ya da depo bazlı gönderici seçimi gibi Shopify dışındaki verilere dayanan SMS akışlarında hazır uygulamaların şablon alanları yetmez. Shopify entegrasyon ve özel uygulama geliştirme hizmetimiz bu akışları webhook doğrulaması, tekrar koruması ve teslim raporuyla birlikte tek bir uygulamada kurar.
Üç yolun karşılaştırması
| Kriter | Hazır uygulama (Sendzi vb.) | Shopify Flow + ara servis | Özel uygulama (webhook) |
|---|---|---|---|
| Kurulum süresi | 1-2 saat | 1-2 gün | 1-3 hafta |
| Aylık uygulama maliyeti | 0-49 dolar + mesaj ücreti | Ara servis için genellikle ücretsiz katman yeterli | Sunucu ve bakım maliyeti |
| Shopify dışı veri (ERP, kargo entegratörü) | Yok | Sınırlı, ara serviste kodla eklenir | Tam |
| Kapıda ödeme "EVET" onayı | Uygulamaya bağlı | Gelen mesaj webhook'u ayrıca kurulmalı | Var |
| Tekrar (çift SMS) koruması | Geliştiricinin kurgusuna bağlı | Ara serviste kurulmalı | X-Shopify-Webhook-Id ile tam kontrol |
| İYS filtresi kontrolü | Geliştiriciye sorulmalı | Mesaj türüne göre iysFilter siz seçersiniz | Mesaj türüne göre iysFilter siz seçersiniz |
| Uygun mağaza profili | Günde 50'nin altında sipariş, standart akış | Flow kullanan, birkaç özel akışı olan mağaza | ERP'li, kapıda ödeme oranı yüksek, çok depolu mağaza |
Bizim tutumumuz şu: mağaza yeni açıldıysa hazır uygulamayla başlayın ve ilk üç ayda hangi SMS'in gerçekten şikâyet azalttığını ölçün. Özel entegrasyona ancak o veriyle karar verin. Akışları bilmeden özel uygulama yazdırmak, kullanılmayacak beş şablona geliştirme parası ödemek demektir.
Kuruluma başlamadan önce: Netgsm hesabı, SMS başlığı ve API kullanıcısı
Netgsm API'si üzerinden SMS göndermek için hesabınızda üç şey hazır olmalı: onaylı bir gönderici adı (SMS başlığı), tanımlı bir SMS paketi ve API yetkisi verilmiş bir alt kullanıcı. Netgsm bilgi bankasının "API ile SMS Gönderimi" makalesine ve Netgsm API dokümantasyonuna göre entegrasyonda kullanıcı adı olarak abone numaranızı, şifre olarak API alt kullanıcısının şifresini, gönderici olarak da onaylı başlığı yazarsınız.
Bu üç hazırlıktan en uzun süren başlık onayıdır, çünkü Netgsm başvuruyu anlaşmalı operatöre iletir ve operatör belge ister. Webhook'lar ve şablonlar birkaç günde hazır olur; başlık onaylanmadan hiçbiri canlıya çıkamaz. Bu yüzden başlık başvurusunu entegrasyon geliştirmesiyle aynı gün başlatın.
SMS başlığı (gönderici adı) onayı nasıl alınır?
SMS başlığı, müşterinin telefonunda numara yerine görünen gönderici adıdır; örneğin NODUSSTORE. Başvuruyu Netgsm panelinden yaparsınız ve başlığın ticari unvanınız ya da markanızla ilişkisini belgelemeniz istenir. İstenen belge listesi ve onay süresi operatöre göre değişiyor; güncel listeyi başvuru ekranından ya da Netgsm müşteri temsilcisinden alın.
Başlığı alırken ticari mesajları da düşünün. Netgsm'in resmi test sunucusunun kaynak koduna göre, İYS filtresiyle yapılan bir gönderimde başlığa İYS marka kodu bağlı değilse API isteği REJECTED_IYS hatasıyla reddeder. Başlık onaylandıktan sonra İYS marka kodunuzu başlıkla eşleştirmeyi Netgsm'den ayrıca isteyin.
API alt kullanıcısı ve IP kısıtlaması
Ana hesap şifresini hiçbir entegrasyona yazmayın. Netgsm'in önerdiği akış şöyle:
- Netgsm panelinde Abonelik İşlemleri > Alt Kullanıcı Hesapları > Yeni Kayıt ekranını açın.
- Kullanıcı türü olarak API Kullanıcısı seçin ve yetkilendirme ekranında yalnızca SMS hizmetini işaretleyin.
- Kayıtlı GSM numaranıza gelen kodu girin ve "API ile hesap erişimini onaylıyorum" kutusunu işaretleyerek erişimi aktifleştirin.
Alt kullanıcı ayrı bir şifre taşıdığı için, ajansla çalışmanız bittiğinde yalnızca o kullanıcıyı kapatırsınız; ana hesabınız etkilenmez.
IP kısıtlaması ayrı bir karar ister. Netgsm API'yi yalnızca belirli IP adreslerinden kullanılabilecek şekilde kısıtlayabilirsiniz ve bu, çalınan bir şifrenin başka sunucudan kullanılmasını engeller. Ancak Cloudflare Workers ya da benzeri sunucusuz ortamlar sabit bir çıkış IP'si vermez. Sunucusuz bir servisten gönderim yapan entegrasyonda IP kısıtlaması açılırsa Netgsm her isteği 30 hata koduyla reddeder; bu kod, "geçersiz kullanıcı adı, şifre veya API erişim izni yok" anlamına gelir. IP kısıtlaması istiyorsanız gönderimi sabit IP'li bir sunucudan yapın.
Sandbox ortamında ücretsiz test
Netgsm'in resmi SDK dokümanına göre yeni API'nin üç ortamı var:
- Yerel mock (
127.0.0.1:4010): Abonelik gerektirmez, SMS göndermez. Hata senaryolarını denemek için Netgsm'in açık kaynak test sunucusu kullanılır. - Sandbox (
ext-sandbox.netgsm.com.tr): Gerçek ağ ve token akışıyla çalışır, demo hesap kullanır, SMS göndermez ve ücretsizdir. - Canlı (
ext-api.netgsm.com.tr): Gerçek ve ücretli gönderim.
Aşağıdaki tablo, her hazırlık eksik kaldığında API'nin nasıl tepki verdiğini gösteriyor. Canlıya çıkmadan önce bu tabloyu kontrol listesi olarak kullanın:
| Hazırlık | Nereden yapılır? | Eksikse alınan yanıt |
|---|---|---|
| Onaylı SMS başlığı | Netgsm paneli, gönderici adı talebi | Eski API: 40 / Yeni API: REJECTED_HEADER |
| SMS paketi veya kredi | Netgsm paneli, paket satın alma | Yeni API: INSUFFICIENT_CREDIT |
| API alt kullanıcısı ve erişim izni | Abonelik İşlemleri > Alt Kullanıcı Hesapları | Eski API: 30 / Yeni API: HTTP 401 |
| İYS marka kodunun başlığa bağlanması | Netgsm müşteri temsilcisi + İYS hesabı | Yeni API: REJECTED_IYS (yalnızca ticari gönderimde) |
| Doğru numara biçimi | Entegrasyon kodu | Yeni API: NO_DELIVERABLE_MESSAGES (HTTP 422) |
Uzak Durulması Gereken Risk: İYS'nin sandbox'ı da mock'u da yok. Netgsm'in SDK dokümanı, İYS'ye kaydedilen her iznin canlı ve sonradan düzenlenemeyen bir yasal kayıt olduğunu açıkça yazıyor. İYS akışını test numaralarıyla ya da uydurma kayıtlarla denemeyin.
Adım adım Shopify Netgsm SMS entegrasyonu kurulumu (HowTo)
Shopify Netgsm SMS entegrasyonunu webhook ile beş adımda kurarsınız: Shopify'da sipariş ve kargo webhook'larına abone olun, gelen isteğin imzasını doğrulayın, şablonu sipariş verisiyle doldurun, Netgsm'e gönderip referans numarasını kaydedin ve teslim raporu webhook'unu bağlayın. Aşağıdaki adımlar özel uygulama yolunu anlatıyor; Flow ile ara servis kullanıyorsanız 3. adımdan itibaren aynı kurallar geçerli.
1. Shopify'da webhook aboneliklerini açın
Özel uygulamanıza yalnızca ihtiyaç duyduğu izinleri verin: siparişler için read_orders, müşteri telefonu için read_customers. Telefon numarası Shopify'ın korunan müşteri verisi (protected customer data) kapsamındadır. Uygulama yapılandırmasında ad, telefon ve adres alanlarına erişim talep etmezseniz webhook gövdesinde bu alanlar boş gelir.
Ardından ilk etapta şu konulara abone olun: orders/create, fulfillments/create, fulfillments/update ve orders/cancelled. Terk edilen sepet akışını İYS bağlantısı tamamlanana kadar açmayın.
2. Webhook imzasını doğrulayın
Shopify her webhook'u X-Shopify-Hmac-Sha256 başlığında, uygulama gizli anahtarıyla üretilmiş bir HMAC imzasıyla gönderir. İmzayı istek gövdesinin ham haliyle hesaplayın; gövdeyi JSON'a çevirip geri yazarsanız imza tutmaz. İmzası tutmayan isteği 401 ile reddedin. Doğrulama atlanırsa, adresinizi bilen herkes müşterilerinize sizin başlığınızla SMS gönderebilir.
Shopify dokümantasyonuna göre uygulamanız 5 saniye içinde yanıt vermezse teslimat başarısız sayılır. Bu yüzden imzayı doğrulayın, olayı bir kuyruğa yazın ve hemen 200 dönün. Netgsm'e gönderimi kuyruktan ayrı bir işlemle yapın.
3. Mesaj şablonunu sipariş verisiyle doldurun
Kargo SMS'i için örnek şablon:
Merhaba Ayşe, #1042 numaralı siparişiniz Aras Kargo ile yola çıktı. Takip: https://kargotakip.araskargo.com.tr/?code=1234567890 Nodus StoreBu metin 139 karakterdir. Türkçe karakter kodlamasında (TURKISH) "ş", "ı" ve "ç" harfleri ikişer karakter sayıldığı için ağırlıklı uzunluk 145 olur ve tek SMS'e sığar. Şablondaki değişkenleri Shopify'dan şöyle alırsınız: müşteri adı shipping_address.first_name, sipariş numarası name, kargo firması ve takip linki fulfillment nesnesindeki tracking_company ve tracking_urls alanları.
Şablonu en uzun gerçek değerle test edin. "Ayşe" yerine "Muhammed Mustafa" gelen bir siparişte aynı metin 155 karakteri geçer ve iki SMS'e bölünür. Netgsm'in sms.measureLength işlemi, göndermeden önce metnin kaç parçaya bölüneceğini döner.
4. Netgsm API'ye gönderin ve referans numarasını kaydedin
Kuyruktaki işlemi Netgsm'in POST /sms/v3/send uç noktasına gönderin. İstek gövdesinde dört alanı her zaman doldurun:
sender: onaylı SMS başlığınızencoding: Türkçe metin içinTURKISHiysFilter: bilgilendirme SMS'indeNONE, ticari SMS'te İYS filtresi (bir sonraki bölümde anlatıyoruz)referenceId: Shopify sipariş numarası; teslim raporunda ve webhook'ta geri döner
Yanıttaki jobId değerini sipariş kaydıyla birlikte saklayın. Müşteri "SMS gelmedi" dediğinde destek ekibi bu kimlikle Netgsm raporundan mesajın operatöre ulaşıp ulaşmadığını iki dakikada bulur. Sipariş notuna ya da bir metafield'a yazmak yeterli.
5. Teslim raporu webhook'unu bağlayın
Netgsm, registerReportWebhook ile tanımladığınız adrese teslim raporlarını gönderir. Kayıt sırasında X-Webhook-Secret gibi gizli bir başlık tanımlayın ve gelen her istekte bu başlığı kontrol edin.
Netgsm'in SDK dokümanına göre adresiniz herhangi bir 2xx yanıt dönerse rapor teslim edilmiş sayılır; başarısız teslimatları Netgsm tekrar göndermez. Rapor alıcınız kısa süreli kapalı kalırsa aradaki raporlar kaybolur. Bu yüzden günde bir kez sms.getReport ile önceki günün işlerini çekip eksik raporları tamamlayın. Rapor sorgusunun hesap ve iş başına sınırı var; her gönderimden sonra sorgulamak yerine webhook'u ana kaynak olarak kullanın.
Telefon numarası formatı, Türkçe karakter ve SMS boyu
Shopify Netgsm SMS entegrasyonunda en sık görülen gönderim hatası numara biçimidir: Shopify numarayı +905321234567, Netgsm SMS API'si 905321234567, İYS API'si yine +905321234567 biçiminde ister. İkinci sık hata Türkçe karakterden kaynaklanır: aynı metin kodlamaya göre 1 ya da 3 SMS'e bölünebilir ve faturaya bu kadar yansır.
Shopify +90 verir, Netgsm 90 bekler, İYS +90 ister
Shopify, müşteri kaydındaki phone alanını uluslararası E.164 biçiminde (+905321234567) saklar. Netgsm'in SMS API'si ise 12 haneli 90XXXXXXXXXX biçimini bekler. Yurt dışı numaralar için başa - koyup ülke kodunu yazarsınız; bunun için hesabınızda yurt dışı gönderim izni açık olmalı. İYS çağrıları ise yeniden +90 biçimini ister.
Entegrasyonda numarayı her gönderimden önce tek bir fonksiyondan geçirin:
function netgsmNumarasi(ham) {
let n = String(ham || "").replace(/\D/g, ""); // rakam dışını sil
if (n.startsWith("0")) n = "9" + n; // 0532... -> 90532...
if (n.length === 10 && n.startsWith("5")) n = "90" + n; // 532... -> 90532...
return /^905\d{9}$/.test(n) ? n : null; // geçersizse gönderme
}Fonksiyon null döndüğünde gönderimi atlayın ve siparişe "SMS gönderilemedi: numara geçersiz" etiketi ekleyin. Geçersiz numarayı Netgsm'e yollamak SMS kredisi harcatmaz ama NO_DELIVERABLE_MESSAGES hatası üretir ve logları gürültüye boğar.
Türkçe karakter bir SMS'i kaç karaktere düşürür?
Netgsm'in açık kaynak test sunucusundaki uzunluk hesabı, üç kodlamanın sınırlarını şöyle tanımlıyor:
Kodlama (encoding) | Tek SMS sınırı | Birleşik SMS'te parça başına | Üst sınır (6 parça) | Ne zaman kullanılır? |
|---|---|---|---|---|
DEFAULT | 160 karakter | 153 karakter | 917 karakter | Metin Türkçe karaktersiz yazıldıysa |
TURKISH | 155 karakter | 148 karakter | 888 karakter | Türkçe metinlerin çoğu |
UNICODE | 70 karakter | 66 karakter | 396 karakter | Emoji veya Latin dışı alfabe varsa |
TURKISH kodlamasında "ç, ğ, ı, ş, Ğ, İ, Ş" harfleri ikişer karakter sayılır; "ö" ve "ü" tek karakterdir. Bir önceki bölümdeki 139 karakterlik kargo mesajı TURKISH ile tek SMS'tir. Aynı metnin sonuna tek bir 📦 emojisi eklerseniz kodlama UNICODE'a geçer, parça başına sınır 66'ya düşer ve mesaj 3 SMS'e bölünür. Ayda 5.000 kargo SMS'i gönderen bir mağazada bu tek emoji, faturayı 5.000 SMS'ten 15.000 SMS'e çıkarır.
Numara müşteri kaydında değil teslimat adresindeyse ne olur?
Shopify'da misafir olarak sipariş veren müşterinin telefonu çoğu zaman yalnızca shipping_address.phone alanında durur. Bu alan müşterinin yazdığı gibi kaydedilir: 0532 123 45 67, 5321234567 ya da +90 (532) 123-4567 gelebilir. Entegrasyonda numarayı şu sırayla arayın: customer.phone, shipping_address.phone, billing_address.phone. Hangisini bulursanız yukarıdaki fonksiyondan geçirin.
Ödeme sayfasında telefon alanını zorunlu yapmadıysanız bazı siparişlerde hiç numara olmaz. Kargo firmaları teslimat için zaten telefon istediği için, Türkiye'ye satış yapan mağazalarda Ayarlar > Ödeme ekranından teslimat adresindeki telefon alanını zorunlu yapın.
İYS ve ETK uyumu: ticari SMS'te izin filtresi nasıl çalışır?
Ticari SMS'i yalnızca İYS'de onayı kayıtlı alıcılara gönderebilirsiniz ve Netgsm bu kontrolü gönderim anında iysFilter parametresiyle yapar. Filtre açıkken Netgsm, İYS'de onayı olmayan numaraları gönderimden çıkarır. Böylece Shopify'daki pazarlama izni güncel olmasa bile yasal kaydı olmayan numaraya mesaj gitmez.
Bu kontrol yasal sorumluluğu sizden almaz. Filtre yalnızca İYS'deki kaydı kontrol eder; o kaydın doğru zamanda ve doğru kaynakla girilmesi markanın işidir.
iysFilter parametresinin dört değeri
Netgsm'in yeni API'sinde iysFilter dört değer alır:
NONE: İYS kontrolü yapılmaz. Yalnızca sipariş, kargo ve iade gibi bilgilendirme mesajlarında kullanın.BRAND: Gönderim, başlığa bağlı İYS marka kodunuzdaki izinlere göre filtrelenir. Kendi markasını satan e-ticaret mağazalarının çoğu bu değeri kullanır.RETAILER: Filtre, markanın bayi kayıtlarına göre çalışır.BRAND_AND_RETAILER: Marka ve bayi kayıtlarının ikisine birden bakar.
Shopify Netgsm SMS entegrasyonunda iysFilter değeri şablona değil mesaj türüne bağlanmalıdır. Bilgilendirme kuyruğu her zaman NONE, kampanya kuyruğu her zaman BRAND ile çalışmalıdır. İki türü aynı fonksiyondan, parametreyle seçerek göndermek, bir gün kampanya mesajının filtresiz çıkmasıyla sonuçlanır.
Shopify pazarlama izni ile İYS kaydı nasıl eşleşir?
Shopify, müşterinin SMS pazarlama iznini sms_marketing_consent alanında tutar. Müşteri ödeme sayfasındaki "SMS ile kampanyalardan haberdar olmak istiyorum" kutusunu işaretlediğinde bu alan subscribed olur. İzin değiştiğinde de customers_marketing_consent/update webhook'u tetiklenir. Ancak bu kayıt İYS'ye kendiliğinden gitmez.
Doğru kurulumda bu webhook, izni Netgsm'in İYS API'si üzerinden İYS'ye yazar. Kayıtta alıcı türü BIREYSEL, izin türü MESAJ, kaynak web sitesi (HS_WEB) ve iznin verildiği an yer alır. Ters yönde ise müşterinin İYS üzerinden verdiği ret, İYS webhook'uyla Shopify'daki izni unsubscribed yapmalıdır. İzin metninin KVKK açık rıza metninden neden ayrı tutulması gerektiğini Shopify KVKK entegrasyonu rehberimizde anlattık.
İpucu: İYS izin sorgusunda kayıt bulunamayan numara içinerrorCodedeğeri81döner. Kampanyadan önce segmentteki numaraları sorgulayıp 81 dönenleri listeden çıkarırsanız, Netgsm'in filtreleyeceği numaralar için baştan şablon hazırlamazsınız ve gerçek gönderim sayısını önceden bilirsiniz.
İzin akışı tek seferlik bir kurulum değil. İzinler her gün e-posta bülteni, sadakat programı ve kampanya segmentleriyle aynı veri üzerinde değişir. Shopify, Klaviyo ve Netgsm arasındaki izin senkronunu segment ve otomasyon kurgusuyla birlikte ele almak için e-posta pazarlama ve CRM otomasyonları hizmetimiz SMS ve e-posta izinlerini tek bir müşteri kaydında birleştirir; böylece bir kanaldaki ret, diğer kanalda kampanya gönderimini de durdurur.
Teslim raporları, hata kodları ve çift SMS riski
Kurulu bir Shopify Netgsm SMS entegrasyonu çoğunlukla sessizce bozulur: Shopify başarısız webhook aboneliğini siler, Netgsm bakiyesi biter ya da tekrar eden istekler müşteriye çift SMS gönderir. Üçünü de ilk günden izlemeye almadıysanız sorunu müşteri şikâyetinden öğrenirsiniz.
Shopify webhook'u neden aynı siparişi iki kez gönderir?
Shopify dokümantasyonuna göre 5 saniye içinde yanıt alamayan webhook'u Shopify dört saat içinde sekiz kez yeniden dener. Hatalar sürerse aboneliği tamamen siler. Bunun iki sonucu var:
- Uygulamanız SMS'i gönderdikten sonra 5 saniyeyi aşan bir işlem yapıp geç yanıt verirse, Shopify aynı olayı tekrar yollar ve müşteri ikinci SMS'i alır.
- Sunucunuz birkaç saat kapalı kalırsa abonelik silinir ve sunucu geri geldiğinde de SMS gitmez. Kimse fark etmezse mağaza haftalarca bildirimsiz çalışır.
Çözüm iki parçalı. Her webhook'un X-Shopify-Webhook-Id değerini kaydedin ve aynı kimlik ikinci kez geldiğinde işlemi atlayın. Ayrıca günde bir kez Shopify API'den webhook aboneliklerini listeleyip eksik olanı yeniden oluşturan bir kontrol çalıştırın.
Netgsm hata kodlarını nasıl yorumlamalı?
Netgsm'in eski API'si sayısal kodlar, yeni API'si HTTP durumu ile birlikte metin kodları döner. Sahada en sık karşılaştıklarımız ve yapılacak iş:
| Yanıt | Anlamı | Entegrasyonun yapması gereken |
|---|---|---|
Eski API 00 | SMS Netgsm sistemine ulaştı | Dönen iş kimliğini sipariş kaydına yazın |
Eski API 30 / HTTP 401 | Kullanıcı adı, şifre veya API izni hatalı; IP kısıtlaması dışından istek | Tekrar denemeyin, yöneticiye alarm gönderin |
Eski API 40 / REJECTED_HEADER | Başlık hesapta tanımlı değil veya onaysız | Tekrar denemeyin, başlık adını Netgsm panelindekiyle karşılaştırın |
INSUFFICIENT_CREDIT | SMS kredisi bitti | Mesajı kuyrukta tutun, kredi yüklenince gönderin |
NO_DELIVERABLE_MESSAGES (HTTP 422) | İstekteki numaraların hiçbiri gönderilebilir değil | Numara biçimlendirme fonksiyonunu kontrol edin |
HTTP 429 / 503 | İstek sınırı aşıldı veya servis geçici olarak kullanılamıyor | Retry-After süresi kadar bekleyip yeniden deneyin |
| Zaman aşımı / bağlantı hatası | Netgsm isteği işlemiş olabilir | Yeniden göndermeyin; önce raporu sorgulayın |
Tablonun son satırı en pahalı hatayı anlatıyor. Netgsm'in SDK'sı bu durumu mayHaveBeenProcessed alanıyla işaretler: bağlantı koptuğunda Netgsm isteği almış ve SMS'i kuyruğa koymuş olabilir. Bağlantı hatasında SMS'i körlemesine yeniden gönderen bir entegrasyon, ağ dalgalanması olan her gün bir grup müşteriye çift mesaj atar.
Bakiye bitince siparişler sessizce SMS'siz mi kalır?
Evet. Kredi bittiğinde Netgsm gönderimi reddeder ama Shopify'da hiçbir şey değişmez: sipariş oluşur, kargo çıkar, müşteri yalnızca SMS almaz. Bakiyeyi her gönderimden önce sorgulamayın. Netgsm'e göre bakiye sorgusu dakikada 60 istekle sınırlı ve yanıt 10 saniye önbellekte tutuluyor. Günde bir kez sorgulayıp önceki 7 günün ortalama tüketiminin 3 katının altına düştüğünde e-posta alarmı gönderen bir kontrol yeterli.
Webhook aboneliği kontrolü, bakiye alarmı ve rapor tamamlama, entegrasyon canlıya çıktıktan sonra her gün çalışması gereken üç iştir. Bu kontrolleri kendi ekibinizde takip edecek kimse yoksa, Shopify teknik destek ve bakım hizmetimiz bu kontrolleri izlemeye alır ve sessiz bir arıza müşteri şikâyetine dönüşmeden müdahale eder.
Sahadan: Netgsm entegrasyonlarında en sık gördüğümüz 5 hata
Nodus Works olarak Türkiye'deki Shopify mağazalarında kurduğumuz ve devraldığımız SMS entegrasyonlarında aynı beş hata tekrar ediyor. Hiçbiri Netgsm API'sinin kendisinden kaynaklanmıyor; hepsi Shopify verisinin SMS'e çevrildiği aradaki katmanda çıkıyor.
1. Kargo SMS'inin takip linki olmadan gitmesi
Depo ekibi siparişi önce "gönderildi" olarak işaretleyip takip numarasını birkaç saat sonra girdiğinde fulfillments/create webhook'u boş takip alanıyla gelir. Entegrasyon SMS'i hemen gönderirse müşteri linksiz bir "kargoya verildi" mesajı alır ve takip numarasını müşteri hizmetlerinden sorar. Çözüm: SMS'i tracking_number alanı dolduğunda gönderin. Alan boşsa fulfillments/update olayını bekleyin. Kargo firmasıyla Shopify arasındaki takip numarası akışını Shopify kargo entegrasyonu rehberimizde firma firma anlattık.
2. Kapıda ödeme müşterisine "Ödemeniz alındı" gitmesi
İlk bölümde anlattığımız orders/create sorunu, devraldığımız entegrasyonlarda en sık gördüğümüz şablon hatası. Siparişin ödeme yöntemini (payment_gateway_names) kontrol etmeyen entegrasyon, kapıda ödeme müşterisine "ödemeniz alındı" yazar. Kapıda ödeme oranı yüksek mağazalarda bu mesaj, müşterinin kapıda "ben zaten ödedim" diyerek paketi reddetmesine yol açabiliyor.
3. Sıfırla başlayan numaraların reddedilmesi
Teslimat adresine 0532... yazan müşterinin numarası, biçimlendirme olmadan Netgsm'e 0532... olarak gider ve reddedilir. Bu hata loglarda NO_DELIVERABLE_MESSAGES olarak görünür ama kimse logları okumadığı için fark edilmez. Bir önceki bölümdeki biçimlendirme fonksiyonu bu hatayı tamamen ortadan kaldırır.
4. Sunucusuz ortam ile IP kısıtlamasının çakışması
Entegrasyon geliştiricisi Netgsm panelinde güvenlik için IP kısıtlaması açar, gönderimi ise sabit IP'si olmayan bir sunucusuz ortamdan yapar. Testler geliştiricinin kendi bilgisayarından geçer, canlıda her istek 30 koduyla döner. Canlıya çıkıştan önce testi, entegrasyonun gerçekten çalışacağı ortamdan yapın.
5. Kampanya mesajının bilgilendirme kuyruğundan çıkması
Sepet hatırlatmasını sipariş SMS'leriyle aynı fonksiyondan ve aynı iysFilter: NONE ayarıyla gönderen entegrasyonlar gördük. Bu durumda İYS'de onayı olmayan müşteri de indirim kodlu SMS alır. Bu hatanın teknik bir belirtisi yoktur; gönderim başarılı görünür. Ancak yasal açıdan izinsiz ticari ileti sayılır. Ticari ve bilgilendirme gönderimlerini ayrı kuyruklara, ayrı filtre ayarlarıyla bölün.
Shopify Netgsm SMS entegrasyonu hakkında sık sorulan sorular
Shopify'da Netgsm ile ücretsiz SMS gönderebilir miyim?
Hayır, Netgsm üzerinden giden her SMS hesabınızdaki paketten düşer. Ücretsiz olan tek ortam, Netgsm'in sandbox'ıdır (ext-sandbox.netgsm.com.tr); orada token ve gönderim akışını uçtan uca test edersiniz ama gerçek SMS gitmez. Hazır uygulama kullanıyorsanız Netgsm paket ücretine ek olarak uygulamanın aylık ya da mesaj başı ücretini de hesaba katın.
Netgsm'in Shopify uygulaması neden kurulamıyor?
Netgsm'in "Netgsm SMS" uygulamasının Shopify App Store sayfası, 13 Kasım 2026 itibarıyla uygulamanın mağazada mevcut olmadığını gösteriyor ve destek için Netgsm'e yönlendiriyor. Bu durumda üç seçeneğiniz var: Netgsm'i tanıyan başka bir hazır uygulama, Shopify Flow ile ara servis ya da webhook dinleyen özel uygulama. Uygulamanın geri dönüp dönmeyeceğini Netgsm'e doğrudan sorun.
Sipariş ve kargo SMS'leri için İYS izni gerekir mi?
Hayır. Müşterinin verdiği siparişin durumunu bildiren sipariş onayı, kargo ve iade mesajları bilgilendirme niteliğindedir ve İYS onayı gerektirmez. Ancak bu mesajlara indirim kodu, kampanya ya da ürün önerisi eklerseniz mesaj ticari ileti sayılır ve İYS'de onay kaydı gerekir. Netgsm'de bu mesajları iysFilter: NONE ile gönderin.
Türkçe karakterli bir SMS kaç karakter olur?
Netgsm'in TURKISH kodlamasında tek SMS 155 karakterdir; birden fazla parçaya bölünen mesajlarda her parça 148 karakter taşır. Bu kodlamada "ç, ğ, ı, ş, Ğ, İ, Ş" harfleri ikişer karakter sayılır. Mesaja emoji eklerseniz kodlama UNICODE'a geçer ve tek SMS sınırı 70 karaktere düşer.
Terk edilen sepet SMS'i Netgsm ile gönderilebilir mi?
Evet. Tek şart, müşterinin İYS'de SMS onayının kayıtlı olması. Shopify Flow'un "Customer abandons checkout" tetikleyicisi bir ara servis üzerinden Netgsm'e istek atar. Gönderim iysFilter: BRAND ile yapılır ve Netgsm onayı olmayan numaraları çıkarır. Hatırlatma ticari ileti sayıldığı için İYS bağlantısı kurulmadan bu akışı açmayın.
Netgsm 30 hata kodu ne anlama gelir?
30 kodu, kullanıcı adının ya da şifrenin hatalı olduğunu veya API alt kullanıcısının API erişim izninin bulunmadığını gösterir. IP kısıtlaması açtıysanız ve istek izin verilen IP dışından geliyorsa da aynı kodu alırsınız. Sunucusuz ortamlardan (örneğin Cloudflare Workers) yapılan gönderimlerde sabit IP olmadığı için IP kısıtlaması bu hatayı üretir.
Aynı müşteriye iki SMS gitmesini nasıl engellerim?
Shopify, 5 saniye içinde yanıt alamadığı webhook'u yeniden gönderir; Netgsm ise aynı isteği tekilleştirmez. Her webhook'un X-Shopify-Webhook-Id değerini kaydedin ve tekrar geleni atlayın. Netgsm isteğinde bağlantı koparsa SMS'i yeniden göndermeyin, önce raporu sorgulayın.
Sipariş bildirimi için WhatsApp mı SMS mi kullanmalıyım?
İkisini birlikte kullanın ve rollerini ayırın. SMS, internet bağlantısı ve uygulama gerektirmeden her telefona ulaşır; kargo ve kapıda ödeme onayı gibi kaçırılmaması gereken mesajlarda öndedir. WhatsApp ise görsel, buton ve iki yönlü yazışma isteyen akışlarda öne çıkar. Mağazaya WhatsApp kanalını ekleme seçeneklerini Shopify WhatsApp eklentisi rehberimizde karşılaştırdık.
Sonuç: SMS altyapısını hangi sırayla kurmalı?
Shopify Netgsm SMS entegrasyonunu tek seferde değil, risk sırasıyla kurun. Önerdiğimiz sıra şu:
- Hazırlık: Başlık başvurusunu ve API alt kullanıcısını ilk gün açın.
- Bilgilendirme akışları: Sipariş, kargo ve iptal SMS'lerini
iysFilter: NONEile canlıya alın. - İzleme: Teslim raporu webhook'unu, bakiye alarmını ve webhook aboneliği kontrolünü kurun.
- Ticari akışlar: İYS izin senkronu çalıştıktan sonra sepet hatırlatması ve kampanya SMS'lerini ayrı bir kuyrukta açın.
Bu sıra, hukuki risk taşıyan ticari mesajları altyapı kanıtlanana kadar dışarıda tutar. Bilgilendirme akışlarında yapılan bir hata en kötü ihtimalle bir müşteri şikâyeti üretir; ticari akıştaki bir filtre hatası ise izinsiz ticari ileti sayılır. İlk iki haftayı yalnızca bilgilendirme SMS'leriyle geçirin ve teslim raporlarında başarısız gönderim oranını izleyin. Oran yüzde 2'nin altına inip çift SMS şikâyeti gelmediğinde altyapı ticari akışa hazırdır. Mağazanız kapıda ödeme, ERP ya da çok depolu gönderim gibi hazır uygulamaların görmediği akışlar kullanıyorsa, kurulumu Shopify entegrasyon ve özel uygulama geliştirme hizmetimiz üzerinden birlikte planlayalım; ilk görüşmede mevcut akışınızı ve hangi SMS'lerin önce kurulacağını netleştiririz.
SMS'i yalnızca bildirim için değil, müşteri girişi için de kullanmayı düşünüyorsanız sıradaki adım tek kullanımlık kodla girişi kurmak. Shopify SMS OTP giriş rehberimiz, müşteri hesaplarına telefon numarasıyla girişi kimlik sağlayıcı ve KVKK uyumlu üyelik formuyla birlikte anlatıyor. Netgsm'in sms.sendOtp işlemi, o akışta kod gönderen SMS servisi olarak kullanılabilir.

.png)



