Hoşgeldiniz: Geliştiricilerimiz İçin Bir Rehber

Merhaba,

Pazarlama stratejilerinin kalbinde kişiselleştirme ve otomasyonun önemli bir yeri bulunmaktadır. Firmaların, hedef kitlelerini daha derinlemesine anlamak, onlara özel içerik sunmak ve doğru zamanda doğru kişiye ulaşmak için kullandıkları teknolojik çözümlerden biri pazarlama otomasyonudur. Bu çerçevede, sizlere şirketimizin sunduğu gelişmiş pazarlama otomasyonu platformunu tanıtmaktan büyük mutluluk duyuyoruz.

Platformumuz, müşterilerinizi anlamanıza ve onlarla daha etkin iletişim kurmanıza yardımcı olur. Segmentasyon, kişiselleştirme ve otomatik pazarlama kampanyaları oluşturma gibi özellikleri sayesinde, platformumuz tüm pazarlama hedeflerinizi daha hızlı ve verimli bir şekilde gerçekleştirebilmenize yardımcı olur. Bu, markanızın müşteri deneyimini sürekli olarak geliştirerek, satışları ve müşteri sadakatini artırmanızı sağlar.

E-posta, SMS, Mobil/Web bildirimleri ve daha fazlası aracılığıyla müşterilerinizle kişiselleştirilmiş, dinamik ve sürekli bir diyalog yaratmak için teknolojimizi kullanabilirsiniz. Platformumuz, büyük ve küçük ölçekteki işletmeler için tasarlanmış olup, mevcut altyapınıza kolayca entegre edilebilir.

Bu geliştiriciler sayfası, platformumuzun nasıl kullanılacağı, entegrasyon özelliklerini, API detaylarını ve daha fazlasını öğrenmek isteyen geliştiriciler için hazırlanmıştır. Burada, işinizi büyütmenizi ve müşteri deneyimini geliştirmenizi sağlayacak tüm bilgileri bulabilirsiniz.

Teknolojimizi keşfetmek ve bu inanılmaz pazarlama otomasyon araçlarıyla neler başarabileceğinizi görmek için bu sayfayı kullanmaktan çekinmeyin. İstediğiniz zaman bizimle iletişime geçerek destek alabilirsiniz. Bu yolculukta sizinle birlikte olmaktan heyecan duyuyoruz!

Başarılarınızı dört gözle bekliyoruz,

Sevgilerimizle, Senheap Geliştirme Ekibi

Direkt Mesaj

Direkt mesaj Nedir?

Sendheap'e kayıtlı kullanıcılarınıza, kampanya ve görev oluşturmadan doğrudan mesaj göndermenizi sağlar. Sendheap panelden "Direkt Mesaj" kategorisi altında gönderim yapmak istediğiniz gönderim tipini seçerek (e-posta,sms,mobile/web push) gönderiminizi müşterinize doğrudan yapabilirsiniz. Gönderilen mesajları daha sonradan görüntüleyebilirsiniz. Ayrıca direkt mesajı api ile projelerinize entegre ederek kullanabilirsiniz.

API Entegrasyonu

Projelerinizde bir tetikleyici olay sonrası müşterinize gönderim yapmak için projenizle senheap'i api ile entegre edebilirsiniz.

Öncelikle sendheap panelinden sol menüde Web servis ayarlarından yeni web servis kullanıcısı oluşturmanız gerekmektedir.

API dokumantasyonu için TIKLAYINIZ

Event

Event Nedir?

Projenizde bazı durumlarda Sendheapdeki üyelerinizi segmente edebilmeniz veya etiket verebilmeniz için eventleri kullanırız. Örnek vermek gerekirse Sipariş oluşturulduğunda siparişi oluşturan üyeyi sendheapte sipariş kodu ile etiket vermek, ve siparişteki ürünlerin kategorilerine göre segmente etmek gibi bir strateji izlenebilir.

Nasıl Kullanılır?

İki tane event kategorimiz bulunmakta. Bunlar; Ürün görüntülenme ve Sipariş Oluşturma. Kategoriden herhangi birini seçebiliriz. Event adına bağlı event kodu oluşmaktadır.

Platforma özel bir keyiniz bulunmaktadır. Bu keyi yalnızca platformun kayıtlı olduğu hesabınızda kullanabilirsiniz Bu keyi neden kullanıyoruz? Platformunuzun hangi hesaba kayıtlı olduğunu anlamak için kullanıyoruz. Ve bu keyi kullanarak ürün görüntüleyen ve ya sipariş oluşturan üyelerinizi segmente edebilirsiniz. Bu keyi event oluştururken seçtiğiniz platformla birlikte alabiliriz. Oluşturduğunuz eventi kullanırken bu key ile birlikte kullanmanız gerekmektedir. Keyiniz: sh_platform_key

Bu işlemleri yaptıktan sonra belirlediğiniz platforma göre segment kuralı veya etiket kuralı belirleyebilirsiniz.

Event Parametreleri

Event kullanımı : Event kullanımı için öncelikle event sdk dosyamızı projenize dahil etmelisiniz.

<script src="https://cdn.sendheap.com/sdk@v1.0.0/init.min.js"></script>
view raw gistfile1.txt hosted with ❤ by GitHub
Daha sonra fonksiyonu çağırılmalıdır.
Bu fonksiyonda kullanılacak parametreler platformunuza özel key ve üyenizin email adresidir.
sh_platform_key : Platformunuzun keyi
sh_email : Üyenizin email adresi
SH.init(sh_platform_key,sh_email);
view raw gistfile1.txt hosted with ❤ by GitHub

Eventin tetiklenmesi için kullanılacak parametreler:

sh_event_code : Event kodu

product_code : Ürün kodu (Ürün görüntülenme eventi için)
<script src="https://cdn.sendheap.com/sdk@v1.0.0/init.min.js"></script>
view raw gistfile1.txt hosted with ❤ by GitHub

order_code : Sipariş kodu (Sipariş oluşturma eventi için)
SH.event(sh_event_code, { "order_code": order_code });
view raw gistfile1.txt hosted with ❤ by GitHub

Event kategorisi olmadan kullanım
SH.event(sh_event_code, { "order_code": order_code });
view raw gistfile1.txt hosted with ❤ by GitHub

Örnek Kullanım:
Sayfa tipinin belirlenmesi için PAGE_TYPE değişkeni kullanılır.(PAGE_TYPE değişkenleri örnek içindir değişiklik gösterebilir.)
product : Ürün görüntülenme eventi için
approve : Sipariş oluşturma eventi için

<script src="https://cdn.sendheap.com/event/event.min.js"></script>
view raw gistfile1.txt hosted with ❤ by GitHub
window.onload = function () {
SH.init(
sh_platform_key,
sh_email
);
switch (PAGE_TYPE) {
case 'product':
SH.event(sh_event_code, { "product_code": product_code });
break;
case 'approve':
SH.event(sh_event_code, { "order_code": order_code });
break;
}
}
view raw gistfile1.txt hosted with ❤ by GitHub

İzleme kodları

Eventleri tetiklerken bazı izleme kodlarını panelimize eklememiz gerekmektedir.

<script>
(function() {
switch(PAGE_TYPE){
case 'approve':
sendRequest()
break
default:
let url = new URL(window.location.href)
let utm_source = url.searchParams.get("utm_source");
let utm_campaign = url.searchParams.get("utm_campaign");
let os_token = url.searchParams.get("sh_token");
if(utm_source === "sendheap"){
if(utm_campaign && os_token){
let date = new Date();
date.setDate(date.getDate() + 1);
expires = "; expires="+date.toUTCString();
document.cookie = "sh_event_code="+utm_campaign+expires
document.cookie = "sh_token="+os_token+expires
}
}
}
function sendRequest(){
let shToken = getCookie("sh_token")
let orderCode = ""
if(typeof approveOrderData !== "undefined"){
orderCode = approveOrderData.transaction ?? ""
}
if(shToken.length <= 0 || orderCode.length <= 0)
return
fetch("https://api.sendheap.com/api/add-event-order", {
method: "POST",
body: JSON.stringify({
order_code: orderCode,
sh_token: shToken
}),
headers: {
"Content-type": "application/json; charset=UTF-8"
}
})
// .then(response => response.json())
// .then(json => console.log(json));
}
function getCookie(cname) {
let name = cname + "=";
let decodedCookie = decodeURIComponent(document.cookie);
let ca = decodedCookie.split(';');
for(let i = 0; i <ca.length; i++) {
let c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
})();
</script>
view raw tracker-code hosted with ❤ by GitHub

SH Token

Eventleri tetiklerken bazı izleme kodlarını panelimize eklememiz gerekmektedir.

fetch(`https://api.sendheap.com/api/getShToken`, {
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=utf-8',
},
body: JSON.stringify({
platform_token: '...',
member_email: 'test@test123.com',
create_member:true
}),
}).then((response) => response.json())
.then((data) => {
//document.cookie = "sh_token=" + data.data.token + expires
}
).catch((err)=>{
console.log(err)
})
view raw gistfile1.txt hosted with ❤ by GitHub

Web Push Bildirimi

Web Push Bildirimi Nedir?

Sendheap'e kayıtlı kullanıcılarınıza, Web bildirimleri (web push), web tarayıcıları aracılığıyla gönderilen anlık bildirimlerdir. Bu bildirimler, kullanıcının bir web sitesini ziyaret etmese bile tarayıcılarında veya cihazlarında görüntülenir. Web push bildirimleri, kullanıcılara yeni içerikleri, promosyonları, güncellemeleri ve diğer önemli bilgileri iletmek için kullanılır. Kullanıcılar, web sitesine abone olduktan sonra bildirimleri almak için tarayıcılarından izin verirler.

/**
* Config değişkenleri değiştirilebilir.
* Onun yanında getEmail, getLanguage ve getTags metotları farklılaştırılarak
* register olan cihazın eposta ve dil parametreleri belirlenebilir.
*/
const SENDHEAP = {
CONFIG: {
LOGO: 'https://sendheap.com/v2/assets/img/logo/logo.svg',
TITLE: 'Masaüstü bildirimlerine ekleyin',
CONTENT: 'Özel fırsatlardan ve güncel kampanyalardan haberiniz olsun ister misiniz?.',
CANCEL_TEXT: 'Daha Sonra',
APPLY_TEXT: 'Evet',
FIREBASE_PUBLIC_KEY: '{KEY_YAZILMALI}',
SW_PATH: ''
},
getEmail() {
return '';
},
getLanguage() {
return 'tr';
},
getTags() {
return {
'domain':'example.com',
'admin_email': 'test@example.com'
};
},
popupCss: '.sendheap-push--in-notification{width:422px;padding:0 20px 10px;border:1px solid #bababa;border-radius:3px;box-shadow:0 4px 4px -2px #888;background-color:#fbfbfb;font-family:Nunito,sans-serif;position:fixed;left:50%;margin-left:-211px;z-index:9999999999999;top:0}.sendheap-push--in-notification-inner-container{margin:0}.sendheap-push--in-notification-logo{height:auto;margin-right:5px;max-width:150px;float:left}.sendheap-push--in-notification-logo img{width:100%;height:100%;padding-top:20px}.sendheap-push--in-notification-image-container{float:left;margin:13px 15px 0 0}.sendheap-push--in-notification-image-container img{width:65px;height:65px}.sendheap-push--in-notification-text-container{position:relative!important;padding:10px 0 0!important;color:#000!important;text-align:left!important;margin:0!important;line-height:1.4em!important}.sendheap-push--in-notification-description,.sendheap-push--in-notification-title{line-height:1.4em;text-align:left;word-break:break-word;overflow:hidden;font-family:Nunito,sans-serif}.sendheap-push--in-notification-title{margin-bottom:5px;font-size:14px;font-weight:700;color:#000}.sendheap-push--in-notification-description{font-size:12px;margin:10px 0;padding:0}.sendheap-push--in-notification-button-container{float:right!important}.sendheap-push--in-notification-button{width:90px;height:18px;line-height:18px;margin-left:3px;padding:5px;background:#f9f9f9;border:1px solid #bababa;border-radius:1px;display:inline-block;font-size:14px;text-align:center;cursor:pointer;box-sizing:content-box}.sendheap-push--in-allow-button{background:#00c33d;color:#fff;border-color:#059833}@media all and (max-width:421px){.sendheap-push--in-notification{box-sizing:border-box;width:100%;left:0;margin:0;border-radius:0;border-left:0;border-right:0;border-top:0}.sendheap-push--in-notification-text-container{float:left}}',
setCookie(c_name, value, exdays) {
var exdate = new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value = value + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString());
if (location.protocol == 'https:') {
c_value += "; secure";
}
document.cookie = c_name + "=" + c_value;
},
getCookie(c_name) {
var i, x, y, ARRcookies = document.cookie.split(";");
for (i = 0; i < ARRcookies.length; i++) {
x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
x = x.replace(/^\s+|\s+$/g, "");
if (x == c_name) {
return y;
}
}
},
cancelPush() {
document.getElementById('SendheapWebPushSdk').remove();
this.setCookie('sendheap-webpush', 1, 2);
},
applyPush() {
if (!('serviceWorker' in navigator)) {
throw new Error('No Service Worker support!')
}
if (!('PushManager' in window)) {
throw new Error('No Push API Support!')
}
const permission = requestNotificationPermission()
document.getElementById('SendheapWebPushSdk').remove();
},
showPopup() {
const popupHtml =
'<style>' + this.popupCss + '</style>' +
'<div id="SendheapWebPushSdk" class="sendheap-push--in-notification">' +
' <div class="sendheap-push--in-notification-inner-container">' +
' <div class="sendheap-push--in-notification-logo"><img src="' + this.CONFIG.LOGO + '"/>' +
' </div>' +
' <div class="sendheap-push--in-notification-text-container">' +
' <div class="sendheap-push--in-notification-title">' + this.CONFIG.TITLE + '</div>' +
' <div class="sendheap-push--in-notification-description">' + this.CONFIG.CONTENT + '</div>' +
' </div>' +
' <div style="clear: both;">' +
' <div class="sendheap-push--in-notification-button-container">' +
' <a target="_blank" onclick="SENDHEAP.cancelPush();"' +
' class="sendheap-push--in-notification-button sendheap-push--in-disallow-button">' + this.CONFIG.CANCEL_TEXT + '</a>' +
' <a target="_blank" onclick="SENDHEAP.applyPush();"' +
' class="sendheap-push--in-notification-button sendheap-push--in-allow-button">' + this.CONFIG.APPLY_TEXT + '</a>' +
' </div>' +
' <div style="clear: both;"></div>' +
' </div>' +
' </div>' +
'</div>';
document.body.innerHTML += popupHtml;
},
getDeviceId() {
let deviceId = localStorage.getItem('sendheap-device-id')
if (typeof deviceId == "undefined" || deviceId == null || deviceId.trim() == "") {
deviceId = Math.random().toString(36).substr(2, 5) + Math.random().toString(36).substr(2, 5) + Math.random().toString(36).substr(2, 5);
localStorage.setItem('sendheap-device-id', deviceId)
return deviceId
} else {
return deviceId
}
}
}
var webpush = typeof SENDHEAP.getCookie('sendheap-webpush') === 'undefined' ? '0' : SENDHEAP.getCookie('sendheap-webpush');
var isSafari = !!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/);
if (isSafari === false && webpush !== "1" && ("Notification" in window)) {
setTimeout(function () {
SENDHEAP.showPopup();
}, 1000);
}
const registerServiceWorker = async () => {
const serviceUrl = SENDHEAP.CONFIG.SW_PATH + 'service_worker.js?firebasePublicKey='+SENDHEAP.CONFIG.FIREBASE_PUBLIC_KEY;
const swRegistration = await navigator.serviceWorker.register(serviceUrl)
navigator.serviceWorker.ready.then((registration) => {
registration.active.postMessage({deviceId: SENDHEAP.getDeviceId()});
registration.active.postMessage({email: SENDHEAP.getEmail()});
registration.active.postMessage({language: SENDHEAP.getLanguage()});
registration.active.postMessage({tags: SENDHEAP.getTags()});
});
return swRegistration
}
const requestNotificationPermission = async () => {
const permission = await window.Notification.requestPermission()
if (permission == 'granted') {
SENDHEAP.setCookie('sendheap-webpush', 1, 30);
const swRegistration = await registerServiceWorker()
}
}
var SendheapSW = {
firebasePublicKey: new URL(location).searchParams.get('firebasePublicKey'),
email: '',
language: 'tr',
tags: {},
urlB64ToUint8Array(base64String) {
const padding = '='.repeat((4 - (base64String.length % 4)) % 4)
const base64 = (base64String + padding).replace(/\-/g, '+').replace(/_/g, '/')
const rawData = atob(base64)
const outputArray = new Uint8Array(rawData.length)
for (let i = 0; i < rawData.length; ++i) {
outputArray[i] = rawData.charCodeAt(i)
}
return outputArray
},
deviceId: ''
}
const saveSubscription = async subscription => {
const SERVER_URL = 'https://api.sendheap.com/api/saveDeviceByFirebase'
const response = await fetch(SERVER_URL, {
method: 'post',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
'registration_id': subscription.endpoint,
'auth': subscription.keys.auth,
'p256dh': subscription.keys.p256dh,
'domain': self.location.hostname,
'device_id': SendheapSW.deviceId,
'device_platform': 'browser',
'email': SendheapSW.email,
'tags' : SendheapSW.tags,
'device_language': SendheapSW.language
}),
})
return response.json()
}
self.addEventListener('activate', async () => {
try {
const applicationServerKey = SendheapSW.urlB64ToUint8Array(SendheapSW.firebasePublicKey)
const options = {applicationServerKey, userVisibleOnly: true}
const subscription = await self.registration.pushManager.subscribe(options)
const response = await saveSubscription(subscription.toJSON())
} catch (err) {
console.log('Error', err)
}
})
self.addEventListener('install', function (event) {
self.skipWaiting();
console.log('Installed', event);
});
self.addEventListener('push', function (event, k) {
var str = event.data.text().split('||');
var notification = {
'body': str[1],
'icon': str[3].replace('http://', 'https://'),
'tag': str[2],
'requireInteraction': true
};
if (typeof str[4] !== 'undefined') {
notification.image = str[4].replace('http://', 'https://');
}
event.waitUntil(
self.registration.showNotification(str[0], notification)
);
});
self.addEventListener('notificationclick', function (event) {
var url = event.notification.tag;
event.notification.close();
event.waitUntil(
clients.matchAll({
type: 'window'
})
.then(function (windowClients) {
for (var i = 0; i < windowClients.length; i++) {
var client = windowClients[i];
if (client.url === url && 'focus' in client) {
return client.focus();
}
}
if (clients.openWindow) {
return clients.openWindow(url);
}
}));
});
self.addEventListener('message', function (event) {
if (typeof event.data.deviceId != 'undefined') {
SendheapSW.deviceId = event.data.deviceId
}
if (typeof event.data.email != 'undefined' && event.data.email != '') {
SendheapSW.email = event.data.email
}
if (typeof event.data.tags != 'undefined') {
SendheapSW.tags = event.data.tags
}
});
view raw service-worker hosted with ❤ by GitHub

