Entrega no Speak-Y: avisos por e-mail e webhook a cada reunião

A aba Entrega de um espaço de trabalho de equipe no Speak-Y faz duas coisas quando uma gravação é compartilhada num canal: envia um e-mail para os endereços que você listar e envia uma requisição POST assinada para uma URL que você escolher. Os dois levam o mesmo pequeno conjunto de fatos — quem compartilhou, quanto dura a gravação, quando e de qual gravação se trata. Nenhum deles leva o resumo nem a transcrição.

Não é um recurso que ficou faltando. O conteúdo dos canais tem criptografia de ponta a ponta, então o servidor que envia o e-mail e o webhook nunca viu o texto. Este guia mostra como configurar os dois, o que exatamente chega à caixa de entrada e ao seu endpoint, como verificar o cabeçalho X-Speaky-Signature e quais canais são cobertos. Tudo aqui foi conferido no app e no servidor em 9 de outubro de 2026.

O que a aba Entrega faz?

Ela anuncia gravações novas a pessoas e sistemas que estão fora do feed do canal. Um colega compartilha uma reunião num canal; o servidor armazena a gravação criptografada e então avisa dois destinos, se estiverem configurados:

As configurações pertencem a um espaço de trabalho, não à sua conta: cada espaço de trabalho tem os próprios destinatários e o próprio webhook. Só o proprietário do espaço de trabalho ou um administrador pode alterá-las. Os membros veem a aba só para leitura, com a nota «Only an owner or admin can change integrations.» (só um proprietário ou administrador pode alterar as integrações).

Uma gravação vai do Mac de um colega para o servidor do Speak-Y e dali para uma caixa de entrada e um endpoint de webhook
O Mac criptografa a gravação antes de compartilhá-la. O servidor pode avisar que ela existe, mas não tem nada legível para encaminhar.

Como configurar?

Você precisa do app para macOS e do papel de proprietário ou administrador no espaço de trabalho.

  1. Abra a página do espaço de trabalho. Clique em ⋯ ao lado do nome do espaço de trabalho na barra lateral e escolha Edit workspace.
  2. Vá para a aba Entrega. É a terceira aba, depois de Overview e Members.
  3. Leia o cartão O que é enviado. Ele lista os canais do espaço de trabalho, então você vê o alcance antes de salvar qualquer coisa.
  4. Preencha Webhook. Cole o seu endereço em Endpoint URL e digite um segredo de pelo menos 8 caracteres em Webhook secret (HMAC). O botão Save webhook fica inativo até o segredo ter o tamanho mínimo. Depois de salvar, o status mostra Saved, o título ganha um selo Configurado e o campo do segredo é limpo: o app nunca mais mostra o segredo.
  5. Preencha Email delivery. Digite os endereços em Recipients, separados por vírgulas, e clique em Save email delivery.

Cada bloco funciona sem o outro. Para alterar o webhook mais tarde, informe a URL e um segredo de novo — o segredo não vem preenchido, porque o servidor não o devolve.

A aba Entrega de um espaço de trabalho no Speak-Y com o cartão de alcance, o bloco Webhook e o bloco Email delivery
1 — os canais que disparam um envio. 2 — o endereço do webhook e o segredo de assinatura. 3 — os destinatários do e-mail.

O que exatamente chega por e-mail?

Um aviso, não um resumo. O assunto é «Nova reunião no Speak-Y» (ou «Novo ditado no Speak-Y» quando o que foi compartilhado é um ditado), e o corpo tem três linhas e um botão:

No e-mail Exemplo
Autor O nome do colega que compartilhou a gravação
Duração 42 min
Quando 09/10/2026 às 14:05 UTC
Botão Abrir no Speak-Y — abre essa gravação no app para macOS

Abaixo do botão, o e-mail diz isso com todas as letras: «As gravações são criptografadas de ponta a ponta, então esta notificação traz apenas metadados.» O nome do canal e o do espaço de trabalho também não estão no e-mail — eles também são criptografados, então o servidor não os conhece.

Vale conhecer dois detalhes antes de prometer esse e-mail à equipe:

O que o e-mail de entrega do Speak-Y contém: autor, duração, horário e um botão que abre o app
Três fatos e um botão. O resumo, a transcrição e até o nome do canal ficam dentro do canal criptografado.

O que o webhook envia?

Um POST por gravação nova, com Content-Type: application/json, o cabeçalho X-Speaky-Event: team_record.created e este corpo:

{
  "event": "team_record.created",
  "workspace_id": "5b0e7c1e-2f4d-4a57-9d0a-6f1b2c3d4e5f",
  "channel_id": "c1a2b3c4-d5e6-47f8-9a0b-1c2d3e4f5a6b",
  "record_id": "8F2C1D7A-3B4E-4C5D-9E6F-0A1B2C3D4E5F",
  "created_by": "0d9c8b7a-6e5f-4d3c-2b1a-0f9e8d7c6b5a",
  "meta": { "duration_s": 2520, "kind": "meeting" },
  "server_created_at": "2026-10-09T14:05:12+00:00",
  "protocol_version": 2,
  "sent_at": "2026-10-09T14:05:12.480113+00:00"
}

