API Reference: Porta-Vozes

O modulo Porta-Vozes permite que o administrador selecione membros cujas postagens em redes sociais (Instagram, YouTube, Twitter/X) aparecem no feed do nucleo como embed nativo (iframe).

Conceito

Porta-vozes sao membros selecionados pelo administrador para representar o nucleo nas redes sociais. Suas postagens sao exibidas diretamente no feed do nucleo, utilizando embeds nativos de cada plataforma (Instagram /embed, YouTube /embed, Twitter embed).

O sistema suporta sincronizacao automatica via RSS (cron a cada 30 minutos usando @nestjs/schedule) e tambem sincronizacao manual pelo admin. Alem disso, o admin pode adicionar postagens manualmente colando a URL do post — o sistema auto-detecta a plataforma e gera a URL de embed.

Cargo PORTA_VOZ

O cargo PORTA_VOZ e atribuido pelo Administrador a membros que representam o nucleo publicamente. Alem de aparecerem na pagina de porta-vozes, membros com esse cargo ganham permissoes extras: criar comunicados, enquetes, enviar emails, criar tarefas e usar o Assistente IA.

Migration

00013: Cria as tabelas porta_vozes, porta_voz_redes e porta_voz_postagens.


Endpoints — Porta-Vozes

Base URL: /api/porta-vozes

MetodoEndpointPermissaoDescricao
GET/api/porta-vozesCoord/AdminListar porta-vozes com suas redes sociais
POST/api/porta-vozesAdminAdicionar membro como porta-voz
DELETE/api/porta-vozes/:idAdminRemover porta-voz

POST /api/porta-vozes — Body

{
  "usuarioId": "uuid-do-membro"
}

Endpoints — Redes Sociais

MetodoEndpointPermissaoDescricao
POST/api/porta-vozes/:id/redesAdminAdicionar rede social a um porta-voz
DELETE/api/porta-vozes/redes/:idAdminRemover rede social

POST /api/porta-vozes/:id/redes — Body

{
  "plataforma": "INSTAGRAM | YOUTUBE | TWITTER",
  "username": "@usuario",
  "urlPerfil": "https://instagram.com/usuario",  // opcional
  "rssUrl": "https://rsshub.app/instagram/user/usuario"  // opcional
}

Endpoints — Postagens

MetodoEndpointPermissaoDescricao
GET/api/porta-vozes/:id/postagensAutenticadoListar postagens embeddadas do porta-voz
POST/api/porta-vozes/:id/postagensAdminAdicionar postagem manualmente (cola URL)

POST /api/porta-vozes/:id/postagens — Body

{
  "url": "https://www.instagram.com/p/ABC123/"
}

O sistema auto-detecta a plataforma pela URL e gera a URL de embed automaticamente.


Endpoints — Sync

MetodoEndpointPermissaoDescricao
POST/api/porta-vozes/syncAdminForca sincronizacao RSS de todas as redes

Parse de URLs por Plataforma

O sistema identifica a plataforma e extrai o ID da postagem a partir da URL:

PlataformaPadrao de URLEmbed gerado
Instagraminstagram.com/p/{id}instagram.com/p/{id}/embed
YouTubeyoutube.com/watch?v={id}youtube.com/embed/{id}
Twitter/Xtwitter.com/.../status/{id}Embed via Twitter oEmbed / iframe

Sincronizacao Automatica

  • Cron job a cada 30 minutos via @nestjs/schedule
  • Busca RSS feeds configurados em cada rede social do porta-voz
  • Novas postagens encontradas sao inseridas automaticamente
  • Cada nova postagem gera um item no feed do nucleo e uma notificacao para os membros

Sincronizacao Manual

O admin pode forcar a sincronizacao a qualquer momento via POST /api/porta-vozes/syncou pelo botao "Sincronizar Agora" na interface.


RSS Automatico

O sistema busca automaticamente novas postagens via RSS feeds configurados:

  • Cron job executado a cada 30 minutos via @nestjs/schedule
  • Para cada porta-voz, busca RSS de todas as redes sociais configuradas com rssUrl
  • Novas postagens sao inseridas automaticamente, gerando item no feed e notificacao
  • Duplicatas sao ignoradas (verificacao por URL da postagem)
  • Logs de sincronizacao registrados para debug

Layout Responsivo

A pagina de porta-vozes e responsiva:

  • Desktop: Grid de cards com foto do porta-voz, nome, redes sociais e ultimas postagens lado a lado
  • Mobile: Cards empilhados em coluna unica. Postagens com embeds responsivos (largura 100%). Redes sociais como icones clicaveis.
  • Acoes admin (adicionar/remover porta-voz, adicionar rede/postagem) adaptadas para touch em mobile