这是所有开发者的必经之路,此仪式的目的在于获取telegram的授权以及一个独特的bot token,此token将在下文的编程的环节再次发挥作用。
首先在telegram中搜索 botfather,并和botfather开始对话:
按下"/start"之后,botfather会回复一堆操作指令给你
紧接着回复"/newbot"开始创建你的bot,botfather会要求你输入bot的名字和bot用户名
注意:
bot名会显示在搜索界面,而bot的username在搜索bot和添加bot入group的时候会起作用(你无法通过搜索bot名来添加bot如群组)。
username必须以bot或者_bot(不区分大小写)结尾:如ABCBot,ABC_bot。
例如这种格式:
5704966335:AAE25NY-PHY2ESyNroxf9XlrJtvZJsQ98FA
注意:一定要点击该链接进行激活,否则将无法进行后续操作
获取机器人的基本信息,包括chat_id等
你可以在注册Bot后将以下的URL复制在浏览器的网址栏中,并将"““Your Token””"替换为你获取的Token:
https://api.telegram.org/bot'''Your Token'''/getupdates
或者在服务器中进行请求:
curl https://api.telegram.org/bot5704966335:AAE25NY-PHY2ESyNroxf9XlrJtvZJsQ98FA/getUpdates
你会得到以下Message:
{
"ok": true,
"result": [{
"update_id": 192494607,
"message": {
"message_id": 1,
"from": {
"id": 1872284876,
"is_bot": false,
"first_name": "test",
"username": "test",
"language_code": "zh-hans"
},
"chat": {
"id": 1872284876,
"first_name": "test",
"username": "test",
"type": "private"
},
"date": 1664535992,
"text": "/start",
"entities": [{
"offset": 0,
"length": 6,
"type": "bot_command"
}]
}
}]
}
在Telegram中,message以 json ( javascript object notation)的形式被包装和发送,它的本质是nested dictionary,也就是dictionary包了一层dictionary。在之后我们将用json作为我们储存数据的形式。
同样的,如果你在地址栏中键入如下URL:
https://api.telegram.org/bot'''Your Token'''/sendMessage?chat_id="Some Chat id"&text="Hello Telegram bot"
并将你的Token和你想要发送消息的人的chat ID,你的Bot就会将“Hello Telegram bot”发送给指定用户。
或者在服务器中进行请求
curl https://api.telegram.org/bot5704966335:AAE25NY-PHY2ESyNroxf9XlrJtvZJsQ98FA/sendMessage?chat_id="1872284876"\&text="Hello Telegram bot"
形式类似地,Telegram规定了很多功能,比如sendMessage, sendPhoto等,但我们不会用每次在地址栏中键入指令如此繁琐的方式来控制我们的Bot,instead 我们将通过一个功能强大的名为”Telepot“的python package 来制作Bot。
使用golang简单的实现一个http请求
func ClearBackZero(message string) {
response, err := http.Post(
"https://api.telegram.org/bot5323458625:AAEr9funZAd3DW_BTXfV1b46y_IK6qvli9w/sendMessage",
"application/x-www-form-urlencoded",
strings.NewReader(fmt.Sprintf("chat_id=1872283875&text=%v", message)),
)
if err != nil {
panic(err)
}
defer response.Body.Close()
_, err = ioutil.ReadAll(response.Body)
}