Ana içeriğe atla

Genel Bakış

Bu eğitimde, yaygın bir rezervasyon iş akışı kuracaksınız:
  • Bir kullanıcı rezervasyon tamamladıktan sonra rezervasyon onay e-postası gönderin.
  • Bir kullanıcı rezervasyon başlattı ancak zamanında tamamlamadıysa kurtarma e-postası gönderin.
Sonunda sahip olacağınız:
  • İki Özel Etkinlik (booking_started, booking_complete)
  • Tamamlama karşı terke göre dallanan bir Journey
  • Onay ayrıntıları için bir rezervasyon Veri Beslemesi
  • Kurtarma teşvikleri için isteğe bağlı kupon Veri Beslemesi
Bu rehber OneSignal yapılandırmasına odaklanır. Rezervasyon sisteminiz ve arka ucunuz herhangi bir dil veya çerçevede uygulanabilir.

Kurulum akışı

  1. Uygulamanız bir booking_started özel etkinlik izler.
  2. Bu, kullanıcıyı bir Journey’ye dahil eder.
  3. Journey bir booking_complete etkinliği bekler ve zamanında alınmazsa takip hatırlatıcıları gönderir.
  4. Rezervasyon tamamlanırsa, OneSignal gönderim anında bir rezervasyon Veri Beslemesi çağırır ve en güncel rezervasyon ayrıntılarıyla bir onay e-postası gönderir.
  5. Rezervasyon bekleme penceresi içinde tamamlanmazsa, Journey son kullanma yolunu izler ve bir kurtarma e-postası gönderir.

Kurulum

Önkoşullar

Başlamadan önce sahip olduğunuzdan emin olun:
  • E-posta kanalı etkinleştirilmiş bir OneSignal uygulaması
  • Rezervasyon ve/veya kupon verilerini JSON olarak döndürebilen bir arka uç uç noktası
  • Uygulamanız, arka ucunuz ve OneSignal Harici ID arasında paylaşılan kararlı bir kullanıcı tanımlayıcısı
  • Özel Etkinlikler erişimi

1. Rezervasyon etkinliklerini izleme

Aşağıdaki Özel Etkinlikleri izleyin. Bunlar uygulamanızdan (SDK’mızı kullanarak) veya arka ucunuzdan (REST API’mizi kullanarak) gelebilir. Etkinlik adları:
  • booking_started — kullanıcı rezervasyon akışını başlattığında
  • booking_complete — rezervasyon başarıyla tamamlandığında
Uygulama/web sitenizden doğrudan özel etkinlikler göndermek için Mobil SDK ve/veya Web SDK’deki trackEvent() yöntemini kullanın.
Örnek
OneSignal.User.trackEvent("booking_started");
OneSignal.User.trackEvent("booking_complete");
Etkinlikleri izlerken ve arka ucunuzdan veri döndürürken aynı kullanıcı kimliğini kullanın. Eşleşmeyen ID’ler, eksik kişiselleştirmenin en yaygın nedenidir.

2. Veri Beslemesi takma adları oluşturma

OneSignal’da Ayarlar > Veri Beslemeleri’ne gidin ve aşağıdaki takma adları oluşturun. Rezervasyon Veri Beslemesi: Gönderim anında en güncel rezervasyon ayrıntılarını çekmek için bu beslemeyi kullanın.
  • Takma ad: booking_data
  • Yöntem: GET
  • URL:
Uç nokta örneği
https://your-domain.com/datafeed/booking?user_id={{subscription.external_id}}
Örnek yanıt:
JSON
{
  "first_name": "Sam",
  "last_booking": {
    "service_type": "Danışmanlık",
    "booking_date": "22 Ocak 2026",
    "booking_time": "14:00",
    "price": 45
  }
}
Kupon Veri Beslemesi (isteğe bağlı): Kurtarma e-postanıza bir kupon kodu eklemek istiyorsanız bu isteğe bağlı beslemeyi kullanın.
  • Takma ad: coupon
  • Yöntem: GET
  • URL:
Uç nokta örneği
https://your-domain.com/datafeed/coupon?user_id={{subscription.external_id}}
Örnek yanıt:
JSON
{
  "first_name": "Sam",
  "code": "PROMO8F3K2",
  "discount_text": "%10",
  "expires_in_hours": 2,
  "deep_link": "https://your-domain.com/checkout?coupon=PROMO8F3K2"
}
Veri Beslemesi uç noktalarınızı güvenceye alın. Üretimde, URL’ye sır gömmek yerine istek başlıklarında bir API anahtarı (örneğin x-api-key) gönderin ve bu başlığı Ayarlar > Veri Beslemeleri’nde yapılandırın.

3. E-posta şablonları oluşturma

Rezervasyon onay e-postası:

Konu:
Rezervasyon ayrıntılarınız
Gövde:
Merhaba {{ data_feed.booking_data.first_name | default: "müşteri" }},

Rezervasyonunuz için teşekkürler! Randevu ayrıntılarınız:

Hizmet: {{ data_feed.booking_data.last_booking.service_type }}
Tarih: {{ data_feed.booking_data.last_booking.booking_date }}
Saat: {{ data_feed.booking_data.last_booking.booking_time }}
Fiyat: {{ data_feed.booking_data.last_booking.price }} TL

Sizi görmeyi sabırsızlıkla bekliyoruz!

Rezervasyon kurtarma e-postası

Konu:
Rezervasyonunuzu tamamlayın ve tasarruf edin
Gövde:
Merhaba {{ data_feed.coupon.first_name | default: "müşteri" }},

Rezervasyonunuzu önümüzdeki {{ data_feed.coupon.expires_in_hours }} saat içinde tamamlayın ve
bu kodla {{ data_feed.coupon.discount_text }} tasarruf edin:

{{ data_feed.coupon.code }}

Burada kullanın:
{{ data_feed.coupon.deep_link }}
Veri Beslemesi alanı eksikse boş içeriği önlemek için Liquid’de her zaman default filtreleri dahil edin.

4. Journey’yi oluşturma

  1. OneSignal’da Mesajlar > Journeys > Journey Oluştur’a gidin
  2. Giriş Tetikleyicisi’ni şu şekilde ayarlayın:
    • Özel Etkinlik: booking_started
  3. Bir Şu Ana Kadar Bekle adımı ekleyin:
    • Koşul: Özel Etkinlik gerçekleşir
    • Etkinlik adı: booking_complete
    • Maksimum bekleme süresi: 10 dakika
    • Sona erme yolunu etkinleştirin
  4. Dalları yapılandırın:
    • Tamamlandı: Rezervasyon onay e-postası gönder
      • Veri Beslemesi: booking_data
    • Süresi doldu: Kurtarma e-postası gönder
      • Veri Beslemesi: coupon
Sona erme dalı, uygulamanızda ek mantık olmadan terk etmeyi ele almanızı sağlar. Bakın:
  • Journey ayarları - Özel Etkinlik giriş ve çıkış kuralları hakkında ayrıntılar
  • Journeys eylemleri - Şu Ana Kadar Bekle adımları ve sona erme dalları hakkında ayrıntılar

5. Test etme ve doğrulama

Etkinlikleri doğrulama

Uygulamanızdan veya arka ucunuzdan özel etkinlikleri tetikleyin ve onaylayın. OneSignal’da Analytics > Özel Etkinlikler’e gidin ve şunları gördüğünüzü onaylayın:
  • Harici ID’niz için booking_started etkinlikleri görünür
  • Harici ID’niz için booking_complete etkinlikleri görünür

Veri Beslemelerini doğrulama

Bilinen bir kullanıcı ID’si kullanarak Veri Beslemesi uç noktalarınızı manuel olarak çağırın ve onaylayın:
  • 200 yanıtı döndürülür
  • Tüm beklenen alanlar mevcut

E-postaları doğrulama

Journey editöründen test mesajları gönderin ve onaylayın:
  • Rezervasyon e-postaları gerçek rezervasyon ayrıntıları içerir
  • Kurtarma e-postaları geçerli bir kupon içerir
  • Hiçbir Liquid değişkeni boş işlenmez
Kişiselleştirme eksikse, Veri Beslemesi isteğindeki kullanıcı ID’sinin Journey’yi tetikleyen kullanıcıyla eşleştiğini onaylayın.

Örnek: Veri Beslemesi uygulaması

Bu örnek, rezervasyon onayı ve kurtarma Veri Beslemeleri için minimal bir Express uygulaması gösterir. JSON yanıt şekli e-posta şablonlarınızla eşleştikçe arka uç diliniz, çerçeveniz ve veri kaynağınız farklılık gösterebilir.

Rezervasyon Veri Beslemesi örneği

import express from "express";

const app = express();

function dataFeedAuth(req, res, next) {
  if (req.headers["x-api-key"] !== process.env.DATAFEED_API_KEY) {
    return res.status(401).json({ error: "Unauthorized" });
  }
  next();
}

app.get("/datafeed/booking", dataFeedAuth, async (req, res) => {
  const { user_id } = req.query;

  if (!user_id) {
    return res.status(400).json({ error: "Missing user_id" });
  }

  const booking = await getLatestBookingForUser(user_id);

  if (!booking) {
    return res.status(404).json({ error: "No booking found" });
  }

  res.json({
    first_name: booking.first_name,
    last_booking: {
      service_type: booking.service_type,
      booking_date: booking.booking_date,
      booking_time: booking.booking_time,
      price: booking.price
    }
  });
});

Kupon Veri Beslemesi örneği

app.get("/datafeed/coupon", dataFeedAuth, async (req, res) => {
  const { user_id } = req.query;

  if (!user_id) {
    return res.status(400).json({ error: "Missing user_id" });
  }

  const coupon = await generateCouponForUser(user_id);

  res.json({
    first_name: coupon.first_name,
    code: coupon.code,
    discount_text: coupon.discount_text,
    expires_in_hours: coupon.expires_in_hours,
    deep_link: coupon.deep_link
  });
});

Uygulama yönergeleri

  • Yanıtları hızlı tutun (Veri Beslemeleri gönderim anında çağrılır)
  • Her zaman öngörülebilir bir JSON yapısı döndürün
  • Veri mevcut olmadığında 404 kullanın
  • İstek başlıkları aracılığıyla gönderilen API anahtarıyla uç noktaları güvenceye alın

Yaygın sorunlar

E-posta boş değerler gösteriyor

  • Veri Beslemesi 404 döndürdü
  • JSON yanıtında alan adları değişti
  • Kullanıcı kimliği uyumsuzluğu

Journey dallanmıyor

  • booking_complete etkinliği izlenmedi
  • Etkinlik adı uyumsuzluğu (büyük/küçük harf duyarlı)
  • Etkinlik bekleme penceresi dışında gerçekleşti

Veri Beslemesi 401 veya 403 döndürüyor

  • Eksik veya geçersiz API anahtarı
  • Veri Beslemesi ayarlarında başlık yapılandırılmadı

Sonraki adımlar

  • Daha gelişmiş Journey koşulları için etkinlik özellikleri (hizmet türü, fiyat) ekleyin
  • Push veya SMS hatırlatıcıları gibi ek kurtarma adımları ekleyin
  • Tekrarlanan kurtarma mesajlarını önlemek için Journey çıkış kuralları kullanın