Trigger
Yeni kullanıcı bot'a ilk mesajı atar
Buton 1
welcome_button_approve → ✅ Onaylıyorum
Buton 2
welcome_button_reject → ❌ Daha sonra
📝 İlk ETK + KVKK linkleri burada gösteriliyor. Hukuki zorunluluk — onaylanmadan kampanya akışı başlamaz.
Trigger
KVKK ekranındayken kullanıcı **butona basmadan yazı yazar** (örn "evet", "ne demek bu")
Mesaj
Devam etmek için lütfen aşağıdaki butonlardan birine tıkla 👇
🔀 Geçişler
(yine yazı)→kendisi (LOOP)
💡 Önerilen iyileştirme: "evet/onay/tamam" gibi anahtar kelimeleri NLP ile yakalayıp approve gibi davran.
Trigger
"❌ Daha sonra" butonu tıklandı
🔀 Geçişler
❌ Daha sonra→kendisi (LOOP)
⚠️ Sonsuz döngü riski — kullanıcı onaylamadıkça çıkış yok. Timeout/eskalasyon mekanizması yok. Yeniden tasarımda bu düşünülmeli.
📸 Bu SS'te FreeByte mesajından hemen sonra ilk kampanya da görünüyor (akış otomatik).
Trigger
KVKK onaylandı → FreeByte API success
Yan etki
Operatörden ayrıca
SMS gönderilir
Anlayışın için teşekkürler! 🎁
1000 FreeByte'ın kısa süre içinde hesabına yüklenecek.
14:32
📐 Mockup
Durum
⚠️ Şu an FreeByte API fail olduğunda hiç mesaj gitmiyor — UX boşluğu
Trigger
FreeByte API çağrısı başarısız (timeout, 5xx, vb.)
💡 Yeni yazımda eklenmeli — kullanıcı sessizlikte kalmamalı, "kısa süre içinde yüklenecek" şeklinde pozitif fallback ver.
[Kampanya detayları — örn Pepsi için:]\n\n• Promosyonlu Pepsi ürünü satın al\n• Şişe kapağındaki kodu uygulamaya gir\n• Anında 100 MB hediye kazan!\n\nKatılım koşulları: ...
14:42
✅ Kampanyaya Katıl
⏭️ Sonraki
🏠 Menü
📐 Mockup
Trigger
Kampanya kartında "Detayları Gör" butonuna tıklandı
İçerik
DB: campaigns.campaign_details — her kampanyaya özel detay metni
Buton 1
Katıl (DB: button_1)
Buton 2
campaign_next → Sonraki
Buton 3
campaign_menu → Menü
📌 Detaylar mesajından sonra Detaylar butonu tekrar gösterilmez — kullanıcı zaten detayları görmüş durumda.
Trigger
"Kampanyaya Katıl" butonuna tıklandı
Hangi kampanya?
O an gösterilen kampanya — yani priority sırasında bulunduğu yerdeki kampanya. İlk girişte en yüksek priority (örn Pepsi), "Sonraki" deyip ilerlemişse o priority'deki kampanya.
Body
DB'de campaigns.deeplink_message varsa o kullanılır.\nYoksa fallback metni: "Harika seçim! 🎉\n{campaign.name} kampanyasına katılmak için aşağıdaki butona tıkla 👇"
CTA Buton
campaign_join_cta_button → "Kampanyaya Git" (hardcoded, tüm kampanyalar için ortak)
URL
DB: campaigns.deeplink_url — o kampanyaya özel link
Yan etki
24 saat sonra reminder zamanlanır (eğer kullanıcı kampanyayı tamamlamazsa reminder_default_body tetiklenir)
📌 Önemli: Bu mesaj her kampanya için aynı yapıdadır ama içerik (kampanya adı, deeplink URL) o anki priority'deki kampanyadan dinamik gelir. Tek mesaj template'i, çoklu kampanya kullanımı.
Tip
Bu bot mesajı DEĞİL — kullanıcı "Kampanyaya Git" tıkladığında açılan app/web ekranı
Trigger
CTA buton tıklaması → app deeplink → ilgili kampanya sayfası
📝 Bu ekran spec dışı, developer'ın akışı anlaması için context olarak eklendi.
Merhaba! 👋 Daha önce Pepsi kampanyasına katılmak istemiştin ama henüz ödülünü almamış görünüyorsun 🎁.
Ücretsiz GB fırsatını kaçırmadan hemen devam et 🎁
15:30
📐 Mockup
Trigger
24 saat sonra Campaign API check → tamamlanmadı
Sonraki adım
AYNI kampanya yeniden gönderilir (image + body + butonlar) — kullanıcıdan tekrar "Katıl/Detaylar/Sonraki" aksiyonu istenir
Timing
Production'da CAMPAIGN_REMINDER_DELAY_MINUTES=1380 (23 saat) — WhatsApp 24h penceresi içinde kalmak için
⚠️ Quiet hours yok — gece 03:00'da bile gönderilir. Yeniden tasarımda quiet hours eklenebilir.
🎁 Kazan Kazan
Hediye GB & Kampanyalar
Aşağıdaki seçeneklerden birini seç 👇
16:00
🎁 Kampanyalar
🧾 Fatura / Fiş Okut · v2
💎 FreeByte İşlemleri
📐 Mockup (PLANNED)
Trigger
Kampanya akışı tamamlandıktan sonra her yeniden giriş + her kampanyada Menü butonuna tıklama
Header görseli
DB: menu_image_url — göze çarpan banner/marka görseli (örn Kazan Kazan logosu + tema). WhatsApp interactive message header'a image olarak gönderilir.
Body
menu_body → "Aşağıdaki seçeneklerden birini seç 👇"
Buton 1
menu_button_campaigns → 🎁 Kampanyalar
Buton 2 v2
menu_button_receipt → 🧾 Fatura / Fiş Okut
Buton 3
menu_button_freebyte_ops → 💎 FreeByte İşlemleri (alt menü) PLANNED — yeni
💡 Görsel öneri: Görsel marka kimliğini öne çıkarmalı, kullanıcının dikkatini menüye çekmeli. CTR'yi artırması beklenir. Görseli admin paneli üzerinden değiştirilebilir tutmak (DB'de) iyi olur — kampanya dönemlerine göre güncellenebilir.
📌
3 buton kuralı: WhatsApp interactive button mesajları max 3 buton destekler. Ana menü tam 3 buton (Kampanyalar /
Fatura-Fiş Okut / FreeByte İşlemleri).
v2: GB Yükle ana menüden çıktı → FreeByte İşlemleri alt menüsüne (
freebyte_menu_body, 2 sayfa) taşındı; yerine Fatura / Fiş Okut geldi.
Fiş okutma için fişindeki bilgileri işleyeceğiz. Devam etmek istiyor musun?
14:30
✅ Devam et❌ Vazgeç
📐 Mockup
Trigger
İlk okutma girişinde (yalnızca gerekirse) bir kez gösterilir.
📝 Brief: “kullanıcıdan en başta bir onay almak gerekebilir” — şimdilik opsiyonel. Netleşince canlıya alınır ya da çıkarılır.
Fişini okutarak kampanyalara katılabilirsin. 🧾
Hazır olduğunda aşağıdaki butona bas, fişinin fotoğrafını gönder.
14:31
📷 Fiş Gönder
📐 Mockup
Trigger
Menüden “Fatura / Fiş Okut” seçildi ya da kampanyadan (Samba) yönlendirildi.
Mesaj
Fişini okutarak kampanyalara katılabilirsin. 🧾
Hazır olduğunda aşağıdaki butona bas, fişinin fotoğrafını gönder.
Context
{campaign_context} — boş (genel) veya samba
⚠️ Kamera otomatik açılmamalı. Kullanıcı akışı butonla başlatır (brief UX notu).
Lütfen fişinin
tamamının net göründüğü bir fotoğraf gönder 📸
14:31
📐 Mockup
Trigger
“Fiş Gönder” butonuna basıldı.
Mesaj
Lütfen fişinin tamamının net göründüğü bir fotoğraf gönder 📸
Beklenen girdi
WhatsApp medya (image). Galeriden seç veya kamerayla çek.
🔀 Geçişler
(metin, görsel değil)→tekrar iste (LOOP)
ℹ️ Fatura gönderimi WhatsApp’ın medya gönderim yapısına uygun ilerlemeli (brief UX notu).
Büyük boy Samba alana
1.000 FreeByte hediye! 🍫
Kampanyaya katılmak için fişini gönder, hediyeni kap.
14:30
Samba ile Kazan
📐 Mockup
Trigger
Samba kampanya duyurusu — diğer kampanyalar gibi ayrı gönderi olarak yayınlanır.
Mesaj
Büyük boy Samba alana 1.000 FreeByte hediye!
Kampanyaya katılmak için fişini gönder, hediyeni kap.
Buton
samba_join → Samba ile Kazan
ℹ️ Buton ortak okutma akışını Samba context'i ile başlatır. Aynı akış, menüden gelirse genel okutma olur.
Menü →
genel fatura okutma
Samba postu →
samba context’i ile fatura okutma
🔌 Context (bot mesajı değil)
Amaç
Tek okutma akışı, girişe göre farklı kampanya context'i taşır — kampanya başına ayrı akış kopyalanmaz.
Değişken
{campaign_context} — null (genel) · samba · <ileride başka kampanyalar>
Etki
OCR sonrası uygunluk kontrolü ve ödül tanımı bu context'e göre yapılır.
Üzgünüz 😔 FreeByte bakiyen yetersiz.
Kampanyalara katılarak FreeByte kazanabilirsin! 🎁
16:06
📐 Mockup (PLANNED)
Trigger
GB Yükle onaylandı + FreeByte bakiyesi < 1000
Buton 1
campaign_menu → 🎁 Kampanyalar (bakiye kazanma döngüsü)
Buton 2
menu_button → 🏠 Menü
📌 Dead-end olmaması için sonuç ekranına buton eklendi — kullanıcı bakiye yetersizken kampanyalara yönlendirilir.
📌
Model: FreeByte bir cüzdan bakiyesidir.
Kazanım: kampanya katılımı + uniq kod.
Harcama: GB Yükle (FreeByte → GB) ve ileride diğer dijital varlıklar. Bu alt menü, ana menüde 3 buton sınırı dolduğu için bakiye ve kod aksiyonlarını toplar.
- Bakiye Sorgula: app API'den anlık FreeByte bakiyesi çekilir
- Kod ile Yükle: uniq kod girilir → FreeByte bakiyesi yüklenir (promosyon kodu havuzu mantığı)
💎 FreeByte İşlemleri · 2/2
Ne yapmak istersin?
16:11
🎟️ Kod ile Yükle
⬅️ Geri
🏠 Ana Menü
📐 Mockup (PLANNED)
Trigger
FreeByte İşlemleri sayfa 1’de "➡️ Diğer işlemler" tıklandı
Buton 1
fb_ops_code → 🎟️ Kod ile Yükle
Buton 2
fb_ops_back → ⬅️ Geri (sayfa 1)
Buton 3
menu_button → 🏠 Ana Menü (üst menüye dön)
📄 FreeByte İşlemleri menüsünün 2. sayfası. GB Yükle yine ana menüde kalır (FreeByte harcama aksiyonu).
🎟️ FreeByte kodunu yaz, bakiyene ekleyelim 👇
(Örn: ABC123XYZ)
16:12
📐 Mockup (PLANNED)
Trigger
FreeByte İşlemleri menüsünde "🎟️ Kod ile Yükle" tıklandı
Girdi
Kullanıcı serbest metin olarak kodu yazar (buton değil, text input)
📌 Güvenlik: Kod doğrulama atomik claim ile (yarış koşulu yok), kod tekil ve bir kez kullanılır. Promosyon kodu havuzuyla aynı mantık — yeni altyapı gerekmiyor. Kullanıcı başına rate-limit (kod deneme spam'ine karşı).