You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Telegram机器人的按钮中获取可浏览器访问的自定义URL?

问题:拿到消息里带标签的自定义WebView按钮URL

我需要拿到消息上附带的、右上角带标签的按钮对应的自定义URL,这个URL得能在浏览器直接打开(按钮样式如图:带标签的WebView按钮)。

我试了两种方法都没成:

  • 用KeyboardButtonSimpleWebView拿URL,失败
  • 跑下面这段代码,也拿不到目标URL:
@client.on(events.NewMessage(chats='TONStartBot'))
async def mi_handler(event):
    If 'Kind' in event.raw_text:
        async for message in client.iter_messages('TONStartBot', limit=1, from_user='TONStartBot'):
            await message.click(0)
        url = event.message.buttons[0][0].url
        print(url)  
        url_part = url.split('=')[1]
        print(url_part)

解决思路

  1. 先改语法错误:原代码里If是大写,Python对大小写敏感,必须改成小写if,不然函数根本跑不起来。
  2. 判断按钮类型:这种带标签的按钮大概率不是普通的链接按钮,而是WebView专属按钮,得先判断类型再拿URL:
    @client.on(events.NewMessage(chats='TONStartBot'))
    async def mi_handler(event):
        if 'Kind' in event.raw_text:
            # 直接用当前触发事件的消息,不用重新去迭代
            if event.message.buttons:
                button = event.message.buttons[0][0]
                # 先看是不是带url属性的按钮
                if hasattr(button, 'url'):
                    url = button.url
                    print(url)
                    url_part = url.split('=')[1]
                    print(url_part)
                else:
                    # 试试拿WebView专属的跳转URL
                    if hasattr(button, 'web_view_url'):
                        url = button.web_view_url
                        print(url)
                        url_part = url.split('=')[1]
                        print(url_part)
    
  3. 别乱点按钮:原代码里的await message.click(0)会直接触发跳转,可能导致拿不到原始URL,建议先拿URL再决定要不要点。
  4. 消息对象别重复拿:原代码里迭代获取最新消息和当前event.message是重复的,直接用event.message处理触发事件的那条消息就行。

内容的提问来源于stack exchange,提问作者SokKi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 07:25:55