使用 telegram 机器人发送信息,可以分为两类:给个人发送信息、给频道发送信息(可把频道绑定到群组间接实现向群组发送信息)。无论哪种,其实都是通过机器人向某个 chat_id 发送信息。
如果是某一个人的 chat_id,那就是发送给这个人,虽然 tg bot 所有人都可以搜索得到,但是只有 chat_id 对应的用户可以接收到信息。如果你希望所有人都可以看到这个信息,那把 bot 添加到 channel(频道),然后获取这个频道的 chat_id,把信息发送到这个频道 chat_id,然后用户通过 join 这个频道就可以看到这个机器人发给频道的消息。
频道可以绑定到群组,绑定之后,频道管理员在频道发布的信息会同时发布到群组。难怪了,我看别人的频道每次发了信息,会马上出现在群组中。而且往频道发消息原来这么简单,就是聊天一样,当然正如前面所说,也可以用机器人代劳。订阅了频道的用户对频道信息发表评论,有两种评论方法:直接在频道点击发表评论、在对应的群组中长按信息再选择回复。
如下所示,通过机器人发送信息,只需要提供 token
、chat_id
、text
三个参数。
got
.post(
`https://api.telegram.org/bot${token}/sendMessage?chat_id=${chat_id}&text=哈哈哈哈`
)
.then((res) => res.body)
.then((res) => console.log(res));
其中 token 可以在 botFather 这个机器人处获取,chat_id 可以通过 getUpdates 获取:
got
.post(`https://api.telegram.org/bot${botToken}/getUpdates`)
.then((res) => res.body)
.then((res) => console.log(res));
getUpdates 获取到的是 Update 对象,可以通过这个方法主动获得用户给机器人发送的信息。另一种获取 update 的方式是 Webhooks。只能获取过去 24 小时的信息,因为 telegram 服务器不会保存超过 24 小时的 incoming updates。
另外,用下面这个方法获取这个 bot 的一些信息:
got(`https://api.telegram.org/bot${token}/getMe`)
.then((res) => res.body)
.then((res) => console.log(res));
telegram 可以用 parse_mode
去解析 message 的格式,支持 markdown、html,但支持范围有限,例如 html 只支持 a、b 等少数 html 标签。
reply_markup 有四种,这个属性的意思是,我发送了信息到机器人,那对方可能需要给我 reply,为了方便对方 reply,我给这条信息增加一些 markup,例如 inline_keyboard。
disable_web_page_preview
设置为 false 之后,有些链接会出现 preview 按钮。
const message = '<a href="https://kejiweixun.com">科技微讯博客</a>';
await got
.post(`https://api.telegram.org/bot${botToken}/sendMessage`, {
json: {
chat_id: chat_id,
text: `${message}`,
parse_mode: "html",
disable_web_page_preview: false,
reply_markup: {
inline_keyboard: [
[
{
text: "阅读",
url: item.articleURL,
},
{
text: "更多",
url: item.link,
},
],
],
},
},
})
.json();