Instalação

Para instalar a Dito em sua aplicação, cole o código abaixo antes de fechar a tag <body>.

Este código deve ser colocado em todas as páginas da sua aplicação.

Obs.: O SDK é carregado de forma assíncrona, sem impactar o carregamento da sua aplicação.

<script>
    (function(d,e,id){
      window.dito={};window._ditoTemp=[];
      dito.generateID=function(str){return'_dito_sha1_'+str;}
      var m=['init','identify','alias','unalias','track'],s=d.createElement('script'),
      x=d.getElementsByTagName(e)[0];s.type='text/javascript';s.async=true;s.id=id;
      s.src='//storage.googleapis.com/dito/sdk.js';x.parentNode.insertBefore(s,x);
      for(var i=0;i<m.length;i++){dito[m[i]]=function(i){
      return function(){_ditoTemp.push({methodName:m[i],params:arguments});}}(i)}
    })(document,'script','dito-jssdk');

    dito.init({
      apiKey: 'API_KEY'
    });
  </script>

📘

O JavaScript SDK da Dito é identificado pela variável dito.

dito.identify()

O método dito.identify() é usado para identificar os usuários que estão logados em sua aplicação e deve ser utilizado após o dito.init().

O nó data é reservado para as informações personalizadas dos usuários e relativas a sua aplicação, você pode enviar quantos atributos quiser. Estes atributos podem ser utilizados para filtrar seus usuários dentro da plataforma.

Note que os atributos do tipo data devem ser enviados em um dos formatos suportados.

O método de identify é um método assincrono. Ele vai colocar a request de indentificação do usuário em uma fila, para que em eventuais falhas de rede possa se ter a oportinudade de enviar a request novamente.

Exemplo:

dito.identify({
  id: dito.generateID('[email protected]'),
  name: 'Marcos Nogueira',
  email: '[email protected]',
  gender: 'male',
  location: 'Belo Horizonte',
  birthday: '1990-02-15',
  data: {
    cpf: '101.032.076-95',
    cargo: 'Desenvolvedor'   
  }
});

❗️

ATENÇÃO!

Os nomes das propriedades dos usuários enviados dentro do nó data DEVEM estar em letras minúsculas, sem acentuação ou caracteres especiais. Caso o nome de suas propriedades seja composto por mais de uma palavra, estas devem ser separadas por underscore '_' no padrão snake case.

Exemplo:
minha_propriedade_1
minha_propriedade_2

dito.alias()

O método dito.alias() é usado para associar contas ao usuário logado em sua aplicação e deve ser utilizado após o dito.identify().

Exemplo:

dito.alias({
  portal: {
    id: 'ID_DO_USUARIO_A_SER_ASSOCIADO'
  }
});

dito.unalias()

O método dito.unalias() é usado para remover a associação de uma conta do usuário logado em sua aplicação e deve ser utilizado após o dito.identify().

Exemplo:

dito.unalias({
  portal: {
    id: 'ID_DO_USUARIO_A_SER_DESASSOCIADO'
  }
});

dito.track()

O método dito.track() é usado para acompanhar o comportamento dos usuários na forma de eventos em sua aplicação e deve ser utilizado após o dito.identify().

O nó data é reservado para as informações do evento, você pode enviar quantos atributos quiser. Estes atributos podem ser utilizados para filtrar seus usuários dentro da plataforma.

Note que os atributos do tipo data devem ser enviados em um dos formatos suportados.

O método track é um método assincrono. Dessa forma toda vez que ele é chamado, é adicionado um elemento a uma fila e em sequência essa fila é executada, se o usuário for identiifcado. Esse comportamento tem dois propositos:
1 - em enventuais falahs de rede, haverem outras tentativas.
2 - em momentos em que ainda não se sabe, quem é o usuário que está nevagando (ainda não houve um dito.indentify), os registros de navegação sejam armazenados, até que ele seja identificado.

Exemplo:

dito.track({
  action: 'nome-do-evento',
  revenue: 5.99, // Opcional
  data: {
    propriedade_1: 'valor da propriedade 1',
    propriedade_2: 'valor da propriedade 2'
  }
});

❗️

ATENÇÃO!

Os nomes dos eventos DEVEM ser enviados para a Dito em letras minúsculas, sem acentuação ou caracteres especiais. Caso o nome de suas ações seja composto por mais de uma palavra, estas devem ser separadas por hífen '-'.

Exemplo:
meu-evento-1
meu-evento-2

Os nomes das propriedades dos eventos enviados dentro do nó data DEVEM estar em letras minúsculas, sem acentuação ou caracteres especiais. Caso o nome de suas propriedades seja composto por mais de uma palavra, estas devem ser separadas por underscore '_' no padrão snake case.

Exemplo:
minha_propriedade_1
minha_propriedade_2

dito.api()

A classe Api possui 2 métodos: .get() e .post(). Ambos os métodos aceitam os mesmos parâmetros. Cada um apenas define qual método HTTP será usado na requisição.

.get()

dito.Api.get(module, path[, params, successCallback, errorCallback]);

.post()

dito.Api.post(module, path[, params, successCallback, errorCallback]);

Parâmetros

ParâmetroObrigatórioTipoDefaultDescrição
moduleSimString-Nome do módulo que a requisição será feita. Acesse a lista de módulos disponíveis
pathNãoString-Path (endereço) da requisição
paramsNãoObjectnullParâmetros da requisição. Se a requisição for do tipo POST, os parâmetros serão enviados no body da requisição. Se a requisição for do tipo GET, os parâmetros serão enviados na querystring da URL
successCallbackNãoFunctionnullFunção que será chamada quando a requisição terminar com sucesso.
errorCallbackNãoFunctionnullFunção que será chamada quando a requisição terminar com erro.

Exemplos

Buscando os últimos 3 eventos de 'rate':

dito.Api.get('events', '/action/rate', { limit: 3, order: 'desc' }, function(response){
  console.log(response.data);
});

Cadastrando ou atualizando dados de clientes

id = dito.generateID('[email protected]')

user = {
  name: 'Dito',
  email: '[email protected]',
  gender: 'male',
  location: 'Belo Horizonte',
  birthday: '1993-09-20',
  created_at: '2015-06-01 08:23:14 -0300',
  data: JSON.stringify(
    { 
      extra: "EXTRA_DATA" 
    }
  )
} 


dito.Api.post(
  'login', 
  `/users/portal/${id}/signup`, 
  { user_data: JSON.stringify(user) },
  (result, request) => {
    user.reference = result.data.reference
    dito.CurrentUser.set(user)
    if (result.data.warning) {
      console.warn(result.data.warning)
    }
  },
  (error, request) => { console.error(error) }
)

Enviando evento

if ( dito.CurrentUser.get() && dito.CurrentUser.get().reference ) {
  event = {
    reference: dito.CurrentUser.get().reference,
    action: 'acessou-categoria',
    data: {
      nome_categoria: 'sapatos'
    }
  } 
  
  
  dito.Api.post(
    'events', 
    `/users/${dito.CurrentUser.get().reference}`, 
    { event: JSON.stringify(event) },
    (events, request) => { console.log(request.response) },
    (error, request) => { console.error(error) }
  )
}