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

Node.js应用使用Pushpad发通知报错Unprocessable Entity如何解决?

解决Pushpad推送的Unprocessable Entity错误

我来帮你梳理几个最可能触发这个错误的原因,对应调整代码就能解决:

1. 先检查sendAt参数的时间合理性

你的代码里设置的sendAt是2016年的过去时间:

sendAt: new Date(Date.UTC(2016, 7 - 1, 25, 10, 9))

Pushpad不允许调度已经过期的推送任务,这是最常见的触发Unprocessable Entity的原因。你可以:

  • 把时间改成当前时间之后的未来日期,比如new Date(Date.UTC(2025, 7 - 1, 25, 10, 9))
  • 如果不需要定时推送,直接删掉这个参数,让推送立即发送

2. 验证环境变量是否正确加载

确保你的.env文件里确实存在PUSH_PAD_AUTH_TOKEN和PUSH_PAD_PROJECT_ID,且拼写完全匹配(注意大小写,Pushpad的凭证通常是区分大小写的)。可以在代码开头加两行打印,确认变量不是undefined:

console.log('Auth Token:', process.env.PUSH_PAD_AUTH_TOKEN);
console.log('Project ID:', process.env.PUSH_PAD_PROJECT_ID);

3. 确认所有资源URL有效

Pushpad会校验iconUrl、imageUrl、actions[].icon这些URL是否能正常访问,且资源格式符合推送标准(比如图标需为PNG格式,尺寸符合要求)。你可以手动在浏览器里打开这些URL,确认没有404、权限限制或者加载失败的问题。

4. 获取更详细的错误详情

当前回调只打印了err的字符串形式,很难定位具体问题。建议修改回调,打印完整的错误响应数据:

notification.broadcast(function (err, result) {
  if (err) {
    // 打印完整错误信息,尤其是Pushpad返回的具体错误描述
    console.error('Pushpad 错误详情:', err.response ? err.response.data : err);
  } else {
    console.log('推送成功:', result);
  }
});

如果习惯Promise语法,这样写更清晰:

notification.broadcast()
  .then(result => console.log('推送成功:', result))
  .catch(err => console.error('详细错误:', err.response.data));

5. 检查customMetrics格式是否合规

Pushpad要求customMetrics里的字符串只能是小写字母、数字和下划线,不能有空格或特殊字符。你的代码里['examples', 'another_metric']是符合要求的,但如果后续修改时不小心加入了违规字符,也会触发错误。

先从调整sendAt参数开始排查,这个是最可能的问题点,改完后应该能解决大部分情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:55:11