Um simples Telegram Bot para traduzir solicitações POST
com carga útil JSON em mensagens push do Telegram. Gotify e ntfy.sh semelhantes, exceto sem um aplicativo extra. Útil para monitoramento de servidores, alertas e qualquer outra coisa.
Abra o Telegram, inicie um bate-papo com o TelepushBot (ou seu próprio bot, respectivamente) e digite /start
para obter um token de destinatário.
As mensagens são enviadas via POST
para https://telepush.dev/api/[[inlets/<inlet_name>]|messages]/<recipient>
.
RECIPIENT_TONEN=... # O token que você recebeu usando /start.curl -XPOST -H 'Tipo de conteúdo: aplicativo/json' -d '{ "text": "*Olá mundo!* (sim, aqui é Markdown)" }' "https://telepush.dev/api/messages/${RECIPIENT_TONEN}"
Ao hospedar sua própria instância, substitua o URL respectivamente.
Chave | Tipo | Descrição |
---|---|---|
text * | corda | Mensagem real em texto simples ou formato Markdown |
origin | corda | O que será mostrado como remetente da sua mensagem |
type | [ TEXT , FILE ] | Tipo de mensagem, ou seja, para enviar texto ou arquivo (padrão: TEXT ) |
file ** | base64 | Conteúdo do arquivo codificado em Base64 |
filename ** | corda | Nome do arquivo a enviar |
options | objeto | Opções adicionais para passar |
options.disable_link_previews | bool | Se deve mostrar visualizações de links no chat |
*
= obrigatório para type: TEXT
, **
= obrigatório para type: FILE
Mais detalhes podem ser encontrados aqui.
Basta usar a instância hospedada oficial. Taxa limitada a 240 solicitações por destinatário por dia.
Ao hospedar sua própria instância do Telepush, você precisa primeiro criar um novo bot com @BotFather. Como resultado, você receberá um token que será passado ao Telepush ao iniciar o servidor (veja abaixo).
$ docker volume criar telepush_data $ docker executado -d -p8080:8080 -v telepush_data:/srv/dados --name telepush ghcr.io/muety/telepush -mode webhook -token <SEU_BOTFATHER_TOKEN>
Veja aqui.
# Instale$ vá instalar github.com/muety/telepush@latest# Execute (modo webhook)$ ./telepush -token <YOUR_BOTFATHER_TOKEN> -mode webhook
Você pode executar o bot no modo long-polling ou webhook ( -mode [webhook|poll]
). Para uso em produção, a última opção é recomendada por vários motivos. No entanto, você precisará de um servidor com IP estático e um certificado TLS.
Mais detalhes sobre a configuração do webhook podem ser encontrados em Marvin's Marvelous Guide to All Things Webhook .
No modo webhook, o Telegram exige que seu endpoint de atualizações use HTTPS. Para habilitar isso, execute o Telepush atrás de um proxy reverso (como o Caddy), que finaliza o TLS.
Ou deixe o próprio Telepush lidar com o TLS. Você precisará de um certificado para isso, então obtenha um em Let's Encrypt ou crie um autoassinado e use -useHttps
em combinação com -certPath
e -keyPath
apontados para seu certificado e arquivos de chave privada, respectivamente.
Para certificados autoassinados, você também precisará passar sua chave pública para o método setWebhook
do Telegram, consulte estas instruções.
-address
( string
) – Endereço de rede (IPv4) ao qual vincular. O padrão é 127.0.0.1
.
-address6
( string
) – Endereço de rede (IPv6) ao qual vincular. O padrão é ::1
.
-disableIPv6
( bool
) – Desativa a escuta nas interfaces IPv4 e IPv6. O padrão é false
.
-port
( int
) – Porta TCP para escutar. O padrão é 8080
.
-proxy
( string
) – String de conexão do proxy a ser usada no modo de pesquisa longa. O padrão é nenhum.
-urlSecret
( string
) – Sufixo aleatório para anexar à sua rota de atualizações chamada pelos servidores do Telegram para evitar spam. O padrão é nenhum.
-useHttps
( bool
) – Se deve usar HTTPS. O padrão é false
.
-certPath
( string
) – Caminho do seu certificado SSL ao usar o modo webhook com useHttp
. Padrão para nenhum.
-keyPath
( string
) – Caminho da sua chave SSL privada ao usar o modo webhook com useHttp
. Padrão para nenhum.
-dataDir
( string
) – Local do sistema de arquivos onde armazenar dados persistentes. O padrão é .
.
-inlets
( string
) – Caminho para a pasta que contém definições de entrada baseadas em configuração no formato YAML. O padrão é ./inlets.d
.
-blacklist
( string
) – Caminho para um arquivo de lista negra separado por linhas contendo IDs de usuário (envie /help
para obter seu ID). O padrão é blacklist.txt
.
-whitelist
( string
) – Caminho para um arquivo de lista de permissões separado por linhas contendo IDs de usuário (envie /help
para obter seu ID). O padrão é whitelist.txt
.
-rateLimit
( int
) – Número máximo de mensagens a serem entregues a cada destinatário por hora. O padrão é 100
.
-truncateMsgs
( bool
) – Trunca mensagens muito longas para 4.096 caracteres em vez de rejeitá-las. O padrão é false
.
-metrics
( bool
) – Se as métricas do Prometheus devem ser expostas em /metrics
. O padrão é false
.
Ao usar a imagem Docker, você pode definir alternativamente a maioria das opções de configuração acima por meio de variáveis de ambiente (passadas para docker run
usando -e
), por exemplo entrypoint.sh
APP_USE_HTTPS=true
, APP_CERT_PATH=/etc/telepush.crt
, etc. entrypoint.sh
.
(também conhecido como lista de permissões vs. lista de bloqueios)
As entradas fornecem um mecanismo para pré-processar os dados recebidos que vêm em um formato diferente do normalmente esperado pelo bot.
Isto é especialmente útil se os dados forem enviados por aplicativos externos de terceiros que você não pode modificar.
Por exemplo, você pode querer entregar alertas do Alertmanager do Prometheus como notificações do Telegram. No entanto, as solicitações de webhook do Alertmanager parecem muito diferentes do formato de entrada padrão do Telepush. Para ainda ajustá-los, você pode escrever um Inlet para massagear os dados de acordo.
Para endereçar diretamente uma entrada, solicite https://telepush.dev/api/inlets/<inlet_name>
. Observe que /api/inlets/default
é equivalente a /api/messages
.
As seguintes entradas estão disponíveis atualmente:
Nome | Descrição | Status |
---|---|---|
default | Simplesmente passa a solicitação sem nenhuma alteração | ✅ |
alertmanager | Consome solicitações de webhook do Alertmanager | ✅ |
grafana | Consome solicitações de webhook do Grafana | ✅ |
webmentionio | Aceita solicitações de webhook Webmention.io para notificar sobre uma nova menção na Web de um de seus artigos | ✅ |
stripe | Aceita webhooks Stripe para notificar sobre alterações no status da assinatura | ✅ |
bitbucket | Aceita solicitações de webhook do Bitbucket para notificar sobre uma alteração no status do pipeline | ⏳ |
Você também pode definir suas próprias entradas personalizadas em YAML. Documentação adicional sobre isso e sobre as entradas individuais pré-existentes está disponível aqui.
Para todas as entradas, as seguintes opções estão disponíveis para serem passadas como parâmetros de consulta:
Parâmetro | Descrição |
---|---|
disable_link_previews | Desative uma versão prévia dos links da web detectados na mensagem. Padrão: false . |
disable_markdown | Desative a mensagem que está sendo tentada para ser analisada como Markdown. Padrão: false . |
Exemplo: POST https://telepush.dev/api/inlets/default?disable_markdown=true&disable_link_previews=true
.
As métricas fundamentais do Prometheus são expostas em /metrics
, se o sinalizador -metrics
for aprovado. Eles incluem:
telepush_messages_total{origin="string", type="string"}
telepush_requests_total{success="string"}
panic: template: pattern matches no files: *.tpl.html
Ao executar o Telepush como um único executável, você não deve usar o modo dev, a menos que o código-fonte do Telepush esteja localizado dentro do mesmo diretório. Certifique-se de não passar -env dev
neste caso.
MIT @ Ferdinand Mütsch