---
title: "API ile SMS Gönderme: Python, Node.js, PHP ve cURL Örnekleri"
description: "Python, Node.js, PHP ve cURL ile SMS API: tekli ve toplu gönderim, Unicode ve Arapça, segment sayımı, iletim durumu webhook'ları ve hata yönetimi."
canonical: "https://omnichannels.ai/tr/blog/send-sms-api-examples/"
language: "tr"
updated: "2026-10-16"
publisher: "BroadNet Technologies"
brand: "OmniChannels.ai"
category: "integration"
primaryQuery: "sms api python"
keywords: ["python ile sms gönderme", "sms api node.js örneği", "sms api php", "sms api curl", "sms api unicode arapça", "sms iletim raporu webhook", "toplu sms api örneği"]
published: "2026-10-16"
author: "OmniChannels.ai Editorial Team"
reviewer: "BroadNet Messaging Solutions Team"
readingMinutes: 10
answer: "OmniChannels.ai API'siyle SMS göndermek için https://api.broadnet.me/sms/sendSms adresine senderId, destinationNumber, message ve messageType içeren bir JSON gövdesiyle kimliği doğrulanmış bir POST yapın. GSM-7 metin için TEXT, Arapça veya emoji için UNICODE kullanın. 200 yanıtı mesaj kimliğini düz metin olarak döndürür; nihai iletim durumu daha sonra webhook'unuza gelir."
takeaways: ["POST /sms/sendSms dört alan ister: senderId, destinationNumber, message ve messageType; yanıt gövdesi JSON değil, düz metin olarak mesaj kimliğidir.", "Arapça, emoji veya GSM-7 dışındaki herhangi bir karakter için messageType değerini UNICODE yapın; böyle tek bir karakter tüm mesajı Unicode yapar ve her segmenti kısaltır.", "POST /sms/identify göndermeden önce karakterleri ve segmentleri sayar; böylece bir mesajın kaç segment kullanacağını öngörebilirsiniz.", "İletim asenkrondur: 200 kabul edildi demektir; DELIVERED, FAILED veya REJECTED durumu daha sonra webhook'unuza gelir.", "API'de idempotency anahtarı yoktur; bu yüzden her gönderimi çağrıdan önce kaydedin ve zaman aşımından sonra yeniden göndermek yerine durumu kontrol edin."]
faq: 
  - q: "Python ile SMS nasıl gönderirim?"
    a: "requests kütüphanesiyle https://api.broadnet.me/sms/sendSms adresine Authorization: Bearer başlığıyla ve senderId, destinationNumber, message ve messageType alanlarıyla JSON POST yapın. Token'ı bir ortam değişkeninden okuyun. 200 yanıt gövdesi mesaj kimliğini düz metin olarak verir; bu yüzden r.json() yerine r.text kullanın."
  - q: "SMS API hangi telefon numarası biçimini bekler?"
    a: "Ülke kodu artı ulusal numara, yalnızca rakamlar; artı işareti, 00 öneki, boşluk veya baştaki sıfır olmadan. Örneğin 447700900123 geçerlidir; +44 7700 900123 ve 07700900123 geçerli değildir. Numaraları kendi veritabanınızda E.164 olarak saklayın ve isteği oluştururken artı işaretini çıkarın."
  - q: "API üzerinden Arapça SMS nasıl gönderirim?"
    a: "messageType değerini UNICODE yapın ve Arapça metni message alanında UTF-8 olarak gönderin. Unicode mesajlar tek segmentte 70, bölündüğünde segment başına 67 karakter alır; GSM-7'de bu rakamlar 160 ve 153'tür. Gerçek cihazlarda test edin ve önce segment sayısını görmek için /sms/identify'ı çağırın."
  - q: "İletim raporlarını nasıl alırım?"
    a: "Durumlar hesabınızda yapılandırılan webhook URL'sine itilir. Mesajlar SUBMITTED ve SENT aşamalarından DELIVERED, FAILED veya REJECTED durumuna ilerler. Uç noktanız ham olayı saklamalı, hızla 2xx yanıtlamalı ve asenkron işlemelidir. Olaylar kaçırıldıysa POST /sms/resendDlr bir tarih aralığı için iletim raporlarını yeniden itebilir."
  - q: "Aynı anda çok sayıda numaraya nasıl SMS gönderirim?"
    a: "POST /sms/sendbulk kullanın; bu, bir destinationNumberFile (CSV veya TXT) ile senderId, message ve messageType içeren bir bulkRequest JSON dizesi taşıyan multipart bir istektir. Yanıt kaç numaranın geçerli, geçersiz veya mükerrer olduğunu bildirir ve kampanyanızla saklayabileceğiniz bir bulkSessionId döndürür."
  - q: "Gönderici kimliği kaydettirmem gerekir mi?"
    a: "Birçok ülkede evet. Bazıları onaylı bir alfanümerik gönderici kimliği, diğerleri API'nin peId ve templateId gibi isteğe bağlı alanlarda kabul ettiği düzenleyici veya şablon tanımlayıcıları ister. Koşullar ülkeye özgüdür; bu yüzden hedef ülkeniz için gönderici kimliği sayfasına bakın; kaydı sizinle birlikte ekibimiz yürütebilir."
