OneSignal API POST请求中segment参数的使用及报错排查
你这遇到了两个核心问题: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
相关产品推荐
相关产品推荐

