Integrações

O que o agente recolhe não serve de nada preso aqui. Cada marcação, recado, contacto, triagem e passagem para uma pessoa pode ser enviada para um endereço à sua escolha, assim que acontece.

Um endereço, e não trinta ligações prontas — porque a ligação ao seu CRM, à sua agenda, ao seu programa de faturação ou ao software que a sua empresa escreveu é feita por nós, de raiz, à medida do seu sistema. Não usamos serviços de automatização de terceiros. Fale connosco para avaliar a ligação que precisa.

Disponível a partir do plano Pro.

Configurar

Nas definições do agente, Enviar para as suas ferramentas:

  1. Cole o endereço de destino. Tem de começar por https://.
  2. Escolha o que enviar — pode enviar só as marcações, por exemplo.
  3. Carregue em Enviar um teste. Chega em segundos, com o mesmo formato de um envio real.

O endereço é verificado no momento em que o guarda. Se for recusado, dizemos porquê.

O que recebe

Um POST com Content-Type: application/json:

{
  "event": "booking.created",
  "at": "2026-08-07T10:32:11.204Z",
  "data": {
    "id": "bk_7Kd2…",
    "kind": "booking",
    "channel": "voice",
    "contactName": "Ana Silva",
    "contactPhone": "+351910000000",
    "contactEmail": null,
    "scheduledFor": "2026-08-12T15:00:00.000Z",
    "notes": "Primeira consulta."
  }
}

Os acontecimentos possíveis são booking.created, message.taken, lead.captured, screening.recorded, document.requested e handover.

Confirmar que veio mesmo de nós

O seu endereço é público. Sem uma verificação, qualquer pessoa que o descubra pode criar marcações falsas no seu CRM.

Cada envio leva três cabeçalhos:

| Cabeçalho | O que é | | --- | --- | | x-nexiagent-event | O acontecimento, para encaminhar sem ler o corpo. | | x-nexiagent-timestamp | Segundos desde 1970, incluídos na assinatura. | | x-nexiagent-signature | HMAC-SHA256 de {timestamp}.{corpo}, em hexadecimal. |

A chave de assinatura está no mesmo ecrã. Em Node:

import { createHmac, timingSafeEqual } from "node:crypto";

function valido(corpoBruto, cabecalhos, chave) {
  const ts = cabecalhos["x-nexiagent-timestamp"];
  const recebida = Buffer.from(cabecalhos["x-nexiagent-signature"] ?? "");
  const esperada = Buffer.from(
    createHmac("sha256", chave).update(`${ts}.${corpoBruto}`).digest("hex"),
  );

  // Recuse o que for antigo: sem isto, um envio capturado pode ser repetido.
  if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;

  return (
    recebida.length === esperada.length && timingSafeEqual(recebida, esperada)
  );
}

Em Python:

import hmac, hashlib, time

def valido(corpo_bruto: bytes, cabecalhos, chave: str) -> bool:
    ts = cabecalhos.get("x-nexiagent-timestamp", "")
    if abs(time.time() - float(ts or 0)) > 300:
        return False
    esperada = hmac.new(
        chave.encode(), f"{ts}.".encode() + corpo_bruto, hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(esperada, cabecalhos.get("x-nexiagent-signature", ""))

Duas coisas que costumam correr mal:

  • Assine o corpo em bruto, tal como chegou. Se o descodificar e voltar a codificar, um espaço a mais muda a assinatura.
  • Compare em tempo constante (timingSafeEqual, compare_digest). Um === normal revela, pelo tempo que demora, quantos caracteres acertou.

Quando o seu endereço está em baixo

Não deitamos fora. Tentamos outra vez ao fim de 1 minuto, 5, 25, cerca de 2 horas e cerca de 10 — seis tentativas ao longo de meio dia, que cobre um deploy, um certificado expirado ou uma tarde má do seu fornecedor.

Se ao fim disso continuar a falhar, o envio fica marcado como falhado e o endereço aparece com Não está a chegar e o erro exato. As tentativas recentes ficam visíveis no mesmo ecrã.

Responda 2xx para nós considerarmos entregue. Responda depressa — se demorar mais de 10 segundos, desistimos dessa tentativa. Se tiver trabalho demorado a fazer, guarde o que recebeu e faça-o depois.

O que não aceitamos

O endereço é usado pelos nossos servidores, e portanto:

  • Só https. Os dados dos seus clientes não vão pela rede sem encriptação.
  • Só endereços públicos. Recusamos localhost, 127.0.0.1, 10.x, 192.168.x, 169.254.x e equivalentes em IPv6 — verificado depois de resolver o nome, não só pelo texto do endereço.

Isto não é burocracia: sem estas duas regras, um endereço apontado para dentro faria os nossos servidores lerem a nossa própria infraestrutura em seu nome.

Segurança

  • A chave de assinatura é um segredo. Guarde-a como guarda uma palavra-passe.
  • Se achar que ficou exposta, remova o endereço e volte a criá-lo — a chave nova é diferente.
  • Nunca lhe pedimos a palavra-passe de nenhuma das suas ferramentas.