최근에 많은 솔루션들이 자체적으로 텔레그램 메세지 발송도 지원하곤 하지만 필요에 의해 CLI 상에서 혹은 타 어플이 콜을 하여 메세지를 보내야 할 경우가 관리자 측면에선 필요할 때가 있습니다.
또한 콜을 중앙에서 실행하지 못하고 부득이하게 서버내에서 메세지 발송이 필요한 상황에서 사용하기 위해 간단히 코딩해 두었습니다.
- 텔레그램에서 API사용을 위해 토큰을 얻어야 합니다.
- 기본적으로 golang이 설치된 환경에서 컴파일을 하시면 됩니다.
- go get github.com/go-telegram-bot-api/telegram-bot-api를 통해서 라이브러리를 받아주셔야 합니다.
- go build filename.go로 컴파일을 해주시면 filename binary가 생성되며 해당 바이너리만 가지고 실행가능합니다.
- filename -r 수신아이디 -m “메세지” 로 실행을 하면 발송이 진행되게 됩니다.
package main
import (
"flag"
"os"
"log"
"fmt"
"github.com/go-telegram-bot-api/telegram-bot-api"
)
const ( // 수정필수
tgmToken = "" // 텔레그램 토큰
logPath = "./". // 로그가 기록될 경로
logFileName = "telegram_sendlog.log" // 로그파일명
)
type MsgFormat struct {
targetID int64
sendMSG string
tgCursor *tgbotapi.BotAPI
}
func (msg *MsgFormat) tgConnect() {
tgCursor, err := tgbotapi.NewBotAPI(tgmToken)
if err != nil {
log.Panic(err)
}
msg.tgCursor = tgCursor
msg.tgCursor.Debug = false
if err != nil {
log.Panic(err)
}
}
func (msg *MsgFormat) msgSender() {
sendResult := tgbotapi.NewMessage(msg.targetID, msg.sendMSG)
msg.tgCursor.Send(sendResult)
}
func main() {
fpLog, err := os.OpenFile(logPath+logFileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
fmt.Println("Error : make "+logPath+logFileName)
log.Panic(err)
}
defer fpLog.Close()
myLogger := log.New(fpLog, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile)
reciever := flag.Int64("r", 0, "SET msg reciever")
message := flag.String("m", "", "SET message")
flag.Parse()
if *reciever == 0 || *message == "" {
fmt.Println("- 옵션이 부족함")
os.Exit(0)
}
var mf MsgFormat
mf.targetID = *reciever
mf.sendMSG = *message
mf.tgConnect()
mf.msgSender()
myLogger.Println(*message, "발송완료")
}
