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

求助:用Rasa在Telegram发送触发自定义动作的超链接消息失败

Telegram可点击文本触发意图问题修复

问题根源

你的代码无法正常工作主要有两个原因:

  1. Telegram的tg://bot_command链接不支持在命令后通过&传递参数,只会识别纯命令部分,参数会被直接忽略。
  2. Rasa的utter_message同时传递Markdown文本和payload时,Telegram客户端无法正确解析payload的意图与实体映射。

解决方案

方法一:使用内联键盘按钮(推荐)

内联键盘是Telegram中传递带参数交互的标准方式,兼容性更好:

from telegram import InlineKeyboardButton, InlineKeyboardMarkup

# 构建内联键盘
keyboard = []
for element in subset_elements:
    # 用回调数据携带元素信息,格式可自定义
    button = InlineKeyboardButton(text=element, callback_data=f"select_element:{element}")
    keyboard.append([button])

reply_markup = InlineKeyboardMarkup(keyboard)
dispatcher.utter_message(text="请选择目标元素:", reply_markup=reply_markup)

后续处理:

  • 在Rasa的自定义动作中监听callback_query事件,解析callback_data中的element值
  • 或者在domain配置中映射回调数据到select_element意图,提取element实体

方法二:修正文本链接与payload格式(仅当必须用文本链接时)

如果坚持使用文本链接,需要调整命令格式和payload结构:

for element in subset_elements:
    # Telegram命令参数用空格分隔,而非URL参数格式
    hyperlink = f"[{element}](tg://bot_command?command=/select_element {element})"
    # 符合Rasa要求的payload结构
    payload = {
        "intent": "select_element",
        "entities": [{"entity": "element", "value": element}]
    }
    # 用json_message传递payload
    dispatcher.utter_message(text=hyperlink, json_message={"payload": payload})

额外配置:

  • 在Rasa的domain.yml中确保select_element意图和element实体已正确定义
  • 启用Rasa的命令参数解析功能,让bot能识别/select_element xxx格式的命令

注意事项

  • 内联键盘是Telegram交互的最优方案,文本链接的命令参数传递存在兼容性问题
  • 测试时需确保bot拥有发送内联消息的权限
  • 验证Rasa版本支持对应回调事件或命令解析逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:40:12