Так что да, это можно сделать.Для начала вам необходимо обратиться в службу поддержки OneSignal и получить открытые и закрытые ключи VAPID для вашего приложения.Каждое приложение в вашей панели мониторинга будет иметь свой набор.
Далее вам нужно будет выполнить вызов API для OneSignal, чтобы экспортировать пользователей в файл CSV.
API можно найти.URL в документах и используйте curl или используйте свой любимый язык.Я использовал Node + Axios, чтобы звонить.Вызов API предоставит вам ссылку для загрузки CSV.
Вот документация https://documentation.onesignal.com/reference#csv-export
Вы хотите убедиться, что добавили параметр "extra_fields" в свой запрос с помощьюДобавлены поля "web_auth" и "web_p256".CSV предоставит вам другую часть головоломки, которая является URL-адресом конечной точки в столбце их идентификатора.
Получив всю эту информацию, вы теперь можете отправлять push-сообщения, используя библиотеку, такую как web-push для Node
https://github.com/web-push-libs/web-push
Надеюсь, что это поможет!
РЕДАКТИРОВАТЬ
Как сказал Седрик, фактическая полезная нагрузка push немного сложнее, потому что вам необходимо соблюдатьобработка рабочих данных службы OneSignal.
Вы можете увидеть форматирование, начинающееся со строки 313 здесь
Если вы используете такую библиотеку, как web-push для Node, чтобы отправить ваш pushПолезные нагрузки Ваша полезная нагрузка будет отформатирована примерно так для стандартного отправки работнику службы OneSignal.
const uuidv1 = require('uuid/v1')
const webpush = require('web-push')
let subscription = {
endpoint: 'USER ENDPOINT URL',
keys: {
auth: 'USER AUTH KEY',
p256dh: 'USER P256 KEY'
}
}
let vapid = { private: 'VAPID PRIVATE KEY', public: 'VAPID PUBLIC KEY' }
// Format Message for OneSignal Service Worker
let notification = JSON.stringify({
custom: {
i: uuidv1(), //Generate UUID for the OneSignal Service worker to consume
u: 'CLICK URL'
},
title: 'TOP TITLE',
alert: 'MESSAGE BODY',
icon: 'ICON IMAGE URL'
})
webpush.setVapidDetails('mailto: sendError@YourEmail.com', vapid.public, vapid.private)
webpush.sendNotification(subscription, notification)