sources: 
  - title: "3GPP TS 23.040: Kısa Mesaj Servisi'nin (SMS) teknik gerçekleştirimi"
    url: "https://www.3gpp.org/dynareport?code=23040"
  - title: "ITU-T E.164: Uluslararası kamu telekomünikasyon numaralandırma planı"
    url: "https://www.itu.int/rec/T-REC-E.164"
  - title: "RFC 9110: HTTP Semantiği"
    url: "https://www.rfc-editor.org/rfc/rfc9110"
---

# API ile SMS Gönderme: Python, Node.js, PHP ve cURL Örnekleri

Canonical: https://omnichannels.ai/tr/blog/send-sms-api-examples/
Language: tr
Publisher: OmniChannels.ai by BroadNet Technologies

Bu rehber, bir uygulamadan SMS göndermesi gereken ve Python, Node.js, PHP veya cURL ile çalışan kod isteyen geliştiriciler için hazırlandı. Yalnızca [SMS API referansımızdaki](/developers/sms/) ve OpenAPI belirtimimizdeki uç noktaları ve alanları kullanarak tekli gönderimi, Unicode ve Arapçayı, segment saymayı, toplu yüklemeyi, iletim durumu webhook'larını ve hata yönetimini kapsar.

## API ile SMS nasıl gönderirim?

JSON gövdesiyle `/sms/sendSms` adresine kimliği doğrulanmış bir `POST` yapın. Yanıt, mesaj kimliğini düz metin olarak içeren `200 OK`'tir.

| Öğe | Değer |
|---|---|
| Temel URL | `https://api.broadnet.me` (`/v1` öneki yok) |
| Uç nokta | `POST /sms/sendSms` |
| Kimlik doğrulama | `Authorization: Bearer $BROADNET_TOKEN` |
| İçerik türü | `application/json` |
| Zorunlu alanlar | `senderId`, `destinationNumber`, `message`, `messageType` |

Test kimlik bilgileri kısa bir erişim talebinden sonra verilir ve test gönderimleri doğrulanmış kendi numaralarınıza gider. Anında self-servis kayıt yoktur. [Hızlı başlangıca](/developers/quickstart/) bakın.

```bash
curl -X POST https://api.broadnet.me/sms/sendSms \
  -H "Authorization: Bearer $BROADNET_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "senderId": "OmniDemo",
    "destinationNumber": "447700900123",
    "message": "Your OmniDemo code is 482913",
    "messageType": "TEXT"
  }'
```

```js
// Node.js 18+ (yerleşik fetch)
const res = await fetch("https://api.broadnet.me/sms/sendSms", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.BROADNET_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    senderId: "OmniDemo",
    destinationNumber: "447700900123",
    message: "Your OmniDemo code is 482913",
    messageType: "TEXT",
  }),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const messageId = await res.text(); // düz metin mesaj kimliği
```

