关键词:电报, bot

如何申请一个 bot,

电报的 bot 申请很简单,按照官网一步步来就行,地址.

申请好了之后去看看 API 文档.

如果看完文档还有迷惑,我写几个 demo 看完马上就可以明白了

例子 1 获取个人信息

method: GET

path: https://api.telegram.org/bot[token]/getMe

解释:其中 [token] 就是在生成 bot 后 botFather 给你的,替换掉 [token] 就可以,格式类似于 A:B 然后最后的 getMeMETHOD_NAME,就是请求的方法的名字

上面这个请求执行后,得到的结果如下, 这个 getMe 就是获得自己的信息的接口

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{
    "ok": true,
    "result": {
        "id": "1791xxx819",
        "is_bot": true,
        "first_name": "滴答滴",
        "username": "didadidadidadibot",
        "can_join_groups": true,
        "can_read_all_group_messages": false,
        "supports_inline_queries": false
    }
}

除了这个 getMe 的方法外,还有好多其他方法,看上面我留的 API 文档即可,比如下图:

例子 2 获取聊天 ID

如何获取 chat_id, 然后用这个 ID 通过 API 给自己发送消息

  • Install Telegram,
  • Create a Bot using the official telegram BotFather (it has a verified symbol next to it when you add it as a contact),
  • Follow the prompts, and finally copy it’s HTTP API Token,
  • Create a Group,
  • Add the Bot to it,
  • Send the Group at least 1 message.
  • Use this API https://api.telegram.org/botXXX:YYYYY/getUpdates to get chat_id

method: GET

path: https://api.telegram.org/bot<token>/getUpdates

返回值大概是下面的样子(有删减):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
    "ok": true,
    "result": [
        {
            "update_id": 331805741,
            "message": {
                "message_id": 19,
                "from": {
                    "id": "732xxx366",
                    "is_bot": false,
                    "first_name": "double flower",
                    "language_code": "zh-hans"
                },
                "chat": {
                    "id": "732XXX366",
                    "first_name": "double flower",
                    "type": "private"
                },
                "date": 1618401351,
                "text": "just close your eyes"
            }
        },
        ......
    ]
}

例子 3 HTTP 发送聊天信息

method: POST

path: https://api.telegram.org/bot<token>/sendMessage

data:

1
2
3
4
{
    "chat_id": 702000360,
    "text": "这是一个测试文档123"
}

发送后,就会收到你这个 bot 给你发的信息,换成其他的 chat_id 就会发给其他的人

如何跟 Alfred 关联起来使用

关联 Alfred 也很简单,我之前写的那个 todo 的 workflow 提到过我每当我有即时想法时为了不打断工作流,就呼出 Alfred 框写下我想要的东西,其实也可以很好的跟电报的 bot 结合起来,直接上例子和脚本

具体流程就是,我开始用了一个 input,当我呼出 Alfred 之后,输入 lala 这个关键词就会触发这个 workflow,然后空格后面输入想记录的东西,回车后会出发执行后面的 shell 脚本,而后面的脚本做的事情就是把输入的内容发送到我的电报里,当然也可以发送到任何其他人的电报里,只要你的 shell 脚本写好了命令就好

脚本内容如下,其实就是执行放在我电脑上的某个 shell 脚本,其实这里最好是把脚本直接在 Alfred 执行,不然一旦换电脑,路径会发生变化,到时候还要改路径

/Users/lifupeng/Documents/personal/jupiter_quiver/Quiver.todo/sendMsg.sh $1

sendMsg.sh 的内容

query=$1
export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7891
curl --location --request POST 'https://api.telegram.org/bot[token]/sendMessage' \
                --header 'Content-Type: application/json' \
                --data "{\"chat_id\": "要发送信息的ID",\"text\": \"${query}\"}"
~

电报需要搭梯子才可以发送,因此我首先设置了 https_proxy 的代理,而具体的代理在我电脑上已经配置了,这块有时间看这里

然后,每次我呼出 Alfred,然后输入 lala 输入空格 + 我想记录和发送的内容,回车,我的或者需要收到信息的那个电报用户就能收到我发的信息

当然,这只是一个简单的 demo 演示,具体我们还可以使用 python 脚本或者 PHP 脚本去实现更复杂的逻辑,达到更有意思的工作流,就看生活中的实际场景了。

其他

之前的想法:

最近打算把电报的 bot 集成到 Alfred 的 workflow 和 iPhone 的快捷指令中去,挖个坑,待填
再引入一个 mq 做异步任务,我觉得可以搞好多事情,正好利用下阿里那台机器,具体可以和什么结合有待思考

一些参考记录: