최근에 많은 솔루션들이 자체적으로 텔레그램 메세지 발송도 지원하곤 하지만 필요에 의해 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, "발송완료") }