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

使用onesignal-java-api发送带Tag通知报错,Rest方式可正常运行

解决OneSignal Java API客户端Tag推送400错误问题

问题说明

用Postman调用OneSignal REST API能正常实现基于Tag的消息推送,但用官方Java API客户端编写代码时,收到400错误:

HTTP响应码:400
HTTP响应体:{"errors":["你必须指定要接收此通知的用户、细分群体或标签。"]}

Postman请求里的核心筛选逻辑是:

"filters": [{"field": "tag", "key": "email", "relation": "=", "value": "AAAAA@AAAAA.com"}]

但你写的Java代码错误使用了setTag()方法传递标签条件,导致API无法识别推送目标。

错误原因

你代码里的notification.setTag(contents.get("tags"))是错的:

  • setTag()对应OneSignal API里的单个tag参数,不是用于指定接收者的filters数组
  • 正确做法是用setFilters()方法,构造符合要求的过滤器列表来指定推送范围

正确代码示例

import com.onesignal.model.notification.Filter;
import com.onesignal.model.notification.Notification;
import com.onesignal.model.notification.StringMap;
import java.util.ArrayList;
import java.util.List;

// 构造多语言内容
StringMap contentStringMap = new StringMap();
contentStringMap.setEn("this is the value of contents");

// 构造标签筛选规则
Filter tagFilter = new Filter();
tagFilter.setField("tag");
tagFilter.setKey("email");
tagFilter.setRelation("=");
tagFilter.setValue("AAAAAA@AAAAA.com");

List<Filter> filters = new ArrayList<>();
filters.add(tagFilter);

// 组装通知对象
Notification notification = new Notification();
notification.setAppId(APP_KEY);
notification.setIsChrome(true);
notification.setIsAnyWeb(true);
notification.setContents(contentStringMap);
// 用setFilters传递筛选规则,替代错误的setTag
notification.setFilters(filters);
// 可选:补充Postman里的其他参数
notification.setName("INTERNAL_CAMPAIGN_NAME");
notification.setChannelForExternalUserIds("push");

核心要点

  • 用Filter类构造单个标签筛选条件,再加入List<Filter>集合
  • 通过notification.setFilters(filters)传递筛选规则,对应Postman请求里的filters数组
  • 确保参数和Postman请求保持一致,避免遗漏必要字段引发其他错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:09:24