A gravação é uma feature exclusiva do dono — você grava, você assiste, você baixa. Cliente nunca tem acesso à gravação ou ao link dela. Retenção padrão: 30 dias após o encerramento da chamada.
⚠️ Pra gravar legalmente, o cliente precisa ter aceitado o termo de consentimento na FASE 2.5 da jornada dele (ver Configuração global de vídeo pra detalhes do termo).
2 modos de gravar
Modo 1 — Auto-start
Configurar em Configurações → Vídeo atendimento → toggle "Gravação automática" = ON.
Quando você entra na sala, gravação começa assim que o callObject conecta. Sem clique, sem decisão. Útil pra:
- Médico/terapeuta que quer registro de TODOS os atendimentos
- Advogado com obrigação de manter ata da consulta
- Aulas que precisam ser sempre arquivadas
Modo 2 — Manual via botão REC
Mesmo com auto-start desligado, você pode iniciar gravação a qualquer momento clicando o botão REC na ControlBar (atalho R) — apenas dono vê esse botão.
- Click 1: começa a gravar (badge REC pulsante aparece no header)
- Click 2: para de gravar (badge some)
- Pode iniciar/parar quantas vezes quiser na mesma chamada
- Cada segmento gravado vira um arquivo separado no Daily
Útil pra:
- Decidir gravar só uma parte específica (ex: cliente concorda em registrar quando o assunto fica formal)
- Esquecer de ligar auto-start mas mudar de ideia no meio
- Pausar gravação durante uma "pausa pessoal" do cliente
Cliente nunca vê o REC
Privacidade total (RN-V02 + RN-V06):
- Cliente não vê o botão REC (não existe na ControlBar dele)
- Cliente não vê o badge REC pulsante (filtrado no render)
- Cliente recebeu o termo no início da jornada (FASE 2.5) — esse é o aviso prévio. Durante a chamada, sem feedback visual
Se você tem auto-start desligado e o cliente diz "não quero ser gravado" no meio da chamada, simplesmente não clique REC. Ou se já estava gravando, click pra parar — sem precisar explicar pra ele.
Onde acessar a gravação
A gravação demora ~30 segundos pra ficar disponível depois do encerramento (Daily processa o arquivo). Depois aparece em dois lugares:
1. No detalhe do agendamento (/agenda → click no card)
Bloco "Gravação" com:
- Botão ▶ Assistir (abre PlayerModal completo)
- Botão ⬇ Baixar MP4 (download direto)
- Countdown: "Expira em XX dias" (cor verde > 14d, amarela 7-14d, laranja 3-7d, vermelha ≤3d)
2. Histórico geral (/configuracoes/video/historico)
Lista cronológica de TODAS as gravações:
- Filtros: Disponíveis / Expirando ≤7d / Expiradas / Todas
- Busca por cliente ou agenda (debounce 300ms)
- Click numa linha → abre o mesmo PlayerModal
Player completo
O PlayerModal abre quando você clica "Assistir". Recursos:
- ⏯️ Play/pause (Space ou K)
- ⏭️ Seek: progress bar scrubbable com hover preview de tempo
- 🖼️ Picture-in-Picture (PiP nativo do navegador — F)
- 🖥️ Fullscreen com auto-hide de controles + dica "Esc para sair"
- ⚡ Velocidade 0.5x / 1x / 1.5x / 2x
- 💬 Captions (transcrição como legenda) — toggle via botão CC ou tecla C
- ⌨️ Atalhos: Space/K play, F fullscreen, M mute, J/L -10s/+10s, ←/→ -5s/+5s, ↑/↓ volume, C captions
Sync transcrição ↔ vídeo ↔ sentimento
Ao lado do player (desktop) ou abaixo (mobile):
- Lista de transcrição clicável — click num trecho pula o vídeo pra esse momento
- Timeline de sentimento — barra horizontal com cores por minuto (positivo verde, neutro cinza, preocupado laranja, etc) — hover mostra contexto, click pula
Retenção 30 dias (padrão)
Por default, a gravação fica 30 dias disponível. Após esse prazo:
| Antes de expirar | Depois de expirar |
|---|---|
| ✅ Vídeo MP4 acessível | ❌ Vídeo removido do storage Daily |
| ✅ Player funciona | ❌ Player não abre mais |
| ✅ Botão Baixar funciona | ❌ Botão Baixar some |
| ✅ Transcrição visível inline | ✅ Transcrição preservada (texto sobrevive) |
| ✅ Resumo IA visível | ✅ Resumo IA preservado |
| ✅ Histórico da chamada visível | ✅ Histórico preservado |
Útil saber: o que importa legalmente (transcrição + resumo) fica preservado. Só o vídeo MP4 propriamente dito é removido pra liberar storage.
Ajustar retenção
Em Configurações → Vídeo atendimento → campo "Retenção da gravação":
- 7 dias
- 30 dias (padrão)
- 60 dias
- 90 dias
Não há opção "infinito" — Daily.co cobra storage e a Kontato controla isso pra você. Pra arquivo permanente, baixe o MP4 antes de expirar.
Como baixar (arquivo permanente)
- Vá no detalhe do agendamento ou histórico
- Click ⬇ Baixar MP4
- Navegador faz download (mesma URL que o player usa, sem CORS)
- Salve onde quiser (Drive, NAS, HD externo)
URL da gravação expira em 1 hora (assinada pela AWS S3 onde Daily hospeda). Se você abrir o link antigo depois de 1h, dá 403. Por isso o sistema regenera o link a cada acesso.
Endpoint "reprocessar" — recovery one-shot
Se uma gravação ficar órfã (existe no Daily mas o link não foi salvo na Kontato), há um endpoint pra reprocessar manualmente:
POST /api/video/sessao/{sessaoId}/reprocessar
(Requer auth de dono do negócio. Implementado em v0.27.32)
Faz:
- Busca a gravação no Daily REST
- Regenera URL assinada
- Salva em
video_sessoes.gravacao_url - Dispara transcrição Whisper + resumo IA em background
Use quando o card mostra "Processando gravação..." infinito (não acontece mais hoje, mas existe se precisar).
Causas históricas de "Processando..." infinito (corrigidas)
Em v0.27.30 corrigimos 2 causas raiz que faziam gravação ficar órfã:
-
gravacao_ativa=falseno DB: quando dono iniciava gravação manualmente, o flag não era atualizado. Cron de polling filtravagravacao_ativa=truee ignorava a sessão. Fix: endpointmarcar-gravandochamado peloRecordingControlquandoisRecordingvira true (idempotente) -
Bug no select do cron: relationship inválido
negocio_video_config(retencao_gravacao_dias)sem FK declarado faziasupabase-jsretornar undefined silenciosamente. Fix: removido o relationship (não era usado de qualquer forma; retenção é hardcoded 30d no cron)
Hoje, gravação aparece em ~30s após encerramento. Se demorar mais que 5 minutos, há problema técnico — abra ticket no suporte da Kira com o ID do agendamento.
Combinando com transcrição e sentimento
A gravação é a fonte das outras 3 features:
- Transcrição (Whisper) — só funciona em chamadas que foram gravadas
- Resumo IA (OpenRouter) — gerado em cima da transcrição
- Sentimento real-time — capturado AO VIVO durante a chamada (não depende da gravação), mas a timeline persiste e é mostrada no replay
Se você não grava, transcrição e resumo não acontecem. Sentimento ao vivo continua funcionando.
Próximos artigos
- Transcrição e resumo IA — Whisper + OpenRouter
- Sentimento real-time — análise ao vivo só pro dono
- Histórico e relatórios —
/configuracoes/video/historico+ admin