Rehber · SiparişMatik · WhatsApp / markalı site sistemi (akis: whatsapp) · sözleşme v2.0
WhatsApp / markalı site sistemi
Restoranın kendi sitesi {alt}.lezzet35.com (kanal = MARKA_SITESI) ve QR masa menüsü {kod}.xqr.com.tr (kanal = XQR) siparişleri. Bugünkü exe akışının kendisidir; pazaryeri siparişleri bu anahtarla görünmez (bkz. Pazaryeri sistemi). Ortak kurallar, webhook ve jeton otomasyonu giriş sayfasında.
SiparişMatik kasa yazılımı Lezzet35 kanalı için gömülü bir istemci taşır; kasa tarafında güncelleme gerekmez. Lezzet35 bu istemcinin beklediği /api/v1 yollarını, başlıklarını ve alanlarını birebir sunar. Aşağıdaki adımlar restoran onaylandıktan sonra uygulanır.
1. Ön koşullar
- Restoran başvurusu onaylı; firma kaydında SiparişMatik firma numarası (kasa Ayarlar › Entegrasyon › Firma ID) girilmiş.
- Kasa bilgisayarı internete çıkıyor ve Lezzet35 adresine HTTPS ile erişebiliyor.
- Restoranın ödeme yöntemleri Lezzet35 kataloğundan seçilmiş (Nakit, Kapıda Kredi Kartı, Online Kart, yemek kartı markaları); kasa siparişteki
odeme_turu+odendialanlarıyla tahsilat tipini belirler,odeme_yontemigörünen ad / yemek kartı markasıdır.
2. Lezzet35 tarafı: bağlantıya hazırla (HAZIR penceresi)
Yönetim panelinde firma kartından Bağlantıya hazırla denir. Firma HAZIR durumuna geçer ve varsayılan 24 saat (POOL_HAZIR_PENCERE_SAAT) boyunca havuz listesinde görünür. Kasa bu sürede bağlanırsa BAGLI olur ve havuzdan düşer; bağlanmazsa pencere kapanır, yeniden hazırlanması gerekir. Böylece firma anahtarı yalnız o anda kurulan restoranlar için havuza çıkar (KARAR-9).
3. Kasa tarafı: kanalı aç
- Kasa yazılımında Ayarlar › Entegrasyon ekranında Lezzet35 kanalını aktif yap (
entegrasyondurum = Y). - Firma ID alanının başvurudaki numarayla aynı olduğunu doğrula; token alanı boş kalır — kasa açılışta havuzdan kendisi alır.
- Kasa hizmetini yeniden başlat. Açılışta havuz → bağlan → şubeler → menü sırası çalışır; 10 saniyelik zamanlayıcı sipariş ve ürün senkronunu sürdürür.
- Panelde firma kartı BAGLI ve “son senkron” zamanı güncel görünmeli.
4. Anahtarlar
X-Pool-Secret: tüm kurulumlarda ortak, kasaya gömülü; yalnız havuz uçlarında geçer. Değiştirilemez; bu yüzden havuz HAZIR penceresiyle daraltılır.Authorization: Bearer: firma anahtarı. Sunucuda sha256 özeti saklanır; düz metin yalnız üretildiği anda görünür. Kasa bu anahtarı havuzdan aldıktan sonra değiştirmez (bağlantıda rotasyon yok); yeni anahtar gerekirse admin “bağlantıyı kopar” → yeniden hazırla → kasa yeniden açılış.- Kasadaki
/panel/{token}düğmesi oturum açmaz: token firmayı tanır, kayıtlı telefona OTP gider, doğrulama sonrası restoran paneline geçilir (KARAR-11).
5. Akış ve zamanlama
| # | Çağrı | Ne zaman | Açıklama |
|---|---|---|---|
| 1 | GET /api/v1/pool | Açılış (yalnız yerelde Lezzet35 kaydı yokken) | Exe X-Pool-Secret ile havuzu çeker; siparismatik_id eşleşen firmanın api_token’ını kaydeder. |
| 2 | PUT /api/v1/pool/connect | Açılış | Bearer ile bağlanır; firma BAGLI olur, firma.domain_id ana şube olarak yazılır. |
| 3 | GET /api/v1/branches | Açılış | Alt şubeler için ayrı entegrasyon kayıtları. |
| 4 | POST /api/v1/branches/{id}/status | Açılış + 10 sn (değişince) | Kasadaki açık/kapalı durumu vitrine yansır. |
| 5 | GET /api/v1/menu | Açılış | Kategori ve ürünler kasaya aynalanır; marka asla null. |
| 6 | GET /api/v1/firma/siparisler | 10 sn | Günün aktif siparişleri tek yanıtta; siparis_no ile tekilleştirme. |
| 7 | PUT /api/v1/firma/siparisler/{id}/durum | 10 sn (guncelle='Y') | Kasadaki durum Lezzet35’e gider; geçersiz geçişte de success:true. |
| 8 | POST /api/v1/pool/products/sync | 10 sn (guncelle='Y') | Kasada değişen ürünler Lezzet35’e; yeni ürün PASIF + moderasyon. |
6. Durum eşlemesi
Lezzet35 iç durum makinesi 7 durum tutar; kasaya giden görünüm 5 değere indirgenir (kasa HAZIRLANIYOR ve REDDEDILDI bilmez).
| İç durum | Etiket | v1 görünümü |
|---|---|---|
| ALINDI | Alındı | BEKLEMEDE |
| ONAYLANDI | Onaylandı | ONAYLANDI |
| HAZIRLANIYOR | Hazırlanıyor | ONAYLANDI |
| YOLDA | Yolda | YOLDA |
| TESLIM_EDILDI | Teslim edildi | TESLIM_EDILDI |
| IPTAL | İptal | IPTAL |
| REDDEDILDI | Reddedildi | IPTAL |
| Kasa | Gönderilen durum | Not |
|---|---|---|
| BEKLIYOR | ONAYLANDI | Kasa siparişi gördü ve kabul etti |
| ONAY | YOLDA | Kurye çıktı |
| TESLIM | TESLIM_EDILDI | Teslim tamamlandı |
| IPTAL / RED | IPTAL | İç modelde restoran iptali; müşteri bildirimi tetiklenir |
7. Biçim kuralları (kasa kırılganlıkları)
siparis_zamanitamdd.MM.yyyy HH:mm; başka biçim kasada istisna üretir ve sipariş sessizce kaybolur.successJSON boolean (kasa"True"metniyle karşılaştırır); metin"true"kırar.marka,kategori,menu.secilenlernull yerine nesne/dizi.- Parametresiz
GET /firma/siparislergünün tüm aktif siparişlerini tek sayfada döner (kasa yalnız ilk sayfayı işler). - Ürün senkronu idempotent; kasa bayrağı yanıt gelmeden temizlediği için kayıp güncelleme admin “tam senkron” komutuyla telafi edilir.
{ "success": true, "data": [ { "id": 1042, "siparis_no": "L35-20260916-4F2A9C", "siparis_zamani": "16.09.2026 12:05", "teslim_tahmini": "12:45", "marka": { "id": 3, "marka_adi": "Alsancak Kumru Evi" } } ], "meta": { "current_page": 1, "last_page": 1 } }7b. Sipariş yanıtı ekleri (24–26.10.2026)
- Fiş:
siparis_notu(müşteri notu) ve kalemdeozel_not; ürün indirimi içinurunler[].liste_fiyat/indirimve sipariş düzeyindeurun_indirimi—birim_fiyatödenen fiyat olarak kalır,toplam_tutardeğişmez. - Adres / karekod:
musteri_enlem,musteri_boylam(müşterinin haritada onayladığı pin; yoksa null) vemusteri_adres_kisa(yalnız sokak/bina/kat/daire);musteri_adrestam metin olarak kalır. - Nakit:
para_ustu— müşterinin vereceği tutar (TL), kurye para üstü hazırlar; yoksa null. - Durum:
PUT …/durumgövdesindetahmini_sure_dk; yanıttateslim_tahmini,degisti,reddedildi. Tek sipariş:GET /firma/siparisler/{id}; süzgeçler?durum=&tarih_baslangic=&tarih_bitis=. - Tam metin ve değişiklik günlüğü:
docs/api/siparismatik.md(sürüm 1.2); OpenAPI /api/openapi.json.
8. Sorun giderme
- Kasa havuzda firmayı bulamıyor: HAZIR penceresi dolmuş ya da Firma ID uyuşmuyor. Panelde yeniden “bağlantıya hazırla”.
- Bağlantı koptu uyarısı: BAGLI firma 5 dk üst üste sipariş çekmezse panel uyarır. Kasa hizmetinin ve internetin açık olduğunu kontrol et.
- 429: havuz 30/dk/IP, firma uçları 120/dk/token. Kasa 10 sn’de en fazla 4 çağrı yapar; aşım genelde ikinci bir kasa kurulumunun aynı token’ı kullanmasından kaynaklanır.
- Sipariş kasada görünmüyor: IntegrationLog’da ilgili çağrının durum kodu ve alan doğrulaması görünür (Faz 6 admin ekranı).
Uç ayrıntıları için API belgesindeki SiparişMatik v1 bölümüne bak.
9. Bu akışa özgü kurallar (sözleşme v2.0 §4)
- Sipariş gövdesinde
akis: "whatsapp";teslimat_tipiPAKET, GEL_AL ya da MASA (xQR masa siparişi,masa_no). - Menü senkronu: firmanın pazaryeri şubesi yoksa (WPSipariş’ten taşınan 201 firmanın tamamı) senkron kategori/ürün doğrudan AKTİF; pazaryeri şubesi de olan firmada admin moderasyonu.
POST /branches/{id}/statusmarkalı siteyi açar/kapatır (“Şu an kapalı” sayfası).- xQR masa uçları (
/xqr/*,/firma/masa-olaylari) yalnız bu akışta anlamlıdır. - 27.10.2026 öncesi tüm anahtarlar bu akıştadır; SiparişMatik sunucusundaki
entegrasyontur = 'Lezzet35'satırlarının karşılığıdır.
10. Webhook ve jeton (bu akış)
- Köprü adresi örneği (Güven belirler):
https://lezzet35.siparismatik.net/whatsapp/order/{siparismatik_id}. Olaylar (siparis.olusturuldu,siparis.durum,siparis.iptal,test), JWT HS512 +X-Lezzet35-Signature, 10 deneme ≈ 24 sa: giriş §3. - Jeton: anahtar üretilince
entegrasyontur: "Lezzet35"kaydı SiparişMatik sunucusuna itilir; exe mevcutSiparişMatik_Entegrasyonçekimiyle alır (giriş §4). HAZIR penceresi / havuz yedek olarak kalır. - Geri yön aynen
PUT /firma/siparisler/{id}/durum; iptaldeiptal_nedenikodu (liste:GET /iptal-nedenleri). Exe bugün yalnız{ durum }gönderiyor;iptalnedeni/iptalnotalanlarının gövdeye eklenmesi gerekir.