Nasıl Kullanılır?

Nasıl Kullanımı açıklanacaktır.

Mobil Etkileşim Entegrasyonu

Nedir?

Sendheap ile gönderilen bildirimlerde bildirimin okundu, görüntülendi bilgilerinin ve izleme kodları ile takip edilen sipariş geribildirimlerinin Sendheap’e bildirilmesi.

Bildirim görüntülendi?

Sendheapte şuan email için yaptığımız “görüntülendi” bilgilendirmesini, mobil bildirim için de yapmak istiyoruz.

Örnek Görünüm:

Sipariş Takibi ve İzleme Kodu

/link-redirect endpointine istek attığınızda size json olarak “sh_token”,”utm_source”,”utm_campaign” verilerini dönecektir. Bunları tsoft için web view kısmına taşımanız ve izleme kodlarını eklemeniz yeterli olacaktır. Eğer izleme kodları ile işlem yapamıyorsanız. “/add-event-order” endpointine sh_token ve order_code ile istek atabilirsiniz

Araçlar (Widget)

Nedir?

Araçlar web sitenizde müşterilerinizle etkileşime girmek için en iyi yollardan biridir. Sendheap araçlarını kullanarak, müşterilerinize özel içerikler sunabilir, promosyonlar yapabilir ve onları daha iyi anlayabilirsiniz. Araçlar, web sitenizdeki ziyaretçileri segmente etmenize ve onlara kişiselleştirilmiş içerikler sunmanıza olanak tanır.

