JSON 페이로드가 포함된 POST
요청을 텔레그램 푸시 메시지로 변환하는 간단한 텔레그램 봇입니다. 추가 앱이 없다는 점을 제외하면 Gotify 및 ntfy.sh와 유사합니다. 서버 모니터링, 경고 등에 유용합니다.
Telegram을 열고 TelepushBot(또는 각각 자신의 봇)과 채팅을 시작한 후 /start
입력하여 수신자 토큰을 받으세요.
메시지는 POST
를 통해 https://telepush.dev/api/[[inlets/<inlet_name>]|messages]/<recipient>
로 전송됩니다.
RECIPIENT_TONEN=... # /start.curl -XPOST를 사용하여 받은 토큰 -H '콘텐츠 유형: 애플리케이션/json' -d '{ "text": "*Hello World!* (예, 마크다운입니다)" }' "https://telepush.dev/api/messages/${RECIPIENT_TONEN}"
자체 인스턴스를 호스팅하는 경우 URL을 각각 바꾸십시오.
열쇠 | 유형 | 설명 |
---|---|---|
text * | 끈 | 일반 텍스트 또는 Markdown 형식의 실제 메시지 |
origin | 끈 | 메시지 발신자로 표시되는 사람 |
type | [ TEXT , FILE ] | 메시지 유형, 즉 텍스트 또는 파일 전송(기본값: TEXT ) |
file ** | 베이스64 | Base64로 인코딩된 파일 콘텐츠 |
filename ** | 끈 | 보낼 파일 이름 |
options | 물체 | 통과할 추가 옵션 |
options.disable_link_previews | 부울 | 채팅에서 링크 미리보기 표시 여부 |
*
= type: TEXT
, **
= type: FILE
자세한 내용은 여기에서 확인하세요.
공식 호스팅 인스턴스를 사용하면 됩니다. 하루에 수신자당 요청 240개로 비율이 제한됩니다.
자체 Telepush 인스턴스를 호스팅할 때 먼저 @BotFather를 사용하여 새 봇을 생성해야 합니다. 결과적으로 서버를 시작할 때 Telepush에 전달하는 토큰을 받게 됩니다(아래 참조).
$ docker 볼륨은 telepush_data를 생성합니다. $ 도커 실행 -d -p 8080:8080 -v telepush_data:/srv/data --이름 텔레푸시 ghcr.io/muety/telepush -모드 웹훅 -토큰 <YOUR_BOTFATHER_TOKEN>
여기를 참조하세요.
# Install$ go install github.com/muety/telepush@latest# 실행(웹훅 모드)$ ./telepush -token <YOUR_BOTFATHER_TOKEN> -mode webhook
긴 폴링 또는 웹훅 모드( -mode [webhook|poll]
)에서 봇을 실행할 수 있습니다. 프로덕션 용도의 경우 여러 가지 이유로 후자 옵션이 권장됩니다. 그러나 고정 IP와 TLS 인증서가 있는 서버가 필요합니다.
웹훅 설정에 대한 자세한 내용은 Marvin의 Marvelous Guide to All Things Webhook 에서 확인할 수 있습니다.
웹훅 모드에서 Telegram은 업데이트 엔드포인트에서 HTTPS를 사용해야 합니다. 이를 활성화하려면 역방향 프록시(예: Caddy) 뒤에서 Telepush를 실행하여 TLS를 종료합니다.
또는 Telepush 자체에서 TLS를 처리하도록 하세요. 이를 위해서는 인증서가 필요하므로 Let's Encrypt에서 인증서를 얻거나 자체 서명된 인증서를 만든 다음 -useHttps
-certPath
및 -keyPath
와 함께 사용하여 각각 인증서 및 개인 키 파일을 가리킵니다.
자체 서명된 인증서의 경우 공개 키를 Telegram의 setWebhook
메서드에 추가로 전달해야 합니다. 이 지침을 참조하세요.
-address
( string
) – 바인딩할 네트워크 주소(IPv4)입니다. 기본값은 127.0.0.1
입니다.
-address6
( string
) – 바인딩할 네트워크 주소(IPv6)입니다. 기본값은 ::1
입니다.
-disableIPv6
( bool
) – IPv4 및 IPv6 인터페이스 모두에서 수신 대기를 비활성화할지 여부입니다. 기본값은 false
입니다.
-port
( int
) – 수신할 TCP 포트입니다. 기본값은 8080
입니다.
-proxy
( string
) – 장기 폴링 모드에 사용할 프록시 연결 문자열입니다. 기본값은 없음입니다.
-urlSecret
( string
) – 스팸을 방지하기 위해 Telegram 서버에서 호출하는 업데이트 경로에 추가하는 무작위 접미사입니다. 기본값은 없음입니다.
-useHttps
( bool
) – HTTPS 사용 여부. 기본값은 false
입니다.
-certPath
( string
) – useHttp
와 함께 웹훅 모드를 사용할 때 SSL 인증서의 경로입니다. 기본값은 없음입니다.
-keyPath
( string
) – useHttp
와 함께 웹훅 모드를 사용할 때 개인 SSL 키의 경로입니다. 기본값은 없음입니다.
-dataDir
( string
) – 영구 데이터를 저장할 파일 시스템 위치입니다. 기본값은 .
.
-inlets
( string
) – YAML 형식의 구성 기반 입력 정의가 포함된 폴더의 경로입니다. 기본값은 ./inlets.d
입니다.
-blacklist
( string
) – 사용자 ID가 포함된 줄로 구분된 블랙리스트 파일의 경로입니다(ID를 얻으려면 /help
보내십시오). 기본값은 blacklist.txt
입니다.
-whitelist
( string
) – 사용자 ID가 포함된 줄로 구분된 화이트리스트 파일의 경로입니다(ID를 얻으려면 /help
보내십시오). 기본값은 whitelist.txt
입니다.
-rateLimit
( int
) – 시간당 각 수신자에게 전달될 최대 메시지 수입니다. 기본값은 100
입니다.
-truncateMsgs
( bool
) – 너무 긴 메시지를 거부하는 대신 4096자로 자릅니다. 기본값은 false
입니다.
-metrics
( bool
) – /metrics
아래에 Prometheus 지표를 노출할지 여부입니다. 기본값은 false
입니다.
Docker 이미지를 사용할 때 환경 변수 ( -e
사용하여 docker run
에 전달됨)를 통해 위 구성 옵션 대부분을 설정할 수도 있습니다(예: APP_USE_HTTPS=true
, APP_CERT_PATH=/etc/telepush.crt
등). 자세한 내용은 entrypoint.sh
참조하세요. . entrypoint.sh
.
(일명 허용 목록과 차단 목록)
인렛은 봇이 일반적으로 예상하는 것과 다른 형식으로 들어오는 수신 데이터를 사전 처리하는 메커니즘을 제공합니다.
이는 수정할 수 없는 외부 타사 응용 프로그램에서 데이터를 전송하는 경우 특히 유용합니다.
예를 들어 Prometheus의 Alertmanager에서 Telegram 알림으로 경고를 전달하려고 할 수 있습니다. 그러나 Alertmanager의 웹훅 요청은 Telepush의 기본 입력 형식과 많이 다릅니다. 여전히 적합하도록 하려면 Inlet을 작성하여 그에 따라 데이터를 마사지할 수 있습니다.
유입구의 주소를 직접 지정하려면 https://telepush.dev/api/inlets/<inlet_name>
요청하세요. /api/inlets/default
는 /api/messages
와 동일합니다.
현재 다음 입구를 사용할 수 있습니다:
이름 | 설명 | 상태 |
---|---|---|
default | 변경 사항 없이 요청을 통과시키기만 하면 됩니다. | ✅ |
alertmanager | Alertmanager 웹훅 요청을 사용합니다. | ✅ |
grafana | Grafana 웹훅 요청을 사용합니다. | ✅ |
webmentionio | 기사 중 하나의 새 Webmention에 대해 알리기 위해 Webmention.io 웹후크 요청을 수락합니다. | ✅ |
stripe | 구독 상태 변경 사항을 알리기 위해 Stripe 웹후크를 허용합니다. | ✅ |
bitbucket | 파이프라인 상태 변경에 대해 알리기 위해 Bitbucket 웹후크 요청을 수락합니다. | ⏳ |
YAML에서 자체 사용자 지정 인렛을 정의 할 수도 있습니다. 이에 대한 추가 문서와 기존의 개별 유입구에 대한 추가 문서는 여기에서 확인할 수 있습니다.
모든 유입구에 대해 다음 옵션을 쿼리 매개변수로 전달할 수 있습니다.
매개변수 | 설명 |
---|---|
disable_link_previews | 메시지에서 감지된 웹 링크의 미리보기 버전을 비활성화합니다. 기본값: false . |
disable_markdown | Markdown으로 구문 분석하려는 메시지를 비활성화합니다. 기본값: false . |
예: POST https://telepush.dev/api/inlets/default?disable_markdown=true&disable_link_previews=true
.
-metrics
플래그가 전달되면 기본 Prometheus 측정항목이 /metrics
아래에 표시됩니다. 여기에는 다음이 포함됩니다.
telepush_messages_total{origin="string", type="string"}
telepush_requests_total{success="string"}
panic: template: pattern matches no files: *.tpl.html
Telepush를 단일 실행 파일로 실행하는 경우 Telepush의 소스 코드가 동일한 디렉터리 내에 있지 않는 한 개발 모드를 사용해서는 안 됩니다 . 이 경우 -env dev
전달하지 않도록 하세요.
MIT @ 페르디난드 무치