```python
import os
import requests

r = requests.post(
    "https://api.broadnet.me/sms/sendSms",
    headers={"Authorization": f"Bearer {os.environ['BROADNET_TOKEN']}"},
    json={
        "senderId": "OmniDemo",
        "destinationNumber": "447700900123",
        "message": "Your OmniDemo code is 482913",
        "messageType": "TEXT",
    },
    timeout=15,
)
r.raise_for_status()
message_id = r.text  # düz metin mesaj kimliği, JSON değil
```

```php
<?php
$payload = json_encode([
    "senderId" => "OmniDemo",
    "destinationNumber" => "447700900123",
    "message" => "Your OmniDemo code is 482913",
    "messageType" => "TEXT",
]);

$ch = curl_init("https://api.broadnet.me/sms/sendSms");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 15,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("BROADNET_TOKEN"),
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => $payload,
]);
$messageId = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);
echo $status . " " . $messageId . PHP_EOL;
```

Başarılı bir yanıt gövdesi şöyle görünür:

```text
2603121407537573731
```

Bu kimliği kendi kaydınızla, örneğin bir sipariş veya giriş denemesiyle birlikte saklayın. İletim durumlarını daha sonra eşleştirmenin yolu budur.

## Telefon numaralarını nasıl biçimlendirmeliyim?

Ülke kodu artı ulusal numara kullanın, yalnızca rakamlarla. Biçim, artı işareti hariç ITU-T E.164 uluslararası numaralandırma planını izler.

| Girdi | Geçerli mi? | Neden |
|---|---|---|
| `447700900123` | Evet | 44 ülke kodu artı ulusal numara |
| `+44 7700 900123` | Hayır | Artı işaretini ve boşlukları kaldırın |
| `07700900123` | Hayır | Baştaki 0'ı ülke koduyla değiştirin |

Numaraları veritabanınızda E.164 olarak (`+447700900123`) saklayın ve isteği oluştururken `+` işaretini çıkarın. Ücretsiz telefon numarası biçimlendiricimiz hızlı bir kontrol sağlar.

## Arapça, emoji veya diğer Unicode metni nasıl gönderirim?

`messageType` değerini `UNICODE` yapın. GSM-7 alfabesinin dışındaki her karakter; Arapça harf, emoji, kıvrık tırnak veya uzun çizgi gibi; tüm mesajı Unicode'a geçirir.

```python
r = requests.post(
    "https://api.broadnet.me/sms/sendSms",
    headers={"Authorization": f"Bearer {os.environ['BROADNET_TOKEN']}"},
    json={
        "senderId": "OmniDemo",
        "destinationNumber": "971500000000",
        "message": "رمز التحقق الخاص بك هو 482913",
        "messageType": "UNICODE",
        "campaignName": "login-otp",
    },
    timeout=15,
)
```

PHP'de `json_encode` çağırırken `JSON_UNESCAPED_UNICODE` kullanın. Kodlama, 3GPP TS 23.040'ta SMS için tanımlandığı gibi segment boyutunu belirler:

| `messageType` | Tek SMS | Bölündüğünde segment başına | Kullanım |
|---|---|---|---|
| `TEXT` | 160 karakter | 153 karakter | Yalnızca GSM-7 alfabesini kullanan metin |
| `UNICODE` | 70 karakter | 67 karakter | Arapça, Kiril, Çince, emoji |

Çoğu operatör segment başına faturalar; bu yüzden uzun bir Arapça mesaj, aynı uzunluktaki Latin yazılı mesajdan daha pahalıya gelir. [Unicode ve Arapça SMS rehberimizi](/tr/blog/sms-character-limits-unicode-arabic/) okuyun ve SMS karakter sayacını deneyin.

## Göndermeden önce segmentleri nasıl sayarım?

Mesajla `POST /sms/identify` çağırın. Tespit edilen kodlamayı, karakter sayısını, segment sayısını ve segment başına sınırı döndürür.

```bash
curl -X POST https://api.broadnet.me/sms/identify \
  -H "Authorization: Bearer $BROADNET_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "message": "Your OmniDemo code is 482913" }'
```

```json
{
  "message": "Your OmniDemo code is 482913",
  "messageType": "TEXT",
  "smscount": 1,
  "charCount": 28,
  "charLimit": 160
}
```

