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

PRTG对接Telegram时curl传%device报UTF-8编码错误咨询

故障根因

该报错确实由%device变量的实际取值导致,和curl调用方式、Telegram接口本身无直接关联。
PRTG运行时替换内置变量的过程中,%device对应的设备名称常带入两类触发报错的内容:

  • 包含非UTF-8编码的特殊字符、全角符号,或是设备名中携带未转义的Markdown语法保留字符
  • 包含未做URL编码的空格、控制字符,POST提交时会破坏请求体的参数拼接结构,最终被Telegram接口判定为请求文本不符合UTF-8编码要求。
    移除%device后请求正常,就是因为排除了上述非法字符来源。
保留%device变量的可行解决方案

方案1:使用curl自带编码参数处理内容(优先推荐)

放弃直接用-d拼接所有参数的写法,改用--data-urlencode参数处理text字段,该参数会自动对变量替换后的所有内容做合规URL编码,自动转义空格、特殊符号、非ASCII字符,保证提交内容为合法UTF-8格式,修改后的命令如下:

curl -X POST https://api.telegram.org/<BOT_ID>/sendMessage \
-d 'chat_id=<CHAT_ID>' \
-d 'parse_mode=Markdown' \
--data-urlencode "text=%lastmessage %linksensor %since %group %device"

该方案不需要修改PRTG侧的设备配置,也不需要额外做字符转义,适配绝大多数场景。

方案2:调整消息解析模式

如果报错是设备名中Markdown特殊字符导致的解析异常,可以将parse_mode参数值从Markdown改为HTML,或是直接移除parse_mode参数以纯文本格式发送消息,该方案会损失部分消息排版能力,稳定性不如方案1。

注意:若切换为MarkdownV2解析模式,需要手动对所有变量内容中的Markdown保留字符做转义处理,运维成本较高,不推荐优先使用。

方案3:PRTG侧提前净化变量内容

在PRTG通知模板配置中,对%device变量增加字符过滤规则,提前剔除设备名称中的非UTF-8控制字符、特殊转义符号,从源头避免非法字符带入接口请求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:42:28