Como Criar um Monitor 24/7 para Cita Previa na Espanha com Python e Telegram

Aprenda a automatizar o monitoramento de vagas de Cita Previa (Toma de Huellas) na Espanha usando Python e notificações em tempo real pelo Telegram.

Conseguir uma vaga para a ‘Toma de Huellas’ (expedição da TIE) no portal de Extranjería da Espanha tornou-se uma das etapas mais desgastantes para quem reside ou estuda no país. O sistema governamental abre vagas em horários aleatórios e sem aviso prévio. Ficar atualizando a página manualmente durante dias resulta frequentemente em bloqueios temporários de IP por excesso de requisições ou simplesmente na perda das vagas para quem foi segundos mais rápido.

A abordagem correta para resolver esse problema não é o clique manual, mas sim a engenharia reversa do fluxo de requisições e a implementação de um script resiliente em Python com envio de alertas imediatos via Telegram.

O Desafio da Arquitetura do Portal

O portal icp.administracionelectronica.gob.es utiliza sessões baseadas em cookies, validações de estado por formulários dinâmicos e proteções básicas contra abusos. Um monitor eficiente não precisa necessariamente de navegadores pesados como Selenium ou Playwright consumindo recursos em uma VPS; na maioria dos casos, bibliotecas HTTP assíncronas como httpx ou requests.Session bem configuradas entregam melhor desempenho com consumo mínimo de memória.

O fluxo técnico divide-se em quatro fases:

  1. Manutenção de sessão e cookies de navegação.
  2. Submissão das etapas do formulário (seleção de província, trâmite ‘Policia – Toma de Huella’, dados do solicitante).
  3. Parsing da resposta da etapa de calendário.
  4. Disparo do alerta se o texto padrão de indisponibilidade não for encontrado.

Passo 1: Mapeamento e Gestão de Sessão

Ao iniciar o monitoramento, cada ciclo precisa estabelecer uma sessão limpa para evitar carregar tokens expirados:

python
import httpx

HEADERS = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36’,
‘Accept-Language’: ‘es-ES,es;q=0.9’,
}

async def checkslots(provincecode, trammitecode):
async with httpx.AsyncClient(headers=HEADERS, follow
redirects=True) as client:
# Obter cookies iniciais
initurl = ‘https://icp.administracionelectronica.gob.es/icpplus/index.html’
response = await client.get(init
url)

    # Simular envio dos passos seguintes com base nas rotas internas
    # ...

Passo 2: Detecção de Disponibilidade

Quando não há datas, o portal retorna a mensagem clássica: ‘En este momento no hay citas disponibles’. Nosso avaliador booleano deve verificar a presença dessa string exata. Qualquer resposta divergente que continue o fluxo do formulário indica que uma data foi liberada.

python
NOSLOTSTEXT = ‘En este momento no hay citas disponibles’

def hasavailableslots(htmlcontent: str) -> bool:
if NO
SLOTSTEXT in htmlcontent:
return False
# Validar se não caímos em uma tela de erro de sessão ou manutenção
if ‘error’ in htmlcontent.lower() or ‘servicio temporalmente no disponible’ in htmlcontent.lower():
return False
return True

Passo 3: Alerta Instantâneo via Telegram Bot API

Como especialista em IA e automação de sistemas, recomendo manter a interface de notificação o mais desacoplada e rápida possível. O bot do Telegram atende com perfeição a esse requisito por meio de uma chamada simples à API HTTP:

python
async def sendtelegramalert(bottoken: str, chatid: str, message: str):
url = f’https://api.telegram.org/bot{bottoken}/sendMessage’
payload = {
‘chat
id’: chatid,
‘text’: message,
‘parse
mode’: ‘Markdown’
}
async with httpx.AsyncClient() as client:
await client.post(url, json=payload)

Quando o has_available_slots retorna True, a mensagem enviada deve incluir o link direto e instruções para que você assuma o preenchimento imediatamente no navegador.

Boas Práticas e Prevenção de Bloqueios

Para que o monitor opere 24 horas por dia sem interrupção:

  • Intervalo com Jitter: Não faça requisições em períodos estritamente regulares (ex: a cada 60 segundos cravados). Adicione variações aleatórias (jitter) entre 60 e 180 segundos para simular comportamento humano.
  • Tratamento de Exceções: Trate erros de timeout (httpx.ReadTimeout) e desconexões (ConnectError) com recuo exponencial (exponential backoff), evitando que falhas temporárias no servidor derrubem a execução do script.
  • Rotação de IPs (se necessário): Caso o monitoramento precise ser agressivo ou rodar em intervalos menores para múltiplos trâmites simultâneos, o uso de proxies rotativos residenciais é fundamental para contornar limitações da infraestrutura governamental.

Transforme Processos Críticos em Rotinas Automatizadas

Criar automações confiáveis para portais legados e com regras estritas exige precisão técnica, cuidado com a arquitetura de requisições e foco em estabilidade operacional contínua.

Se sua empresa ou rotina necessita de soluções avançadas de automação web, extração de dados resiliente ou integração com canais de comunicação sob demanda, entre em contato para desenvolvermos uma solução sob medida com os mais altos padrões da engenharia de software.

Preencha o formulário abaixo para que eu consiga entrar em contato com você.