为 Telegram 开发 bot

为 Telegram 开发 bot

Telegram 是一款足够优秀的即时通讯应用,对 Bot 的支持,使它的能力更为强大,那么如何为 Telegram 开发 Bot?

强大的 Bot

Bot 本身能支持收发消息,这是基本的技能。然后支持 /commond 形式的命令。在 Bot perks 提到了 Bot 一些强大的功能。

Inline mode

当你在输入框里 @bot 的时候,它就可以开始工作了,比如 @unobot 在这个时候会列举你可以出的牌,而这不同于命令或者其它发出去的消息 – 这对其他人是不可见的。之后 Bot 会以你的名义发出一条消息,可以是文字,图片,贴纸等等,只不过多了一条由 @bot 发出的消息。

使用这一能力的 bot,我记得 Text sticker (@big_text_bot) 可以获取文本框中的文字,并做成一张贴纸,出现在候选位置,点击可以发送。

{{0xc0032d0d20 0xc0032d0d20 https://res.cloudinary.com/leveth/image/upload/f_auto,q_auto/v1550648176/zb/2019/02/tg-big_text_bot-inline.png Telegram @big_text_bot Telegram @big_text_bot Telegram @big_text_bot 0xc0032bb440} 0 false}
Telegram @big_text_bot

再就是 @unobot 了,使用 @unobot 来获取当前可用的牌

{{0xc0032d0d20 0xc0032d0d20 https://res.cloudinary.com/leveth/image/upload/f_auto,q_auto/v1550648176/zb/2019/02/tg-unobot-inline.png Telegram @unobot Telegram @unobot Telegram @unobot 0xc0032bb4a0} 1 false}
Telegram @unobot

自定义键盘

Bot 可以指定回复用的键盘,可以定制需要的按键,比如做成 Yes 和 No。在这一点上,我想到的一个比较神奇的 bot 是 Chess Bot

看名字就知道,这是一个拿来下国际象棋的 Bot,然后你要怎么告诉 Bot 出哪个棋子走到哪里呢?看下自定义键盘吧:

自定义键盘列举了你当前可以走的棋子,点击之后会展示可以走到的位置。选择棋子之后,键盘又变成了之前的样子,然后 bot 把新的棋局以图片的形式发给你。

{{0xc0032d0d20 0xc0032d0d20 https://res.cloudinary.com/leveth/image/upload/f_auto,q_auto/v1550649096/zb/2019/02/tg-chessbot-keyboard.png Telegram @chessbot Telegram @chessbot Telegram @chessbot 0xc0032bb680} 2 false}
Telegram @chessbot

然后这个键盘还支持 Inline keyboards and on-the-fly updating,是直接在一条消息下面跟上自定义的键盘,点击之后 bot 可以直接更新消息和键盘。很适合做一些投票之类的互动。

Deep Linking

Telegram 机器人有一个深层链接机制,允许在启动时将其他参数传递给机器人。它可以是启动机器人的命令 - 或用于将用户的Telegram帐户连接到某些外部服务上的帐户的身份验证令牌。

// 上面这一段是完全 Google 翻译的,没有经过任何修改

Privacy mode

Bot 默认启用 Privacy mode,Bot 只会收到明确是发送给 Bot 的消息,而不是所有的消息。当然这一机制可以关闭。

其它

申请 Bot 帐号

Telegram 是一个强大的即时通讯应用,其官方支持机器人帐号,并且机器人的自由度又比较高,可以那来做很多有趣的事情,比如使用 @unobot 在群里打 UNO

Telegram 的 bot 帐号需要和 @BotFather 对话来创建。BotFather 会你一些问题,比如机器人的名字等等。然后你还可以通过和 BotFather 对话来更改 bot 的各种信息。比如 Privacy Mode 关闭之后 bot 就能获取到群聊的全部信息,不然的话就只能获取到命令和 @ 信息。

此外机器人的头像等资料,也可以在这里设置。然后有的机器人在输入 / 之后会自动提示所有可用的命令,也是通过 BotFather 来设置的。

准备服务器

现在有帐号了,那肯定需要一台服务器来收发消息。然后有两种办法获取消息,一种是 getUpdate 接口,另一种则是使用 Webhook。后者显而易见的在时效性上更有优势,而前者可以在本地开发调试的情况使用,减少反复部署的时间浪费。使用 Webhook 的话,Telegram 要求服务器启用 HTTPS 来保证通讯安全。

Telegram Bots API

到这里就没有什么要说的了,文档: https://core.telegram.org/bots/api

嘛,当然使用一些现有的 Bot 库会事半功倍,少码好多代码。