Safety Guest'T blog

  • 创建 tg bot
  • 1. setwebhook
  • 2. sendMessage
  • 服务端设置
  • 首页
  • 归档
  • 软件开发
  • 网络安全
  • 逆向破解
  • 人工智能
  • 资源分享
  • 区 块 链
  • 隐私政策
  • 友情链接

搭建Telegram机器人

  • Tz
  • 2022-12-09
  • 0

搭建步骤

  • tg上添加botfather创建 tg bot, 直接参考官方文档即可 文档
  • 你需要一个vps服务器,在上面部署一套api server,用于处理bot的会话请求
  • 准备一个域名(直接使用vps服务器的ip也行),用于设置 tg bot 的 setwebhook

创建 tg bot

这里最关键的是记录下bot 的token,这个在创建好bot后,botfather会发给你,就是这一串乱码的东西 1090xxxx:AAG9...xxx, 这个token在后面设置webhook会用到。

tg bot api 的基本结构 https://api.telegram.org/bot{token}/METHOD_NAME

几个常用的tg bot api

https://api.telegram.org/bot{token}/getUpdates

https://api.telegram.org/bot{token}/setwebhook?url={url}

https://api.telegram.org/bot{token}/getWebhookInfo

https://api.telegram.org/bot{token}/sendMessage?chat_id={chat_id}&text={text}&parse_mode=Markdown

实际上只需要两个api就能满足绝大多数普通个人用户的需求

1. setwebhook

https://api.telegram.org/bot{token}/setwebhook?url={url}

这个api用于设置将你所创建的tg bot接收到的会话,转发给指定服务器进行处理,假设我的bot token为 1090xxxx:AAG9...xxx , 我准备使用的服务器域名为 tg.arthurnone.com,那么就构建一个如下URL,在浏览器端访问一下,就能进行设置,稍微要注意的就是,必须使用https。

https://api.telegram.org/bot1090xxxx:AAG9...xxx/setwebhook?url=https://tg.arthurnone.com`

设定了服务器之后,那么需要做的就是,将tg bot服务器转发过来的请求,进行处理后,做一个返回就行了。这里就用到了第二个api sendMessage

2. sendMessage

https://api.telegram.org/bot{token}/sendMessage?chat_id={chat_id}&text={text}&parse_mode=Markdown

每给你所创建的tg bot发一条信息,tg bot的服务器都会以post的方法发一条json数据到你的服务器,格式如下

 {
   'update_id': 682xxxxx, 
   'message': {
     'message_id': 1, 
     'from': {
       'id': 394xxx, 
       'is_bot': False, 
       'first_name': 'Arthur', 
       'username': 'Arthur', 
       'language_code': 'zh-hans'
       },
     'chat': {
       'id': 394xxx, # chat_id
       'first_name': 'Arthur', 
       'username': 'Arthur', 
       'type': 'private'
       }, 
     'date': 158xxx, 
     'text': 'hehe',  # text
     'entities': [{'offset': 0, 'length': 5, 'type': 'bot_command'}]
     }
   }

chat_id 在这个数据里就是 message.chat.id 部分, 用户发给bot的信息就是 message.text。

只要有这两条信息,就可以设置对应的回复了。

服务端设置

class Handler(flask.views.MethodView):

    def post(self, *args, **kwargs):
        body = request.get_json()
        chat_id = formdata['chat']['id']
        text = body['message']['text']

        if text == "/help":
            return_help(chat_id)

        elif text == "/blogs":
            return_blogs(chat_id)

        elif text == "/about":
            return_me(chat_id)

        elif text == "/new":
            blog = get_blog(0)
            return_data(chat_id, blog)

        elif "blog" in text:
            num = text.split("_")[1]
            blog = get_blog(num)
            return_data(chat_id, blog)

        return 

return_blogs 方法的部分

    data = urllib.parse.quote(data)
    url = f"https://api.telegram.org/{token}/sendMessage?chat_id={cid}&text={data}&parse_mode=Markdown"
    requests.get(url)

最后构建的url就是

https://api.telegram.org/bot{token}/sendMessage?chat_id={chat_id}&text=*Arthur Blog List*
/blog\_1  17 例新型冠状病毒感染的肺炎死亡病例病情简单分析图 
/blog\_2  逛动物园 
/blog\_3  远程工作一个月 
/blog\_4  Blog API 添加 Base64 防爬虫 
/blog\_5  记一次 AWS 容量问题 
/blog\_6  Blog 数据自动备份方案 
/blog\_7  My resume 
/blog\_8  API 设计的一些事 
/blog\_9  新jobs项目介绍 
/blog\_10  None 
/blog\_11  一些风景照 
/blog\_12  此网站后端技术简介 
/blog\_13  此网站前端技术简介 
/blog\_14  2019.5.7 
&parse_mode=Markdown 

发送这条请求到tg bot api后,就是上图所显示的内容。

© 2025 Safety Guest'T blog
Theme by Wing
渝ICP备 2021011909号 渝公网安备 50019002502382号
  • {{ item.name }}
  • {{ item.name }}