Örnek Kullanım

Widget Sdk : Web sitenizde kayıt etmiş olduğunuz araçı çağırmak için aşağıdaki javascript kodunu kullanmanız gerekmektedir. Ilk önce widgetları çağırmamıza için widget sdk'yı import ediyoruz.

<script src="https://cdn.sendheap.com/widgets/sdk@v1.0.0/init.min.js"></script>
view raw gistfile1.txt hosted with ❤ by GitHub
Aracınızı göstereceğiniz alanı kimlikleyin (Aracınızı popup olarak açmak istiyorsanız bu adımı atlayabilirsiniz.)
<div id="element_id"></div>
view raw gistfile1.txt hosted with ❤ by GitHub

sh_platform_key : Platformunuzun keyi
sh_email: Üyenizin email adresi
widget_code: SendHeap panelde bulunan aracınız için oluşan araç kodu
element_id: Aracınızın gösterileceği alan id'si

Aşağıdaki kod blogu ile aracınızı çağırabilirsiniz.

Widget.init(sh_platform_key, sh_email)
.then(() => {
Widget.mount(WidgetCode, element_id);
})
view raw gistfile1.txt hosted with ❤ by GitHub

Bir aracın element üzerinde değil de bir popup olarak açılmasını istiyorsanız aşağıdaki kodu kullanabilirsiniz.

Widget.init(sh_platform_key, sh_email)
.then(() => {
Widget.mountForPopup(WidgetCode);
})
view raw gistfile1.txt hosted with ❤ by GitHub