meta.kind é meeting ou dictation, e meta.duration_s é a duração em segundos. Todo o resto é um identificador ou uma marcação de tempo. Não há título, nem lista de participantes, nem resumo, nem nome de canal: o seu endpoint fica sabendo que algo aconteceu e onde, não o que foi dito.

Isso basta para os usos de sempre — uma linha no chat da equipe, uma linha num tracker, um contador de reuniões por canal. Mantenha a sua própria tabela que relaciona channel_id a um nome legível. Note que o webhook de entrada de um chat não consegue receber essa requisição diretamente: os webhooks de entrada do Slack, por exemplo, esperam um corpo JSON com um campo text, então você precisa de um pequeno intermediário que verifique a assinatura e reformate a mensagem.

Como verificar a assinatura?

O cabeçalho X-Speaky-Signature tem a forma sha256=<hex>. O valor é o HMAC SHA-256 do corpo bruto da requisição, tendo como chave o segredo que você digitou na aba Entrega. Um receptor em Python:

import hashlib
import hmac

def is_from_speaky(secret: str, raw_body: bytes, header: str) -> bool:
    digest = hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(f"sha256={digest}", header)

Assine os bytes exatamente como chegaram. Se o seu framework interpreta o JSON e você o serializa de novo, a ordem das chaves e os espaços mudam, e a assinatura não vai bater.

Algumas características do remetente determinam como o receptor deve ser escrito:

Cinco verificações para um serviço que recebe o webhook do Speak-Y
Verificar nos bytes brutos, comparar em tempo constante, responder rápido, deduplicar por record_id e não tratar o webhook como uma fila.

Quais canais são cobertos?

O espaço de trabalho inteiro, com uma exceção. O cartão de alcance diz «Cada nova gravação em qualquer canal deste workspace dispara um envio», e não há filtro por canal. Num espaço de trabalho com canais de clientes movimentados, a reunião semanal não será a única coisa anunciada.

A exceção são os canais privados: uma gravação compartilhada num canal privado não é anunciada em lugar nenhum — nem por e-mail, nem por webhook. O cartão lista os canais que você consegue ver, inclusive os privados, com um cadeado, mas o servidor os ignora. O motivo é que a entrega é configurada por um proprietário ou administrador que pode não ser membro daquele canal privado; nem mesmo o fato de que algo foi gravado ali cabe a ele receber. Como dividir os canais entre públicos e privados está em quem vê o quê nos canais da equipe.

As gravações pessoais ficam fora de tudo isso. Nada sai da sua biblioteca até que você mesmo compartilhe uma gravação num canal.

Por que não o próprio resumo?

Porque o servidor teria de lê-lo. No Speak-Y, a gravação é criptografada no Mac com uma chave do canal antes de ser enviada, e as chaves de canal existem apenas nos dispositivos dos membros — como funciona o compartilhamento em equipe com criptografia de ponta a ponta percorre o mecanismo. Um servidor capaz de colocar o resumo num e-mail seria um servidor capaz de ler todos os canais.

Ferramentas construídas do jeito oposto enviam conteúdo, sim, e esse é um motivo legítimo para escolhê-las quando um resumo na caixa de entrada importa mais do que a criptografia de ponta a ponta. Conferido em 9 de outubro de 2026:

Se você precisa de uma cópia legível fora do app, faça-a de propósito, e não por notificação: ata da reunião semanal sem ninguém escrever mostra a exportação para o Confluence ou o Google Drive, e o servidor MCP do Speak-Y permite que um assistente de IA no Mac de um membro leia as gravações que esse membro já consegue abrir.

Os espaços de trabalho de equipe estão disponíveis no app do Speak-Y para macOS: criar um exige no mínimo o plano Pro, e os colegas entram de graça em qualquer plano. A página do Speak-Y Teams mostra como funcionam os canais compartilhados.

FAQ

O Speak-Y envia o resumo ou a transcrição por e-mail depois de uma reunião?

Não. O Email delivery envia um aviso de que uma nova reunião foi compartilhada num canal: o autor, a duração, o horário e um botão Abrir no Speak-Y. Os canais têm criptografia de ponta a ponta, então o servidor não tem resumo nem transcrição para colocar num e-mail. O texto é lido no app.

O que o webhook do Speak-Y envia?

Um POST em JSON com o evento team_record.created e apenas identificadores: workspace_id, channel_id, record_id, created_by, o tipo de gravação e a duração em meta, e duas marcações de tempo. Ele não contém transcrição, nem resumo, nem o nome do canal ou do espaço de trabalho.

Como verifico o cabeçalho X-Speaky-Signature?

Calcule o HMAC SHA-256 do corpo bruto da requisição com o segredo do seu webhook, codifique o resultado em hexadecimal e coloque sha256= na frente. Compare com o cabeçalho X-Speaky-Signature usando uma comparação em tempo constante, e faça isso antes de interpretar o JSON.

Quais canais disparam um envio?

Toda gravação nova compartilhada em qualquer canal público do espaço de trabalho. Não há filtro por canal. Canais privados nunca são anunciados, nem por e-mail nem por webhook, e gravações pessoais nunca saem da sua biblioteca.

Quem pode configurar o Email delivery e o webhook?

O proprietário do espaço de trabalho ou um administrador, na aba Entrega da página do espaço de trabalho, no app para macOS. Os membros veem a mesma aba só para leitura.