Skip to content

O que acontece ao criar uma rádio

Do lado operacional, “criar rádio” é um passo + esperar 10 min. Aqui está o que realmente acontece por baixo.

Uma station nova é criada no AzuraCast, via API de administração (POST /api/admin/stations) ou pela tela de admin. No corpo vão os dados básicos:

{
"name": "Rádio Nova",
"short_name": "radionova",
"frontend_type": "icecast",
"backend_type": "liquidsoap",
"timezone": "America/Sao_Paulo",
"enable_public_page": true,
"enable_requests": true,
"enable_streamers": true
}

Isso cria o par Icecast + Liquidsoap da rádio e o mount de áudio. O short_name (apelido/shortcode) é a chave que amarra tudo daqui pra frente.

Passo 2 — o robô provisiona (automático, ≤10 min)

Section titled “Passo 2 — o robô provisiona (automático, ≤10 min)”

O cron provision-radios.mjs (a cada 10 min) lê as estações direto da API pública do AzuraCast e, pra cada uma que ainda não existe no painel:

  1. Cria a rádio no painel (createRadio no painel.db): usuário = shortcode, senha inicial = <shortcode>2026, vinculada ao station_id e ao nome reais.
  2. Adiciona o subdomínio na Vercel (projeto sites): <slug>.agoranoar.app.br, com emissão de certificado (http-01). O seed do site é gerado on-the-fly pelo app.

Resultado: “criou no AzuraCast → em até 10 min o site está no ar sozinho”. O robô é idempotente — as rádios que já existem são puladas (não mexe nas antigas).

A partir daí, a rádio nova é tratada como qualquer outra pelos demais crons:

  • Hora certa passa a atualizar o áudio dela (se ligada);
  • Distribuição de conteúdo (programas/programetes; campanhas e vinhetas conforme o plano) já a inclui;
  • Regra de fade é aplicada nela no próximo ciclo;
  • O vigia passa a monitorá-la;
  • Ela entra nos backups.

Aqui está o vão do processo. Duas coisas não são automáticas:

  • O tier (plano). A rádio nasce Essencial (o campo radios.tier fica vazio, e o código trata vazio = essencial). Pra mudar, usa-se o endpoint admin POST /api/admin/tier com { station_id, tier }.
  • O bitrate. A qualidade do mount (128/192/256) é alinhada ao plano por um passo à parte — hoje um ajuste manual/script, não parte da criação.
[Admin] cria station no AzuraCast
│ (shortcode = chave)
[Cron 10min] provision-radios:
├─ cria rádio no painel (senha <shortcode>2026)
└─ cria subdomínio na Vercel (site no ar)
[Automático] entra em: hora certa · conteúdo · fade · vigia · backup
[Plano] o admin escolhe o tier na criação → tier + bitrate aplicados
(alvo: campo no AzuraCast lido pelo provision-radios; ver caution acima)