Rasa集成的Telegram机器人其他账户正常仅本人账户运行报错
根因分析
你遇到的两类报错存在因果关联:
- 核心错误为ValueError: 'hu' is not in list:你的Telegram账号对应的Rasa对话追踪器(Tracker)中存在未在
domain.yml中定义的意图hu(hu为匈牙利语的ISO 639-1语言代码,大概率是你的Telegram客户端自动翻译功能、或账号默认语言设置触发的异常字段被误识别为意图),Rasa的UnexpectedIntentPolicy在做动作预测时找不到对应意图,直接抛出异常,导致webhook请求处理中断,返回空响应。 - 后续的AttributeError: 'NoneType' object has no attribute 'text'、*AttributeError: 'NoneType' object has no attribute 'output'*报错,均是因为前序流程中断后没有返回合法的HTTP响应,同时你的账号可能发送了Rasa默认Telegram通道不支持的非文本类消息(如贴纸、动图、服务通知消息等),通道处理时没有做非空判断触发异常。
解决方法
- 第一步:清除异常对话数据
如果你使用的是默认内存存储对话追踪器,直接重启Rasa服务即可清除异常数据;如果你使用Redis、SQL等持久化存储,直接删除sender_id为你的Telegram用户ID的所有追踪器记录。 - 第二步:修复意图识别异常
如果你不需要支持匈牙利语,可在NLU处理管道中增加语言过滤规则,拦截非目标语言的请求;如果有多语言需求,在domain.yml中补全对应语言的意图定义,或在UnexpectedIntentPolicy配置中增加hu的阈值规则。 - 第三步:兼容Telegram通道异常消息
修改Rasa自带的Telegram通道源码,在rasa/core/channels/telegram.py的_is_user_message方法中增加非空判断,避免空消息报错,修改后代码如下:
def _is_user_message(self, msg: Any) -> bool: # 新增消息对象非空校验 if not getattr(msg, "message", None): return False return msg.message.text is not None
遇到非文本消息时可直接返回固定提示,不要中断请求处理流程。
内容的提问来源于stack exchange,提问作者pygga1
相关产品推荐
相关产品推荐

