OneSignal通知模板标签失效:含标签请求显示无接收者问题排查
关于OneSignal消息显示“NO RECIPIENTS”的问题排查
你遇到的这个情况我之前也帮人排查过——不带tags参数的请求能正常调用默认模板、成功找到收件人,但加了tags过滤后API返回200,可控制台却显示“NO RECIPIENTS”,核心问题大概率出在受众定位的逻辑冲突或者标签匹配不精确上,下面给你拆解原因和解决办法:
核心原因分析
- 参数逻辑冲突:你同时使用了
include_player_ids和tags这两个受众定位参数!OneSignal的规则是,当这两个参数同时存在时,会触发AND逻辑——只有那些既在指定玩家ID列表里,又完全符合标签过滤规则的用户才会被选中。如果你的my_player_id对应的用户没有full_name = MOSHOE这个标签,自然就找不到符合双重条件的收件人了。 - 标签匹配精度问题:标签是大小写敏感且严格匹配的,比如:
full_name和Full_Name会被识别成两个不同的标签键- 标签值的空格、大小写差异也会导致匹配失败,比如用户的标签值是
Moshoe,你写MOSHOE就匹配不上
解决方案
1. 二选一使用受众定位方式
根据你的需求选择其中一种定位逻辑,不要同时混用:
- 如果目标是给指定的玩家ID发消息,直接删掉
tags参数即可:
import json import requests headers = {'Authorization': 'Basic mykey', 'Content-Type': 'application/json'} payload = { 'app_id': 'myapp_id', 'include_player_ids': ['my_player_id'], 'contents': {'en': 'Your message content here'} } response = requests.post('https://onesignal.com/api/v1/notifications', headers=headers, data=json.dumps(payload))
- 如果目标是给所有符合标签条件的用户发消息,删掉
include_player_ids参数:
import json import requests headers = {'Authorization': 'Basic mykey', 'Content-Type': 'application/json'} payload = { 'app_id': 'myapp_id', 'tags': [{'key': 'full_name', 'relation': '=', 'value': 'MOSHOE'}], 'contents': {'en': 'Your message content here'} } response = requests.post('https://onesignal.com/api/v1/notifications', headers=headers, data=json.dumps(payload))
2. 验证标签的正确性
先去OneSignal控制台的用户详情页面,找到my_player_id对应的用户,确认他的标签列表里确实存在full_name: MOSHOE这个条目,没有大小写、空格之类的差异。
3. 小测试排查
可以单独发送一条只带tags参数的测试消息,看看控制台有没有收件人,这样能快速判断是标签规则的问题,还是参数混用的问题。
内容的提问来源于stack exchange,提问作者Ohad the Lad
相关产品推荐
相关产品推荐

