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

OneSignal API POST请求中segment参数的使用及报错排查

解决OneSignal推送中segments参数无效及Authorization报错问题

你这遇到了两个核心问题:Authorization请求头缺失,以及segments参数的格式用错了,咱们一步步来搞定:

1. 先修Authorization头的报错

OneSignal的所有API请求必须带大小写敏感的Authorization请求头,这是你收到报错的直接原因——不管用include_player_ids还是segments,这个头都是必填项。

  • 头的格式是:Authorization: Basic YOUR_REST_API_KEY
  • 这里的YOUR_REST_API_KEY是你在OneSignal控制台「Settings > Keys & IDs」里能找到的REST API Key

给你个PHP curl请求的示例,一定要加上这个头:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://onesignal.com/api/v1/notifications");
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Authorization: Basic YOUR_REST_API_KEY' // 必须添加这一行
));
// 后续的POST方法、请求数据等配置

2. 纠正segments参数的用法

你现在把segment嵌套在filters里的写法是错误的,OneSignal的segments有两种正确用法,根据你的需求选:

用法一:直接用segments参数(推荐,针对已创建的分段)

如果"test"是你在OneSignal控制台已经建好的分段,直接用segments数组指定就行,不用放filters里:

$data = array(
    "app_id" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "contents" => array("en" => "Check this!"),
    "segments" => array("test"), // 直接传入分段名称数组
    "big_picture" => "http://www.xxxxx.com/img/logo2.png"
);

用法二:用filters匹配分段(适用于复杂条件组合)

如果你需要和其他过滤条件搭配使用,才需要用filters,但格式要符合OneSignal的要求:

$data = array(
    "app_id" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "contents" => array("en" => "Check this!"),
    "filters" => array(
        array(
            "field" => "segment",
            "key" => "test",
            "relation" => "="
        )
    ),
    "big_picture" => "http://www.xxxxx.com/img/logo2.png"
);

注意:segments和filters不能同时出现在请求里,二选一就好。

最后验证

把这两个修正点结合起来:确保请求带了正确的Authorization头,同时segments参数格式正确,再发送请求应该就能正常生效了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:09:46