> ## Documentation Index
> Fetch the complete documentation index at: https://docs.iletisim.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Kendi formunuzla gönderim

> Kendi tasarladığınız web formunu client.js ile güvenli biçimde İletişim'e bağlayın.

## Formu API gönderimine açın

Bu yöntem, ziyaretçinin doğrudan tarayıcısından gönderim yapan özel HTML formları içindir. Formları listelemek veya gönderimleri panel dışından yönetmek için kullanılan API anahtarına bağlı değildir.

1. Panelde **Formlar → Formlar** görünümünden formu açın.
2. **Davranış → İzinli alan adları** bölümüne formun çalışacağı alan adını ekleyin. `*.ornek.com` alt alan adlarını kapsar.
3. **API ile gönderime izin ver**'i açın.
4. **Yayınla** veya **Değişiklikleri yayınla**'yı seçin. Davranış ayarları yayınlanana kadar dışarıda değişmez.
5. **Paylaş → Kendi formunuzdan gönderim (API)** bölümündeki formunuza özel örneği kopyalayın.

## client.js ile bağlayın

HTML alanlarının `name` değerleri yayımladığınız alan anahtarlarıyla eşleşmelidir: `name`, `phone`, `email`, `company`, `subject` ve `message`. Yalnızca formda açık olanları gönderin.

```html theme={"system"}
<form id="iletisim-form">
  <label>
    Ad soyad
    <input name="name" autocomplete="name" required>
  </label>
  <label>
    E-posta
    <input name="email" type="email" autocomplete="email">
  </label>
  <label>
    Mesaj
    <textarea name="message" required></textarea>
  </label>
  <button type="submit">Gönder</button>
  <p id="iletisim-sonuc" role="status"></p>
</form>

<script src="https://forms.iletisim.app/client.js"></script>
<script>
  IletisimForm.attach(document.getElementById("iletisim-form"), {
    key: "FORM_ANAHTARI",
    onResult: function (result) {
      document.getElementById("iletisim-sonuc").textContent = result.message;
      if (result.ok && result.redirectUrl) location.href = result.redirectUrl;
    },
  });
</script>
```

`attach`, formun `submit` olayını yönetir; gönder düğmesini işlem sırasında kapatır ve alan bazlı hataları `data-iletisim-error="alan"` taşıyan öğelere yazabilir. Daha özel bir akışta doğrudan gönderin:

```js theme={"system"}
const result = await IletisimForm.submit("FORM_ANAHTARI", {
  name: "Ayşe Yılmaz",
  email: "ayse@ornek.com",
  message: "Randevu saatleri hakkında bilgi almak istiyorum.",
});
```

Başarılı yanıtın biçimi:

```json theme={"system"}
{ "ok": true, "id": "…", "message": "Teşekkür ederiz.", "redirectUrl": null }
```

Hata yanıtı `error` ve kullanıcıya gösterilebilecek `message` içerir; doğrulama hatalarında `fieldErrors`, hız sınırında `retryAfter` eklenebilir:

```json theme={"system"}
{
  "ok": false,
  "error": "invalid_fields",
  "message": "Lütfen işaretli alanları düzeltin.",
  "fieldErrors": { "email": "invalid_email" }
}
```

## HTTP durumlarını işleyin

| Durum | Anlamı ve yapılacak işlem |
| - | - |
| `400` | Meydan okuma, istek gövdesi veya Turnstile doğrulaması geçersiz. `client.js` kullanın; süresi dolan meydan okumayı betik bir kez kendiliğinden yeniler. |
| `403` | API kapalı (`api_disabled`) veya gönderen köken izinli değil (`origin_not_allowed`). Davranış ayarlarını düzeltip yeniden yayınlayın. |
| `404` | Form anahtarı bulunamadı ya da form hiç yayımlanmadı (`not_found`). |
| `410` | Form arşivlenmiş ve gönderim kabul etmiyor (`form_archived`). |
| `413` | İstek gövdesi 64 KB sınırını aşıyor (`too_large`). |
| `422` | Alanlar eksik veya yayımlanmış form kurallarına uymuyor (`invalid_fields`). `fieldErrors` değerlerini alanların yanında gösterin. |
| `429` | Hız sınırı aşıldı (`rate_limited`). `retryAfter` veya `Retry-After` kadar bekleyin. |
| `503` | Gönderim geçici olarak kullanılamıyor (`unavailable`). Kullanıcıya daha sonra yeniden denemesini söyleyin. |

`client.js` aynı gönderimin ağ nedeniyle tekrar edilmesinde tek kullanımlık meydan okuma kimliğini tekrar anahtarı olarak kullanır; başarılı kayıt ikinci kez oluşturulmaz.

## Güvenlik modelini anlayın

`client.js`, form açılırken imzalı ve kısa ömürlü bir meydan okuma alır; SHA-256 tabanlı iş kanıtını ziyaretçinin tarayıcısında çözer. Meydan okuma tek kullanımlıdır ve gönderim yalnızca izinli `Origin` değerinden kabul edilir. Düz `curl` isteği meydan okuma taşımadığı için `400 invalid_challenge` ile reddedilir.

Gönderimler form ve IP başına hız sınırından geçer. Görünmeyen tuzak alanı dolu veya form olağan dışı hızlı gönderilmişse kayıt **Spam** karantinasına alınır; kişi, süreç ve bildirim oluşturulmaz. Bu kontrolleri kendi kodunuzda yeniden üretmeniz gerekmez.

İsterseniz **Davranış → Kendi Turnstile anahtarınız** bölümüne Cloudflare Turnstile site ve gizli anahtarlarınızı ekleyebilirsiniz. Bu durumda kendi sayfanızdaki Turnstile bileşeninin `cf-turnstile-response` değerini gönderin. Gizli anahtar yalnızca sunucuda saklanır ve kaydedildikten sonra panelde yeniden gösterilmez.

Formu hazır İletişim görünümüyle eklemek için [Formu sitenize ekleme](https://docs.iletisim.app/kilavuz/formlar/siteye-ekleme.md) sayfasına bakın.

Son güncelleme: 23 Ekim 2026.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.