`smsParts` (`smscount`'tan), `charCount` ve `charLimit` değerlerini bir gönderim isteğine aktarabilirsiniz. GSM-7 metin yanıtta `GSM-7` olarak etiketlenebilir; bunu `TEXT` olarak gönderin.

## Çok sayıda numaraya nasıl gönderirim?

Bir alıcı dosyası ve ayarların JSON dizesiyle `multipart/form-data` bir istek olan `POST /sms/sendbulk` kullanın.

```bash
curl -X POST https://api.broadnet.me/sms/sendbulk \
  -H "Authorization: Bearer $BROADNET_TOKEN" \
  -F destinationNumberFile=@recipients.csv \
  -F 'bulkRequest={"senderId":"OmniDemo","message":"Your statement is ready in the app.","messageType":"TEXT","campaignName":"oct-statements","allowDuplicate":false}'
```

```python
import json
import os
import requests

bulk_request = {
    "senderId": "OmniDemo",
    "message": "Your statement is ready in the app.",
    "messageType": "TEXT",
    "campaignName": "oct-statements",
    "allowDuplicate": False,
}

with open("recipients.csv", "rb") as f:
    r = requests.post(
        "https://api.broadnet.me/sms/sendbulk",
        headers={"Authorization": f"Bearer {os.environ['BROADNET_TOKEN']}"},
        files={"destinationNumberFile": ("recipients.csv", f, "text/csv")},
        data={"bulkRequest": json.dumps(bulk_request)},
        timeout=60,
    )
print(r.json())
```

Yanıt, `bulkSessionId` ile `total`, `validCount`, `invalidCount` ve `duplicate` içeren bir `bulkListInfo` nesnesi içerir. `bulkSessionId` değerini kampanyayla birlikte saklayın. İşler referanstaki uç noktalarla listelenebilir, duraklatılabilir, sürdürülebilir ve iptal edilebilir. Büyük bir gönderimden önce numaraları `POST /sms/lookup` ile de kontrol edebilirsiniz; [HLR sorgusu rehberimize](/tr/blog/hlr-lookup-number-validation/) bakın.

## İletim durumunu nasıl alırım?

İletim durumları hesabınızda yapılandırılan webhook URL'sine itilir. Bir mesaj `SUBMITTED` ve `SENT` aşamalarından `DELIVERED` durumuna ilerler ya da `FAILED` veya `REJECTED` olarak sonlanır. Ekibimize herkese açık HTTPS URL'sini verirsiniz; bayiler alt hesap başına bir webhook alabilir.

Yük alanları kanala göre değişir ve API belirtimi tek bir webhook şeması tanımlamaz; bu yüzden önce ham gövdeyi günlüğe alın ve alanları hesabınızdaki gerçek bir olaydan eşleyin. Asgari bir alıcı olayı saklar ve hızla onaylar:

```js
import express from "express";

const app = express();

app.post("/webhooks/omnichannels", express.json(), async (req, res) => {
  await saveStatusEvent(req.body); // kendi depolamanız; asenkron işleyin
  res.sendStatus(200);             // hızla onaylayın
});

app.listen(3000);
```

İşlemeyi idempotent yapın; çünkü aynı durum iki kez gelebilir ve geç gelen bir `SENT` saklanmış bir `DELIVERED`'ın üzerine asla yazmamalıdır. Uç noktanız çalışmıyorsa `POST /sms/resendDlr` bir tarih aralığı için raporları yeniden iter:

```bash
curl -X POST https://api.broadnet.me/sms/resendDlr \
  -H "Authorization: Bearer $BROADNET_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "startDate": "2026-10-09",
    "endDate": "2026-10-10",
    "senderId": "OmniDemo",
    "messageStatus": "DELIVERED"
  }'
```

[Webhook rehberinde](/developers/webhooks/) ve mesaj iletim durumları açıklaması yazısında daha fazlasını okuyun.

## Hataları nasıl yönetir ve mükerrer gönderimden nasıl kaçınırım?

Önce HTTP durumunu, sonra hata gövdesini ele alın. Yalnızca ağ hatalarını, `429` ve `5xx` durumlarını yeniden deneyin.

| Kod | Anlamı | Eylem |
|---|---|---|
| `200` | Kabul edildi | Kimliği saklayın |
| `400` | Doğrulama hatası veya eksik alan | İsteği düzeltin |
| `401` / `403` | Hatalı token veya izin verilmeyen işlem | Düzeltin; yeniden denemeyin |
| `429` | Hız sınırı aşıldı | `Retry-After` süresini bekleyin |
| `500`, `503`, `504` | Sunucu veya yukarı akış sorunu | Backoff ve jitter ile yeniden deneyin |

API'nin döndürdüğü hatalar `status`, `error`, `message`, `errorCode` ve `requestUri` alanlı beş alanlı bir JSON gövdesi kullanır. Belgelenmiş varsayılan REST limiti sürekli saniyede 200 istektir; hesabınızın limitleri kimlik bilgilerinizle birlikte teyit edilir.

API idempotency anahtarı kabul etmez. Bir istek başarılı olurken yanıtı kaybolabilir ve kör bir yeniden deneme iki kez gönderir. Çağırmadan önce kendi işlem kimliğinizle anahtarlanmış bir bekleyen satır yazın, dönen mesaj kimliğini saklayın ve zaman aşımından sonra yeniden göndermeden önce bir webhook durumu olup olmadığına bakın. Toplu gönderimlerde `allowDuplicate` değerini `false` yapın. Ayrıntılar [Hatalar ve limitler](/developers/errors-and-limits/) sayfasında.

## Örnek senaryo: Bölgesel bir uygulama için giriş kodları

BAE'li bir perakendeci olan "Souq Rafiq" (kurgusal) giriş kodlarını SMS ile gönderir.

1. Kimlik doğrulama servisi altı haneli bir kod üretir, beş dakikalık geçerlilikle bir hash saklar ve `pending` bir gönderim satırı yazar.
2. Arapça kullanıcılar için `messageType=UNICODE`, İngilizce kullanıcılar için `TEXT` ile `/sms/sendSms` çağırır.
3. `200` alınca mesaj kimliğini saklar.
4. Webhook işleyicisi satırı `DELIVERED`, `FAILED` veya `REJECTED` olarak işaretler.
5. Kısa bir beklemeden sonra durum `DELIVERED` değilse uygulama yeniden gönderme ve yapılandırılmışsa başka bir kanal sunar. Kanal fallback'ine bakın.
6. Numara ve IP başına kod isteği sınırları kötüye kullanıma karşı korur; bkz. [SMS pumping önleme](/tr/blog/sms-pumping-fraud-prevention/).

## Yaygın hatalar nelerdir?

- **Gönderim yanıtında `r.json()` çağırmak.** Yanıt düz metindir.
- **Yanlış alan adları.** `senderId`, `destinationNumber` ve `message` kullanın; `to`, `from` veya `text` gibi alanlar bu uç noktanın parçası değildir.
- **Numaralarda artı işareti ve baştaki sıfır.**
- **Arapça için `UNICODE`'u unutmak;** bu, metni bozar.
- **Kayıtsız gönderici kimlikleri.** Bazı ülkeler bunları engeller veya değiştirir; hedef ülkeniz için gönderici kimliği kurallarını kontrol edin ve kaydı bizden isteyin.
- **`200`'ü iletildi saymak.**
- **Token'ın bir mobil uygulamada veya tarayıcıda olması;** orada herkes onu çıkarabilir.
- **Limitler:** bu rehber yaygın isteği gösterir. Zamanlama biçimleri gibi isteğe bağlı alanlar ekibimizle teyit edilmelidir.

## OmniChannels.ai nasıl yardımcı olur?

OmniChannels.ai, A2P SMS'i BroadNet'in doğrudan operatör bağlantısı üzerinden; iki yönlü SMS, gönderici kimlikleri, Unicode ve Arapça, HLR sorgusu ve yüksek hacim için SMPP 3.4 ile gönderir. `https://api.broadnet.me` adresindeki REST API Bearer token kullanır, ayrıca WhatsApp, RCS ve diğer kanalları kapsar; iletim durumları tek bir webhook biçiminde normalleştirilir. Ekibimiz gönderici kimliği kayıtlarını sizinle birlikte hazırlar. [SMS API referansına](/developers/sms/) veya SMS kanalına bakın.
