README.md (view raw)
1# Golang bindings for the Telegram Bot API
2
3[![GoDoc](https://godoc.org/github.com/go-telegram-bot-api/telegram-bot-api?status.svg)](http://godoc.org/github.com/go-telegram-bot-api/telegram-bot-api)
4[![Travis](https://travis-ci.org/go-telegram-bot-api/telegram-bot-api.svg)](https://travis-ci.org/go-telegram-bot-api/telegram-bot-api)
5
6All methods are fairly self explanatory, and reading the [godoc](http://godoc.org/github.com/go-telegram-bot-api/telegram-bot-api) page should
7explain everything. If something isn't clear, open an issue or submit
8a pull request.
9
10The scope of this project is just to provide a wrapper around the API
11without any additional features. There are other projects for creating
12something with plugins and command handlers without having to design
13all that yourself.
14
15Join [the development group](https://telegram.me/go_telegram_bot_api) if
16you want to ask questions or discuss development.
17
18## Example
19
20First, ensure the library is installed and up to date by running
21`go get -u github.com/go-telegram-bot-api/telegram-bot-api`.
22
23This is a very simple bot that just displays any gotten updates,
24then replies it to that chat.
25
26```go
27package main
28
29import (
30 "log"
31
32 "github.com/go-telegram-bot-api/telegram-bot-api"
33)
34
35func main() {
36 bot, err := tgbotapi.NewBotAPI("MyAwesomeBotToken")
37 if err != nil {
38 log.Panic(err)
39 }
40
41 bot.Debug = true
42
43 log.Printf("Authorized on account %s", bot.Self.UserName)
44
45 u := tgbotapi.NewUpdate(0)
46 u.Timeout = 60
47
48 updates, err := bot.GetUpdatesChan(u)
49
50 for update := range updates {
51 if update.Message == nil { // ignore any non-Message Updates
52 continue
53 }
54
55 log.Printf("[%s] %s", update.Message.From.UserName, update.Message.Text)
56
57 msg := tgbotapi.NewMessage(update.Message.Chat.ID, update.Message.Text)
58 msg.ReplyToMessageID = update.Message.MessageID
59
60 bot.Send(msg)
61 }
62}
63```
64
65There are more examples on the [wiki](https://github.com/go-telegram-bot-api/telegram-bot-api/wiki)
66with detailed information on how to do many different kinds of things.
67It's a great place to get started on using keyboards, commands, or other
68kinds of reply markup.
69
70If you need to use webhooks (if you wish to run on Google App Engine),
71you may use a slightly different method.
72
73```go
74package main
75
76import (
77 "log"
78 "net/http"
79
80 "github.com/go-telegram-bot-api/telegram-bot-api"
81)
82
83func main() {
84 bot, err := tgbotapi.NewBotAPI("MyAwesomeBotToken")
85 if err != nil {
86 log.Fatal(err)
87 }
88
89 bot.Debug = true
90
91 log.Printf("Authorized on account %s", bot.Self.UserName)
92
93 _, err = bot.SetWebhook(tgbotapi.NewWebhookWithCert("https://www.google.com:8443/"+bot.Token, "cert.pem"))
94 if err != nil {
95 log.Fatal(err)
96 }
97 info, err := bot.GetWebhookInfo()
98 if err != nil {
99 log.Fatal(err)
100 }
101 if info.LastErrorDate != 0 {
102 log.Printf("Telegram callback failed: %s", info.LastErrorMessage)
103 }
104 updates := bot.ListenForWebhook("/" + bot.Token)
105 go http.ListenAndServeTLS("0.0.0.0:8443", "cert.pem", "key.pem", nil)
106
107 for update := range updates {
108 log.Printf("%+v\n", update)
109 }
110}
111```
112
113If you need, you may generate a self signed certficate, as this requires
114HTTPS / TLS. The above example tells Telegram that this is your
115certificate and that it should be trusted, even though it is not
116properly signed.
117
118 openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 3560 -subj "//O=Org\CN=Test" -nodes
119
120Now that [Let's Encrypt](https://letsencrypt.org) is available,
121you may wish to generate your free TLS certificate there.