Esse repositório é um template para facilitar integrações com o Telegram usando o stack padrão do projeto (FastAPI, Celery, Redis, SQLAlchemy).
O objetivo é fornecer um wrapper HTTP minimalista para o Bot API,
com suporte a polling (desenvolvimento) e webhook (produção).
Quickstart
- Copie
.env.examplepara.enve ajusteTELEGRAM_BOT_TOKEN. - Instale dependências:
python -m pip install -r requirements.txt3a. Rodar FastAPI (webhook receiver):
uvicorn app.main:app --reload --host 0.0.0.0 --port 80003b. Rodar polling (desenvolvimento):
python -m app.bot.pollingEstrutura mínima
app/telegram_client.py— cliente HTTP assíncrono para Bot APIapp/bot/handlers.py— handlers de exemplo (echo)app/bot/polling.py— runner simples paragetUpdatesapp/main.py— FastAPI com endpoint de webhook
Webhook — Echo verificado
- O handler de exemplo
app.bot.handlers.handle_updatefoi verificado funcionando via webhook: ao enviar uma mensagem para o bot no Telegram, o bot responde com "Echo: ". - Passos rápidos para testar com webhook:
- Atualize
TELEGRAM_BOT_TOKEN,TELEGRAM_MODE=webhookeTELEGRAM_WEBHOOK_BASEem.env(ou nas variáveis do container). Não comiteTELEGRAM_BOT_TOKEN. - Reinicie a aplicação (ou redeploy via Docker/Coolify). No startup a app tentará registrar o webhook automaticamente e o resultado será escrito nos logs (
set_webhook result:). - Envie uma mensagem para o bot no Telegram e verifique que ele responde com
Echo: ....
- Atualize
Testar webhook localmente
- Para testes locais, defina
TELEGRAM_WEBHOOK_BASEpara um URL HTTPS público que encaminhe para sua aplicação (por exemplo, um domínio temporário ou serviço de túnel de sua preferência). - Reinicie a app (uvicorn ou Docker). Verifique logs para
set_webhook resulte então envie mensagens ao bot.
Checklist de deploy (Coolify)
- No painel do Coolify, crie um novo serviço apontando para este repositório (Docker Compose).
- Configure as variáveis de ambiente no Coolify (não use
.envno repositório):TELEGRAM_MODE=webhookTELEGRAM_WEBHOOK_BASE=https://<seu-domínio>TELEGRAM_BOT_TOKEN(secreto)
- Use
docker-compose.prod.ymledocker-compose.prod.override.yml(fornecem configurações limpadas para produção). - O deploy fará a chamada
set_webhookautomaticamente no startup quandoTELEGRAM_WEBHOOK_BASEestiver presente.
Problemas e troubleshooting
- "TELEGRAM_BOT_TOKEN not set": verifique se a variável está presente no ambiente do container (Coolify UI) ou no
.envdurante testes locais. -- Webhook não chega: confirme que oTELEGRAM_WEBHOOK_BASEé HTTPS válido (Coolify fornece HTTPS automaticamente). - Logs úteis:
- Local (uvicorn): saída do terminal onde
uvicornestá rodando. - Docker Compose:
docker compose logs web --follow.
- Local (uvicorn): saída do terminal onde
Containerização e deploy (Coolify)
-
Ajuste o
.env:TELEGRAM_MODE=webhookTELEGRAM_WEBHOOK_BASE=https://your-deployed-domain(defina o domínio que o Coolify fornecerá)
-
Build & run localmente com Docker Compose:
docker compose build --no-cache
docker compose up -d- Deploy no Coolify:
- Faça push deste repositório para seu Git remoto.
- No painel do Coolify crie um novo serviço usando Docker Compose apontando para este repositório.
- Configure as variáveis de ambiente no painel do Coolify:
TELEGRAM_MODE=webhookeTELEGRAM_WEBHOOK_BASE=https://<seu-domínio>. - Remova o
volumesdodocker-compose.ymlno Coolify (o serviço irá usar a cópia do repositório), e garanta que acommanduse--app-dir /app/project.
Observações:
- A imagem do
webusa/app/projectcomoWORKDIRe o comando padrão do container executauvicorn app.main:app --app-dir /app/project. - Após o deploy o serviço fará o
set_webhookautomaticamente no startup seTELEGRAM_WEBHOOK_BASEestiver configurado.