Webhooks

Webhooks permitem que você envie notificações em tempo real de eventos no tawk.to para serviços externos.

Você pode configurar um webhook para ser enviado nos seguintes eventos:

  • O chat começa
  • O chat termina
  • Novo bilhete é criado

Um webhook consiste de:

Quando um webhook é acionado, uma solicitação de postagem será feita para o URL configurado junto com um uma carga JSON específica para o tipo de evento

Gerenciando webhooks

Webhooks podem ser gerenciados pelo painel tawk.to na seção `Admin`.

Eventos suportados

As funções de callback são invocados quando o status da página é alterado. A função receberá o status alterado, que será online, ausente ou offline. Este callback não é suportado na janela de chat que aparece.
Chat:
  • Iniciar
  • Terminar
Política de repetição
  • Criar

Política de repetição

Uma chamada de webhook será repetida por até 12 horas se o terminal http responder apenas com sucesso (2XX). Se nenhuma resposta for recebida em 30 segundos, a chamada será considerada uma falha e também será repetida.

Verificando a assinatura do webhook

Cada evento de webhook é assinado por meio de um código de autenticação de mensagem baseado em hash (HMAC) usando a chave secreta de webhooks. O algoritmo HMAC-SHA1 é usado para gerar a assinatura de carga útil do webhook. A assinatura é passada junto com cada solicitação nos cabeçalhos como `X -Tawk-Assinatura’.

Examples:

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', $body, 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

Carga útil do evento de início de chat

Evento de início de chat

Gerado quando a primeira mensagem em um chat é enviada pelo visitante ou agente. Sussurros e notificações do sistema, como acionadores, não geram este evento.

Carga útil do evento de início de chat
Propriedade Modelo Descrição
event String Event name `chat:start`
chatId String Chat Id
time String Event generation date time in JSON format
message Object Message object (See below)
visitor Object Visitor object (see below)
property Object Property object (see below)

Objeto de mensagem

Propriedade Modelo Descrição
text String Textual representation of message
type String Message type, enum value msg, file, webrtc-call
sender Object Sender info object (See below)

Objeto de informações do remetente

Propriedade Modelo Descrição
type String Sender type, enum value agent, visitor, system

Objeto de visitante

Propriedade Modelo Descrição
name String Visitor name
email String Visitor email (Optional)
city String Visitor city
country String Visitor country in ISO 3166 format

Objeto de propriedade

Propriedade Modelo Descrição
id String Property Id
name String Property name

Exemplo
{
    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'
    }
}

Evento de fim de chat

Gerado quando um chat terminou

Carga útil do evento de fim de chat
Propriedade Modelo Descrição
event String Event name chat:end
chatId String Chat Id
time String Event generation date time in JSON format
visitor Object Visitor object (see below)
property Object Property object (see below)

Objeto de visitante

Propriedade Modelo Descrição
name String Visitor name
email String Visitor email (Optional)
city String Visitor city
country String Visitor country in ISO 3166 format

Objeto de propriedade

Propriedade Modelo Descrição
id String Property Id
name String Property name

Exemplo
{
    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'
    }
}

Evento de criação de bilhete

Gerado quando um novo bilhete é criado.

Carga útil do evento de criação de bilhete
Propriedade Modelo Descrição
event String Event name `ticket:create`
time String Event generation date time in JSON format
requester Object Ticket requester object (see below)
property Object Property object (see below)
ticket Object Ticket object (see below)

Objeto do solicitante do bilhete

Propriedade Modelo Descrição
name String Visitor name
email String Visitor email (Optional)

Objeto de propriedade

Propriedade Modelo Descrição
id String Property Id
name String Property name

Objeto de bilhete

Propriedade Modelo Descrição
id String Ticket Id
humanId Number Ticket human Id
subject String Ticket subject
message String Ticket message content


Exemplo
{
    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'
    }
}