Web Kancaları

Webhooks, tawk.to içindeki olayların gerçek zamanlı bildirimlerini harici hizmetlere göndermenizi sağlar.

Aşağıdaki olaylarda gönderilecek bir web kancası yapılandırabilirsiniz:

  • Sohbet başladığında
  • Sohbet bittiğinde
  • Yeni bir bilet oluşturulduğunda

Bir web kancası şunlardan oluşur:

Bir web kancası tetiklendiğinde, olay türüne özel bir JSON yükü ile birlikte yapılandırılan URL’ye bir POST isteği yapılacaktır.

Web kancalarının yönetimi

Web kancaları, tawk.to panelindeki “Yönetim” bölümü aracılığıyla yönetilebilir.

Şu anda desteklenen olaylar

Geri çağırma işlevleri, sayfa durumu değiştiğinde çağrılır. İşlev; çevrimiçi, dışarıda veya çevrimdışı olabilen durumu alacaktır. Bu geri çağırma, açılır sohbet penceresinde (popout) desteklenmez.

Sohbet:

  • Başla
  • Sonlandır

Bilet:

  • Oluştur

Yeniden deneme politikası

Http uç noktası başarı dışında herhangi bir şeyle yanıt verirse (2XX) 12 saate kadar Web kancası çağrısı tekrar denenir. 30 saniye içinde herhangi bir yanıt alınmazsa, çağrı başarısız olarak kabul edilir ve yeniden denenir. Her web kancası olayına bir olay kimliği atanır. Olay kimliği, üstbilgilerdeki her istekle birlikte X-Hook-Event-Id olarak iletilir. Yeniden deneme durumunda olay kimliği aynı kalır.

Web kancası imzasını doğrulama

Her web kancası olayı, web kancası gizli anahtarı kullanılarak Karma tabanlı (Hash-based) bir Mesaj Kimlik Doğrulama Kodu (HMAC) aracılığıyla imzalanır. HMAC-SHA1 algoritması, web kancası veri yükü imzasını oluşturmak için kullanılır. İmza, üstbilgilerdeki her istekle birlikte “X-Tawk-Signature” olarak iletilir.

Örnekler:

Node.js

const WEBHOOK_SECRET = 'webhook secret key';
const crypto = require('crypto');
function verifySignature (body, signature) {
    const digest = crypto
        .createHmac('sha1', WEBHOOK_SECRET)
        .update(body)
        .digest('hex');
    return signature === digest;
};
app.post('/webhooks', function (req, res, next) {
    if (!verifySignature(req.rawBody, req.headers['x-tawk-signature'])) {
        // verification failed
    }
    // verification success
});

PHP

const WEBHOOK_SECRET = 'webhook secret key';
function verifySignature ($body, $signature) {
    $digest = hash_hmac('sha1', $rawPost, WEBHOOK_SECRET);
    return $signature !== $digest ;
}
if (!verifySignature(file_get_contents('php://input'), $_SERVER['HTTP_X_TAWK_SIGNATURE'])) {
    // verification failed
}
// verification success

Ruby

WEBHOOK_SECRET = 'webhook secret key';
post '/payload' do
    request.body.rewind
    body = request.body.read
    signature = request.env['HTTP_X_TAWK_SIGNATURE']
    unless verifySignature(body, signature))
        // verification failed
    end
    // verification success
end
def verifySignature(body, signature)
    digest = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), WEBHOOK_SECRET, body)
    return digest == signature
end

Web Kancası Olay Yükü

Sohbet başlangıç olayı

Ziyaretçi veya temsilci tarafından bir sohbette ilk mesaj gönderildiğinde oluşturulur. Fısıltılar ve sistem bildirimleri gibi tetikleyiciler bu olayı oluşturmaz.

Sohbet başlangıç olayı yükü

Varlık Tür Açıklaman
olay String Olay adı ‘chat:start’
sohbet kimliği String sohbet kimliği
zaman String JSON formatında olayın oluşturulma tarihi ve saati
mesaj Object Mesaj nesnesi (Aşağıya bakınız)
ziyaretçi Object Varlık nesnesi (Aşağıya bakınız)
varlık Object Varlık nesnesi (Aşağıya bakınız)

Mesaj nesnesi

