Integrações

O resultado chega onde o trabalho acontece.

Reunião no Meet, decisão no Slack, oportunidade no CRM, arquivo no Drive. O VoiceSpeak entrega onde a informação precisa ser vista, e não em mais uma aba.

3eventos por atendimento
HMACem toda entrega
tentativas com reenvio manual
Eventos saindo para o seu sistemaconversa 254f1b8d
conversa.encerradao atendimento terminaaguardando
gravacao.prontao áudio sobe para o storageaguardando
interacao.resumidaresumo, decisões e próximo passoaguardando
HMAC-SHA2563 tentativas, backoff 2 s / 4 s
O que sai daqui

Os três eventos de um atendimento

Eles são separados de propósito. Avisar tudo de uma vez obrigaria a esperar o resumo ficar pronto para contar que a conversa acabou.

1

conversa.encerrada

Sai no instante em que o atendimento termina. Traz quem falou com quem, por qual canal, quanto durou e o desfecho medido.

0 s
2

gravacao.pronta

Sai quando o áudio sobe, com a URL assinada. Avisar antes entregaria uma ligação sem áudio e obrigaria você a voltar para buscar o que faltou.

+4 s
3

interacao.resumida

Sai quando o material está escrito: resumo em português, o que ficou combinado, o próximo passo e a leitura de interesse. É este que se anexa à oportunidade.

+38 s
Contrato

O corpo que chega no seu endpoint

{
  "evento": "interacao.resumida",
  "versao": 1,
  "conversa_id": "254f1b8d-…",
  "canal": "telefone",
  "referencia_externa": "CRM-8891",     // o SEU id, de volta
  "contato": {
    "nome": "Thays Wanderley",
    "telefone": "5511949859991",
    "empresa": "Kroma Tech LTDA"
  },
  "resumo": "Renovação do e-CNPJ. Certificado vence em 22/09.",
  "combinado": "Videoconferência quinta às 10h.",
  "proximo_passo": "Enviar lista de documentos até quarta.",
  "interesse": "alto",
  "recusou": false,                     // governa se pode procurar de novo
  "duracao_segundos": 143,
  "objetivo_atingido": true,
  "gravacao_url": "https://…"            // assinada, 7 dias
}
# Python, valide SEMPRE, antes de olhar o corpo
import hmac, hashlib

def valida(corpo: bytes, cabecalho: str, segredo: str) -> bool:
    esperado = "sha256=" + hmac.new(
        segredo.encode(), corpo, hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(esperado, cabecalho)


# Node
const esperado = "sha256=" + crypto
  .createHmac("sha256", segredo)
  .update(corpoCru)          // o corpo CRU, antes do JSON.parse
  .digest("hex")

crypto.timingSafeEqual(Buffer.from(esperado), Buffer.from(assinatura))
curl -X POST https://api.voicespeak.app/v1/webhooks \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://crm.suaempresa.com/hooks/voicespeak",
    "eventos": ["conversa.encerrada",
                 "gravacao.pronta",
                 "interacao.resumida"],
    "segredo": "…"
  }'

# testar antes de depender disso:
curl -X POST https://api.voicespeak.app/v1/webhooks/{id}/testar \
  -H "Authorization: Bearer sk_live_…"

Falhas ficam visíveis, não em silêncio

Três tentativas, com espera de 2 e 4 segundos e tempo limite de 10. Depois disso, a entrega falha, e aparece na tela de entregas, com o código de resposta e o corpo que o seu servidor devolveu.

Você reenvia com um clique, individualmente ou em lote. É deliberado que a falha seja ruidosa: um resultado que existe aqui e não existe no seu CRM é pior que um erro na tela.

interacao.resumida12/08 14:22 · tentativa 1200
gravacao.pronta12/08 14:19 · 3 tentativas502 · reenviar
conversa.encerrada12/08 14:19 · tentativa 1200

Quem participou sabe que estamos ali

Quando o VoiceSpeak entra numa reunião, ele aparece na lista de participantes com nome próprio. Ninguém é gravado por um convidado invisível.

Você escolhe o critério de entrada: todas as reuniões, só as com mais de duas pessoas, ou só as que você marcar. E qualquer participante pode pedir que ele saia; ele sai, e o trecho anterior é descartado se você configurar assim.

14:00

Comitê comercial · 4 participantes

Convidado

VoiceSpeak · Notas da Biz

entrou 14:01 · transcrevendo
Regra

Entrar só em reuniões com 3 pessoas ou mais

Perguntas frequentes

Preciso de desenvolvedor para conectar?
Para reunião, mensagens e armazenamento, não: é autorizar a conta e escolher para onde o resultado vai. Para CRM próprio e sistemas internos, sim, é um webhook e algumas horas de trabalho, e o contrato está todo em API.
O que exatamente chega no meu sistema?
Três eventos, nesta ordem: conversa.encerrada assim que o atendimento termina; gravacao.pronta quando o áudio sobe, com a URL assinada; e interacao.resumida alguns segundos depois, com o resumo, o que ficou combinado, o próximo passo e a leitura de interesse. O último é o que costuma ser anexado à oportunidade no CRM.
Como sei que o webhook veio mesmo de vocês?
Cada entrega vai assinada com HMAC-SHA256 do corpo, no cabeçalho x-voicespeak-signature. Valide sempre. Sem validar, quem descobrir a URL do seu CRM pode forjar “reunião agendada”, e o vendedor aparece numa reunião que não existe.
E se o meu sistema estiver fora do ar na hora?
Tentamos três vezes, com espera de 2 s e 4 s, e tempo limite de 10 s. Seu sistema fora do ar não segura nada aqui, mas a falha fica registrada e aparece na tela de entregas, onde você reenvia com um clique. Um resultado que existe aqui e não existe lá é pior que um erro visível.
Dá para o VoiceSpeak entrar nas reuniões sozinho?
Dá. Conectando a agenda, ele entra nas reuniões que você marcar: todas, só as que têm mais de duas pessoas, ou só as que você marcar manualmente. Ele aparece na lista de participantes com nome próprio: ninguém é gravado por um convidado invisível.
Existe integração com o meu CRM específico?
Se ele aceita webhook, e praticamente todos aceitam, existe. Para os grandes há conector pronto; para os demais, o webhook resolve em algumas horas. Conte qual é e dizemos em que categoria ele cai.

Conecte primeiro o lugar onde a decisão morre

Na maioria dos times é o CRM, a conversa aconteceu, foi boa, e ninguém registrou. Comece por ali e o resto vem sozinho.