Entrada por Voz
Status: No ar desde a Phase 62 (2026-06-05). whisper.cpp auto-hospedado na Contabo — sem dependência da OpenAI, nenhum áudio sai do seu servidor.
O Arc OS suporta duas camadas de entrada por voz no compositor do chat:
| Camada | Requer | Funciona em |
|---|---|---|
| L1 — Web Speech API | Chrome ou Edge (Chromium) | Todos os planos Arc |
| L2 — whisper auto-hospedado | Qualquer navegador (MediaRecorder WebM/WAV) | Arc Standard Cloud, On-premise |
Ambas as camadas alimentam a mesma caixa de texto do compositor e são transparentes para o worker de IA.
Usando Voz no Chat
- Abra o workspace de qualquer projeto e foque o compositor do chat.
- Clique no botão de microfone (canto inferior esquerdo do compositor) ou pressione Ctrl+Shift+V (funciona em qualquer layout de teclado — o atalho corresponde à tecla física V, não ao caractere do layout).
- Fale. Uma animação de forma de onda + borda laranja indicam a gravação.
- Clique no botão do microfone novamente (ou pressione o atalho) para parar.
- O texto transcrito aparece no compositor — edite se necessário e depois envie.
Modo contínuo: L1 continua escutando até você parar; L2 grava um único clipe e o envia para transcrição.
L1 — Web Speech API (Chrome/Edge)
Usa a API de reconhecimento de fala integrada do navegador. Funciona instantaneamente, sem ida e volta ao servidor.
Localidade: definida automaticamente a partir da sua preferência de idioma no Arc. Códigos BCP-47 suportados: uk-UA, en-US, de-DE, es-ES, fr-FR, pl-PL, ru-RU, pt-BR.
Permissões: o navegador solicita acesso ao microfone no primeiro uso. Se você bloqueou por acidente, vá em Site settings → Microphone → Allow para arc-os.co. O cabeçalho Permissions-Policy em arc-os.co usa microphone=(self) — o acesso same-origin é permitido enquanto embeds cross-origin são bloqueados.
Limitações:
- Requer Chrome ou Edge (baseados em Chromium). Firefox e Safari caem automaticamente para a L2.
- A qualidade da transcrição depende dos servidores do Google (chamados pelo navegador, não pelo Arc OS).
L2 — whisper.cpp auto-hospedado
O Arc OS roda um arc-whisper.service persistente na Contabo com o modelo ggml-base (142 MB) pré-carregado. Quando o navegador não suporta a Web Speech API, o compositor recorre automaticamente a esta camada:
- O navegador grava um clipe WebM via
MediaRecorder. - Ao parar, o clipe é enviado via
POSTpara/api/crm/voice/transcribe(multipart, máx. 25 MB). - O servidor o encaminha ao whisper-server local em
127.0.0.1:19214— os bytes de áudio nunca saem da Contabo. - O texto transcrito retorna e é inserido no compositor.
Latência: ~3,4 s para um clipe de 11 segundos (modelo aquecido, 3,1× tempo real na máquina atual EPYC de 6 vCPU).
Concorrência: o whisper-server tem um semáforo de 2 slots. Se ambos os slots estiverem ocupados, a API retorna 429 ("server busy") e a UI mostra um toast — tente novamente em alguns segundos.
Cota Diária
Cada usuário tem um limite flexível de 60 min/dia para transcrições L2. O servidor estima a duração do clipe a partir do tamanho do upload (assumindo codec de voz de ~32 kbps, precisão de ±30%). Quando o limite é atingido:
- A API retorna
429com{ "error": "Daily voice quota reached (60 min/day)", "used": <seconds>, "cap": 3600 } - O botão do microfone fica desabilitado pelo resto do dia
- A cota reinicia à meia-noite UTC
A L1 (Web Speech API) não está sujeita a esse limite — ela usa o serviço do próprio navegador.
Solução de Problemas
| Sintoma | Causa provável | Correção |
|---|---|---|
| Botão do microfone acinzentado | Cota diária atingida | Aguarde até a meia-noite UTC |
| "Microphone access blocked" | Navegador bloqueou o microfone | Site settings → Microphone → Allow para arc-os.co |
| L1 não funciona no Firefox | O Firefox não suporta a Web Speech API | Cai para a L2 automaticamente |
| 429 "server busy" | Dois outros usuários transcrevendo | Tente novamente após ~5 s |
| Qualidade da transcrição ruim | Ruído de fundo / modelo base da L2 | Fale com clareza; transcrição Pro (modelo maior) é uma fase futura |
| Ctrl+Shift+V não faz nada | Foco fora do compositor | Clique dentro da textarea do compositor primeiro |
Referências
shared/routes/voice.ts— handler do endpoint (Phase 62.4, #373)shared/migrations/051_voice_usage.ts— tabela de cotavoice_usage_logfrontend/src/crm/pages/workspace/Composer.jsx— componente MicButtonarc-whisper.servicena Contabo — configuração do daemon whisper.cpp- Endpoint da API:
POST /api/crm/voice/transcribe