Varlık Tür Açıklama
metin String Mesajın metinsel gösterimi
tür String Mesaj türü, sıralama değeri msg, file, webrtc-call
gönderen Object Gönderen bilgisi nesnesi (Aşağıya bakınız)

Gönderen bilgisi nesnesi

Varlık Tür Açıklama
tür String Gönderen türü, sıralama değeri atemsilci, ziyaretçi, sistem

Ziyaretçi nesnesi

Varlık Tür Açıklama
isim String Ziyaretçinin adı
e-posta String Ziyaretçi e-postası (İsteğe Bağlı)
şehir String Zİyaretçinin şehri
ülke String ISO 3166 biçiminde ziyaretçinin ülkesi

Varlık nesnesi

Varlık Tür Açıklama
kimlik String Varlık kimliği
isim String Varlık adı

Örnek
{
    event: 'chat:start',
    chatId: '70fe3290-99ad-11e9-a30a-51567162179f',
    time: '2019-06-28T14:03:04.646Z',
    message : {
        text : 'Sample message',
        type : 'msg',
        sender : {
            type : 'visitor'
        }
    },
    visitor: {
        name: 'V1561719148780935',
        email : 'hello@test.com',
        city: 'jelgava',
        country: 'LV'
    },
    property: {
        id: '58ca8453b8a7e060cd3b1ecb',
        name: 'Bobs Burgers'
    }
}

Sohbet olayı sonu

GBir sohbet sonlandırıldığında oluşturulur

Sohbet olayı sonu yükü

Varlık Tür Açıklama
olay String Olay adı chat:end
sohbet kimliği String Sohbet kimliği
zaman String JSON formatında olay oluşturulma tarih ve saati
ziyaretçi Object Ziyaretçi nesnesi (Aşağıya bakınız)
varlık Object Varlık nesnesi (Aşağıya bakınız)

Ziyaretçi Nesnesi

Varlık Tür Açıklama
isim String Ziyaretçinin adı
e-posta String Ziyaretçi e-postası (İsteğe Bağlı)
şehir String Zİyaretçinin şehri
ülkeü String ISO 3166 biçiminde ziyaretçinin ülkesi

Varlık nesnesi

Varlık Tür Açıklama
kimlik String Varlık kimliği
isim String Varlık adı

Örnek
{
    event: 'chat:end',
    chatId: '70fe3290-99ad-11e9-a30a-51567162179f',
    time: '2019-06-28T14:04:08.718Z',
    visitor: {
        name: 'V1561719148780935',
        email : 'hello@test.com',
        city: 'jelgava',
        country: 'LV'
    },
    property: {
        id: '58ca8453b8a7e060cd3b1ecb',
        name: 'Bobs Burgers'
    }
}

Bilet oluşturuldu olayı

Yeni bir bilet oluşturulduğunda meydana gelir.

Bilet oluştur olay yükü

Varlık Tür Açıklama
olay String Olay adı ‘ticket:create’
zaman String JSON formatında olay oluşturulma tarih ve saati
talep eden Object Bilet talep eden nesnesi (aşağıya bakınız)
varlık Object Varlık nesnesi (aşağıya bakınız)
bilet Object Bilet nesnesi (aşağıya bakınız)

Bilet talep eden nesnesi

Varlık Tür Açıklama
isim String Ziyaretçi adı
e-posta String Ziyaretçi e-postası (İsteğe Bağlı)

Varlık nesnesi

Varlık Tür Açıklama
kimlik String Varlık kimliği
isim String Varlık adı

Bilet nesnesi

Varlık Tür Açıklama
kimlik String Bilet kimliği
kullanıcı kimliği Number Kullanıcı kimliği
konu String Biletin konusu
mesaj String Bilet mesaj içeriği


Example
{
    event: 'ticket:create',
    time: '2019-06-28T14:07:13.512Z',
    property: {
        id: '58ca8453b8a7e060cd3b1ecb',
        name: 'Bobs Burgers'
    },
    requester: {
        name: 'Martins',
        email: 'martins@tawk.to',
        type: 'agent'
    },
    ticket: {
        id: '02598050-99ae-11e9-8887-97564881b95b',
        humanId: 3,
        subject: 'Testing',
        message: 'Once more through the breach'
    }
}