logo科技微讯

如何使用 Telegram 机器人发送信息

作者:科技微讯
日期:2021-01-12
📝 笔记

原文

使用 telegram 机器人发送信息,可以分为两类:给个人发送信息、给频道发送信息(可把频道绑定到群组间接实现向群组发送信息)。无论哪种,其实都是通过机器人向某个 chat_id 发送信息。

如果是某一个人的 chat_id,那就是发送给这个人,虽然 tg bot 所有人都可以搜索得到,但是只有 chat_id 对应的用户可以接收到信息。如果你希望所有人都可以看到这个信息,那把 bot 添加到 channel(频道),然后获取这个频道的 chat_id,把信息发送到这个频道 chat_id,然后用户通过 join 这个频道就可以看到这个机器人发给频道的消息。

频道可以绑定到群组,绑定之后,频道管理员在频道发布的信息会同时发布到群组。难怪了,我看别人的频道每次发了信息,会马上出现在群组中。而且往频道发消息原来这么简单,就是聊天一样,当然正如前面所说,也可以用机器人代劳。订阅了频道的用户对频道信息发表评论,有两种评论方法:直接在频道点击发表评论、在对应的群组中长按信息再选择回复。

发送信息

如下所示,通过机器人发送信息,只需要提供 tokenchat_idtext 三个参数。

got
  .post(
    `https://api.telegram.org/bot${token}/sendMessage?chat_id=${chat_id}&text=哈哈哈哈`
  )
  .then((res) => res.body)
  .then((res) => console.log(res));

获取 chat_id

其中 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));

发送 styled 信息

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();
donation赞赏
thumbsup0
thumbsdown0
暂无评论