如何在Node.js开发的viber-bot中正确使用optionalTrackingData解决返回为空问题
问题根因及解决方案
你遇到的问题是trackingData参数传递位置不符合Viber Bot API的要求,同时需要注意参数格式约束,按以下步骤修改即可:
- 首先修正
sendMessage的参数结构:Viber Node.js SDK要求trackingData必须放在配置对象的optional子属性下,不能直接放在配置对象顶层,你当前的传参方式无法被API识别。 - 其次注意
trackingData的类型要求:该字段仅支持字符串类型,如果需要传递结构化数据,需要先通过JSON.stringify序列化,收到用户回复时再用JSON.parse解析即可。 - 若你使用自定义键盘接收用户回复,需要确认键盘按钮没有单独设置空的
trackingData,按钮级配置优先级高于消息级配置,会覆盖你在消息层设置的值。
修正后的代码示例
bot.sendMessage(response.userProfile, [ new TextMessage("please select your email:"), keyboardMessage ], { optional: { // 字符串类型,传结构化数据请先序列化 trackingData: JSON.stringify({ customField: "yourCustomValue" }) } });
接收侧取值说明
用户回复后,trackingData会出现在回调请求的message.tracking_data字段中(注意是下划线命名,不是驼峰格式),不要取错字段层级。
内容的提问来源于stack exchange,提问作者Vasya Krysa
相关产品推荐
相关产品推荐

