# Mesaj gönderme

Mesajlar `POST https://whatsappapi.netgsm.com.tr/v1/netgsm/whatsapp/messages/` adresine, sonuna mesaj türü eklenerek gönderilir: `text`, `template`, `image`, `video`, `document`, `audio`, `location`, `replyReaction`, `markAsRead` (örneğin `.../messages/text`). Başarılı gönderimde `data.id` mesajın kimliğidir; durumu (iletildi, okundu) mesaj geçmişinden ya da [bildirimlerden](https://api-docs.netgsm.com.tr/guides/whatsapp/whatsapp-api-webhook.md) izlenir.

## Metin

WhatsApp, serbest mesaja yalnız son 24 saatte size yazmış kişiye izin verir; diğer durumda şablon kullanılır.

```json
{
  "method": "POST",
  "url": "https://whatsappapi.netgsm.com.tr/v1/netgsm/whatsapp/messages/text",
  "auth": "Basic  kullanıcı:şifre",
  "headers": {
    "Content-Type": "application/json"
  },
  "body": {
    "to": "905321112233",
    "message": "Merhaba, siparişiniz hazır."
  }
}
```

Yanıt `200`:

```json
{
  "status": true,
  "data": {
    "id": "d9481186-ee5a-45a3-8859-f1a16c060e45",
    "to": "905321112233",
    "from": "908501110077",
    "from_user_id": null,
    "to_user_id": null,
    "profile_name": null,
    "username": null,
    "status": "sending",
    "reactions": [],
    "custom": {},
    "created_at": "2026-03-11 11:07:20",
    "updated_at": "2026-03-11 11:07:20",
    "view_at": null,
    "component": "text",
    "template_payload": null,
    "text": { "message": "Merhaba, siparişiniz hazır. " }
  }
}
```

**Tarih biçimi:** yanıtlardaki tarihler (`created_at`, `updated_at`, `view_at`) **yıl-gün-ay** biçimindedir: `YYYY-DD-MM HH:mm:ss`, Türkiye saati. Örnekteki `2026-03-11 11:07:20` = 3 Kasım 2026, 11:07. Mesaj geçmişi filtresine gönderilen `start_date` / `end_date` ise normal `YYYY-MM-DD HH:mm:ss`'dir.

Birden fazla numaranız varsa gönderen `from` ile seçilir:

```json
{
  "method": "POST",
  "url": "https://whatsappapi.netgsm.com.tr/v1/netgsm/whatsapp/messages/text",
  "auth": "Basic  kullanıcı:şifre",
  "headers": {
    "Content-Type": "application/json"
  },
  "body": {
    "to": "905321112233",
    "message": "Merhaba",
    "from": "908501110078"
  }
}
```

## Şablon

Şablon onaylı (`APPROVED`) olmalıdır. Değişkenler (`{{1}}`, `{{2}}`) `components` içinde sırayla verilir.

**Sıralı değişkenler** (`{{1}}`, `{{2}}` …). Şablonun metni şöyle olsun:

> Merhaba **{{1}}**, kargonuz 2 iş günü içinde teslim edilecektir. **{{2}}** dileriz.

Değerler `parameters` içinde aynı sırayla yazılır: 1. satır `{{1}}`'in, 2. satır `{{2}}`'nin yerine geçer.

```json
{
  "method": "POST",
  "url": "https://whatsappapi.netgsm.com.tr/v1/netgsm/whatsapp/messages/template",
  "auth": "Basic  kullanıcı:şifre",
  "headers": { "Content-Type": "application/json" },
  "body": {
    "to": "905321112233",
    "template": "kargo_teslim",
    "language": "tr",
    "components": [
      {
        "type": "body",
        "parameters": [
          { "type": "text", "text": "Ahmet Bey" },
          { "type": "text", "text": "İyi günler" }
        ]
      }
    ]
  }
}
```

Giden mesaj: "Merhaba **Ahmet Bey**, kargonuz 2 iş günü içinde teslim edilecektir. **İyi günler** dileriz."

**Adlı değişkenler** (`{{musteri_adi}}` gibi). Şablon metni:

> Merhaba **{{musteri_adi}}**, **{{siparis_no}}** numaralı siparişiniz hazırlandı.

Her değerin yanına `parameter_name` ile değişkenin adı yazılır:

```json
{
  "method": "POST",
  "url": "https://whatsappapi.netgsm.com.tr/v1/netgsm/whatsapp/messages/template",
  "auth": "Basic  kullanıcı:şifre",
  "headers": { "Content-Type": "application/json" },
  "body": {
    "to": "905321112233",
    "template": "siparis_hazirlandi",
    "language": "tr",
    "components": [
      {
        "type": "body",
        "parameters": [
          { "type": "text", "parameter_name": "musteri_adi", "text": "Ahmet" },
          { "type": "text", "parameter_name": "siparis_no", "text": "12345" }
        ]
      }
    ]
  }
}
```

Değişkeni olmayan şablonda `components` gönderilmez. Değişken sayısı şablondakiyle aynı olmalıdır; eksik ya da fazla değer gönderilirse WhatsApp isteği reddeder. Hangi şablonda kaç değişken olduğu ve biçimi (`parameter_format`: `POSITIONAL` / `NAMED`) şablon listesinden görülür.

```json
{
  "method": "POST",
  "url": "https://whatsappapi.netgsm.com.tr/v1/netgsm/whatsapp/messages/template",
  "auth": "Basic  kullanıcı:şifre",
  "headers": {
    "Content-Type": "application/json"
  },
  "body": {
    "to": "905321112233",
    "template": "siparis_hazir",
    "language": "tr",
    "components": [
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "Mehmet"
          }
        ]
      }
    ]
  }
}
```

Yanıt `200`:

```json
{
  "status": true,
  "data": {
    "id": "bceb4fb2-d72f-48cf-8e77-0e8fbc9448fb",
    "to": "905321112233",
    "from": "908501110077",
    "status": "sending",
    "component": "template",
    "template_payload": {
      "name": "siparis_hazir",
      "language": "tr",
      "components": [{ "type": "body", "parameters": [{ "type": "text", "text": "Mehmet" }] }]
    },
    "template": { "message": "<WP_BODY> Merhaba {{1}}, siparişiniz hazır. </WP_BODY>  " }
  }
}
```

Onayı beklenen şablonda yanıt `400`:

```json
{
  "status": false,
  "httpStatus": 400,
  "message": "Template PENDING",
  "error": { "error": { "code": 132001, "message": "Template PENDING" } }
}
```

## Doğrulama kodu (OTP)

OTP, doğrulama (`AUTHENTICATION`) şablonuyla gönderilir. Her numarada kurulumda `netgsm_verify_code` şablonu açılır; kod hem gövdeye hem "Kodu kopyala" düğmesine verilir. Numarasını gizlemiş kişiye (`TR.…`) doğrulama şablonu gönderilemez, alıcı telefon numarası olmalıdır. Ücret için [Ücretlendirme](https://api-docs.netgsm.com.tr/guides/whatsapp/whatsapp-api-ucretlendirme.md) sayfasına bakın.

```json
{
  "method": "POST",
  "url": "https://whatsappapi.netgsm.com.tr/v1/netgsm/whatsapp/messages/template",
  "auth": "Basic  kullanıcı:şifre",
  "headers": {
    "Content-Type": "application/json"
  },
  "body": {
    "to": "905321112233",
    "template": "netgsm_verify_code",
    "language": "tr",
    "components": [
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "482913"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "url",
        "index": 0,
        "parameters": [
          {
            "type": "text",
            "text": "482913"
          }
        ]
      }
    ]
  }
}
```

Yanıt `200`: şablon yanıtındaki gibi (`component: "template"`). OTP paketi yoksa `402` dönebilir:

```json
{ "status": false, "message": "Hesabınızda OTP Whatsapp Paketi tanımlı değildir." }
```

## Görsel, video, belge, ses

`messages/image` · `messages/video` · `messages/document` · `messages/audio`. Sınırlar: görsel 5 MB, video ve ses 16 MB, belge 100 MB.

Dosyadan (multipart):

```json
{
  "method": "POST",
  "url": "https://whatsappapi.netgsm.com.tr/v1/netgsm/whatsapp/messages/image",
  "auth": "Basic  kullanıcı:şifre",
  "headers": {
    "Content-Type": "multipart/form-data"
  },
  "body": {
    "to": "905321112233",
    "type": "file",
    "file": "(dosya) kampanya.png"
  }
}
```

Yanıt `200`:

```json
{
  "status": true,
  "data": {
    "id": "d22cfc2a-dda7-4788-a4d1-cae4ed6a2ed2",
    "to": "905321112233",
    "from": "908501110077",
    "status": "sending",
    "component": "image",
    "image": { "caption": "", "media_id": "e32a0a07151a2759", "media_url": "https://<medya adresi>/af60431fb577c7dd" }
  }
}
```

Adresten (JSON):

```json
{
  "method": "POST",
  "url": "https://whatsappapi.netgsm.com.tr/v1/netgsm/whatsapp/messages/document",
  "auth": "Basic  kullanıcı:şifre",
  "headers": {
    "Content-Type": "application/json"
  },
  "body": {
    "to": "905321112233",
    "type": "url",
    "link": "https://ornek.com/fatura.pdf"
  }
}
```

Yanıt `200`:

```json
{
  "status": true,
  "data": { "status": true, "data": { "messages": [{ "id": "a1a346d6-10cb-4ca6-a240-86a8e841e79e" }] } }
}
```

## Konum

```json
{
  "method": "POST",
  "url": "https://whatsappapi.netgsm.com.tr/v1/netgsm/whatsapp/messages/location",
  "auth": "Basic  kullanıcı:şifre",
  "headers": {
    "Content-Type": "application/json"
  },
  "body": {
    "to": "905321112233",
    "latitude": "41.04",
    "longitude": "29.00",
    "name": "Netgsm",
    "address": "İstanbul"
  }
}
```

Yanıt `200`:

```json
{ "status": true, "data": { "messages": [{ "id": "d302d380-a323-415b-bfe3-56f1471de672" }] } }
```

## Mesaja tepki

`message_id`, kişinin size gönderdiği mesajın kimliğidir (mesaj geçmişinde `id`).

```json
{
  "method": "POST",
  "url": "https://whatsappapi.netgsm.com.tr/v1/netgsm/whatsapp/messages/replyReaction",
  "auth": "Basic  kullanıcı:şifre",
  "headers": {
    "Content-Type": "application/json"
  },
  "body": {
    "to": "905321112233",
    "message_id": "wamid.HBgMOTA1MzIxMTEyMjMzFQIAEhggREU5M0Y2N0FFNzMyODVCNjI1QUNBQzY3RjA3OEY4QjM=",
    "emoji": "👍"
  }
}
```

Yanıt `200`:

```json
{ "status": true, "data": { "messages": [{ "id": "4e9eeab3-64ca-4d55-92ae-1929276525fe" }] } }
```

## Okundu işaretle

```json
{
  "method": "POST",
  "url": "https://whatsappapi.netgsm.com.tr/v1/netgsm/whatsapp/messages/markAsRead",
  "auth": "Basic  kullanıcı:şifre",
  "headers": {
    "Content-Type": "application/json"
  },
  "body": {
    "message_id": "wamid.HBgMOTA1MzIxMTEyMjMzFQIAEhggREU5M0Y2N0FFNzMyODVCNjI1QUNBQzY3RjA3OEY4QjM="
  }
}
```

Yanıt `200`:

```json
{ "status": true, "data": { "success": true } }
```

## İki adımlı doğrulama PIN'i

`POST https://whatsappapi.netgsm.com.tr/v1/netgsm/whatsapp/twoStepVerification`. Numaranın WhatsApp iki adımlı doğrulama PIN'ini (6 hane) belirler ya da değiştirir. Her numarada desteklenmez; desteklenmeyen numarada `501` döner.

```json
{
  "method": "POST",
  "url": "https://whatsappapi.netgsm.com.tr/v1/netgsm/whatsapp/twoStepVerification",
  "auth": "Basic  kullanıcı:şifre",
  "headers": {
    "Content-Type": "application/json"
  },
  "body": {
    "pin": "246810"
  }
}
```

Yanıt `200`:

```json
{ "status": true, "data": { "success": true } }
```

Çalışma saatleri ve numarayı kaldırma kurulum ekranından yapılır; bu API'de açık değildir.
