[Bug]: Unable to push notifications to users within segment
Opened this issue · 3 comments
What happened?
I built the following sample app to push notifications to all users within a segment, but unfortunately, I was unable to get it to work.
require 'dotenv/load'
require 'time'
require 'onesignal'
rest_api_key = ENV['ONESIGNAL_REST_API_KEY']
app_id = ENV['ONESIGNAL_APP_ID']
OneSignal.configure do |config|
config.app_key = rest_api_key
end
api_instance = OneSignal::DefaultApi.new
begin
notification = OneSignal::Notification.new({ app_id: app_id })
notification.contents = OneSignal::StringMap.new({ "en": 'English Message' })
notification.included_segments = ['Include_segment']
p notification
notification_response = api_instance.create_notification(notification)
notification_id = notification_response.id
p notification_response
rescue OneSignal::ApiError => e
puts "Error when calling DefaultApi->create_notification: #{e}"
end
FWIW, @jmadler and I did a little debugging to confirm that my segment did indeed have users who were subscribed to push, but still got the same error. I also tried several different apps and other segments and got the same results.
Steps to reproduce?
1. Change the `rest_api_key` and `app_id` to an app that makes use of segments
2. Run the script I shared
3. Note that you receive `All included players are not subscribed` as an error message
What did you expect to happen?
I expected a push notification to be sent to my device.
Relevant log output
#<OneSignal::Notification:0x00000001072d9440 @is_ios=true, @app_id="8152db8f-1417-48a4-b8db-264a744b87a3", @contents=#<OneSignal::StringMap:0x00000001072d9170 @en="English Message">, @included_segments=["Subscribed Users"]>
#<OneSignal::InlineResponse200:0x0000000107430bb8 @id="", @recipients=0, @errors=["All included players are not subscribed"]>
Code of Conduct
- I agree to follow this project's Code of Conduct
Hey @iAmWillShepherd, thanks for reporting this. It seems you also need to specify:
notification.is_chrome_web = true
notification.is_any_web= true
I'm not sure why but that is the way our backend works.
Hmm, that is interesting 🤔
I think we should keep this issue open with the action item to update the docs for this project to highlight these quirks. What do you think?
I think this should be documented as well, since these are not considered required fields today by this SDK's defined API.
Also maybe we can enforce at least one is_
value is set to true and report that as an error before attempting to make the network call?
Or maybe even better, the REST API itself can return a more helpful error when this happens.
- Background on how the REST API works today: If you omit all
is*
properties today from the REST API it assumes all aretrue
, however if you pass anyis*
flags all others are defaulted tofalse
.
Lastly, in a 2.0.0 major release, we could make all these true
by default (or omit them to give the same effected as noted above)