Para desenvolvedores

O chat da ALt. entra em qualquer site com uma linha de código — e, se você quiser controle total, a API pública do webchat funciona com qualquer linguagem que fale HTTP.

1. Instalação com uma linha (recomendado)

No painel da ALt., em Ajustes → Canais → Chat do site, crie o widget e copie o código. Cole antes do </body> de qualquer página:

<script src="https://api.alt.app.br/widget.js" data-alt-key="alt_wk_SUA_CHAVE" async></script>

Só isso. O script desenha a bolha e a janela do chat (visual padrão ALt., isolado do CSS do seu site via shadow DOM), guarda a sessão do visitante e entrega as respostas em tempo real. Título, saudação, cor, posição e tamanho são configurados no painel — sem tocar no código de novo.

A chave alt_wk_… é publicável (ela aparece no HTML do seu site, como as chaves públicas de qualquer serviço). Ela só permite abrir conversa no seu espaço — nunca ler dados. Se vazar de forma indesejada, gere outra no painel: a antiga morre na hora.

2. API pública do webchat

Para apps móveis, sites com CSP restrito ou uma interface própria. Base: https://api.alt.app.br. Todas as rotas aceitam qualquer origem (CORS liberado) e falam JSON. Erros seguem RFC 9457 (Problem Details).

2.1 Abrir (ou retomar) uma sessão de visitante

POST /v1/webchat/session
Content-Type: application/json

{
  "key": "alt_wk_SUA_CHAVE",
  "visitor_id": "opcional — UUID salvo da visita anterior",
  "name": "opcional",
  "email": "opcional",
  "page_url": "opcional — página onde o chat abriu"
}
200 OK
{
  "session_token": "eyJ...",      // use nas próximas chamadas
  "visitor_id": "3f2a...",         // guarde (localStorage) p/ retomar depois
  "settings": { "title": "...", "greeting": "...", "color": "#c9f24c",
                 "position": "right", "size": "standard" },
  "messages": [ ... últimas 50 mensagens do visitante ... ]
}

2.2 Enviar mensagem do visitante

POST /v1/webchat/messages
Authorization: Bearer <session_token>
Content-Type: application/json

{
  "body": "Oi! Vocês atendem sábado?",
  "client_id": "um UUID gerado por você",   // idempotência: reenvio não duplica
  "name": "opcional", "email": "opcional"    // identifica o lead
}

→ 200 { "message": { "id": "...", "direction": "inbound",
                      "body": "...", "created_at": "..." } }

2.3 Receber respostas em tempo real (SSE)

GET /v1/webchat/stream?token=<session_token>
Accept: text/event-stream

data: {"id":"...","direction":"outbound","body":"Atendemos sim!","created_at":"..."}

É Server-Sent Events — qualquer linguagem lê (é um GET que fica aberto). Alternativa sem SSE: consultar o histórico de tempos em tempos.

2.4 Histórico

GET /v1/webchat/messages?after=<id da última mensagem que você tem>
Authorization: Bearer <session_token>

→ 200 { "data": [ ...mensagens novas em ordem cronológica... ] }

Limites

30 mensagens por minuto por visitante (HTTP 429 ao passar). Sessão dura 30 dias — depois, abra outra com o mesmo visitor_id para manter o histórico.

3. Exemplos

curl

SESSION=$(curl -s https://api.alt.app.br/v1/webchat/session \
  -H 'content-type: application/json' \
  -d '{"key":"alt_wk_SUA_CHAVE"}')
TOKEN=$(echo "$SESSION" | jq -r .session_token)

curl -s https://api.alt.app.br/v1/webchat/messages \
  -H "authorization: Bearer $TOKEN" -H 'content-type: application/json' \
  -d '{"body":"Olá!","client_id":"'$(uuidgen)'"}'

JavaScript (front-end próprio)

const s = await fetch('https://api.alt.app.br/v1/webchat/session', {
  method: 'POST', headers: { 'content-type': 'application/json' },
  body: JSON.stringify({ key: 'alt_wk_SUA_CHAVE',
    visitor_id: localStorage.getItem('alt_visitor') ?? undefined }),
}).then(r => r.json());
localStorage.setItem('alt_visitor', s.visitor_id);

const es = new EventSource(
  'https://api.alt.app.br/v1/webchat/stream?token=' + encodeURIComponent(s.session_token));
es.onmessage = (ev) => console.log('resposta:', JSON.parse(ev.data).body);

await fetch('https://api.alt.app.br/v1/webchat/messages', {
  method: 'POST',
  headers: { 'content-type': 'application/json',
             authorization: 'Bearer ' + s.session_token },
  body: JSON.stringify({ body: 'Olá!', client_id: crypto.randomUUID() }),
});

Python

import requests, uuid

s = requests.post('https://api.alt.app.br/v1/webchat/session',
                  json={'key': 'alt_wk_SUA_CHAVE'}).json()
h = {'authorization': f"Bearer {s['session_token']}"}

requests.post('https://api.alt.app.br/v1/webchat/messages', headers=h,
              json={'body': 'Olá!', 'client_id': str(uuid.uuid4())})

novas = requests.get('https://api.alt.app.br/v1/webchat/messages', headers=h).json()['data']

4. API externa — integre com seu CRM ou ERP

Além do widget, o ALt. expõe uma API para o seu sistema ler contatos e conversas e enviar mensagens. Crie a chave no painel: Desenvolvedor → API e chaves. A chave é secreta (dá acesso total ao seu espaço): use só no servidor, nunca no navegador.

Base:  https://api.alt.app.br/ext/v1
Auth:  Authorization: Bearer alt_sk_SUA_CHAVE
Limite: 600 requisições/min por espaço · erros em RFC 9457

Endpoints

GET   /ext/v1/contacts?query=&lifecycle=lead|customer|inactive&cursor=
PATCH /ext/v1/contacts/{id}            { "full_name"?, "email"?, "tags"?, "lifecycle"? }
GET   /ext/v1/conversations?status=&channel=&contact_id=&cursor=
GET   /ext/v1/conversations/{id}/messages?cursor=
POST  /ext/v1/conversations/{id}/messages   { "body": "texto" }

As listas são paginadas por cursor: use page.next_cursor da resposta até page.has_more ser falso. O envio de mensagem passa pelo mesmo funil da inbox — chega no WhatsApp/Instagram/etc. do contato como se a equipe tivesse enviado.

Exemplo — sincronizar contatos com o CRM (Python)

import requests

H = {'authorization': 'Bearer alt_sk_SUA_CHAVE'}
cursor, contatos = None, []
while True:
    r = requests.get('https://api.alt.app.br/ext/v1/contacts',
                     headers=H, params={'cursor': cursor}).json()
    contatos += r['data']
    if not r['page']['has_more']: break
    cursor = r['page']['next_cursor']

# marcar um lead como cliente depois da venda no ERP:
requests.patch(f"https://api.alt.app.br/ext/v1/contacts/{'{'}contato_id{'}'}",
               headers=H, json={'lifecycle': 'customer'})

Exemplo — responder uma conversa (curl)

curl -s https://api.alt.app.br/ext/v1/conversations/CONVERSA_ID/messages \
  -H 'authorization: Bearer alt_sk_SUA_CHAVE' \
  -H 'content-type: application/json' \
  -d '{"body":"Seu pedido saiu para entrega!"}'

Webhooks de saída (o ALt. avisar o SEU sistema quando chegar mensagem) estão no roadmap — por enquanto, consulte as listas por cursor no seu intervalo preferido.

Dúvidas?

Fale com a gente pelo chat do nosso próprio site — ele roda exatamente este widget.