UNPKG

@onesignal/node-onesignal

Version:

OpenAPI client for @onesignal/node-onesignal

590 lines (462 loc) 20.8 kB
<h1 align="center">Welcome to @onesignal/node-onesignal 👋</h1> <p> <a href="https://www.npmjs.com/package/@onesignal/node-onesignal" target="_blank"> <img alt="Version" src="https://img.shields.io/npm/v/@onesignal/node-onesignal.svg"> </a> <a href="https://github.com/OneSignal/node-onesignal#readme" target="_blank"> <img alt="Documentation" src="https://img.shields.io/badge/documentation-yes-brightgreen.svg" /> </a> <a href="https://github.com/OneSignal/node-onesignal/graphs/commit-activity" target="_blank"> <img alt="Maintenance" src="https://img.shields.io/badge/Maintained%3F-yes-green.svg" /> </a> <a href="https://twitter.com/onesignal" target="_blank"> <img alt="Twitter: onesignal" src="https://img.shields.io/twitter/follow/onesignal.svg?style=social" /> </a> </p> > OpenAPI client for node-onesignal ### 🏠 [Homepage](https://github.com/OneSignal/node-onesignal#readme) ### 🖤 [npm](https://www.npmjs.com/package/@onesignal/node-onesignal) # Node Client SDK The OneSignal Node client is a server OneSignal SDK for NodeJS. Integrate OneSignal with your backend events, data, and more. # Install ```sh # yarn yarn add @onesignal/node-onesignal # npm npm install @onesignal/node-onesignal --save ``` # Usage ```js const OneSignal = require('@onesignal/node-onesignal'); ``` ```js import * as OneSignal from '@onesignal/node-onesignal'; ``` ## Creating a client ### Configuration We can configure the client using the `createConfiguration` function. You can find more info on each configuration parameter [here](https://github.com/OpenAPITools/openapi-generator/pull/10283/files). ```js const configuration = OneSignal.createConfiguration(configParams); ``` ### Initializing the Client ```js const client = new OneSignal.DefaultApi(configuration); ``` ### Authentication You can configure auth parameters passing them like this: ```js const configuration = OneSignal.createConfiguration({ organizationApiKey: '<YOUR_ORGANIZATION_API_KEY>', // Organization key is only required for creating new apps and other top-level endpoints restApiKey: '<YOUR_REST_API_KEY>', // App REST API key required for most endpoints }); const client = new OneSignal.DefaultApi(configuration); ``` #### Advanced Usage: Creating a brand-new app If creating a new app via the client, the response will return the app's API key via the `basic_auth_key` response parameter. You can then use this to modify your configuration object and create a new client that will have both user-level and app-level authentication set up. ```js const response = await client.createApp(newapp); const configuration = OneSignal.createConfiguration({ organizationApiKey: '<YOUR_ORGANIZATION_API_KEY>', // Organization key is only required for creating new apps and other top-level endpoints restApiKey: response.basic_auth_key, }); const client = new OneSignal.DefaultApi(configuration); ``` --- ## API Reference > See the full list of [API Endpoints](DefaultApi.MD). To make stateful changes requests should take on the following pattern: 1. create or get an object 2. make changes to that object 3. pass the object to the request function to make the changes Examples of important OneSignal objects include `App`, `Notification`, `Player`, and `Segment`. For example, see the section below on creating an app. First an app object is created via the instantiation of the `App` class. Then, the app instance is modified directly. Finally, we use the `client` to create the app via a remote request. ### Creating an app Creates a new OneSignal app. **Example** ```js const app = new OneSignal.App(); // configure your application app.name = 'app_name'; app.gcm_key = '<your key here>'; app.android_gcm_sender_id = '<your id here>'; const response = await client.createApp(app); ``` ### Getting an app View the details of a single OneSignal app. **Example** ```js const app = await client.getApp('<app id>'); ``` ### Getting multiple apps View apps. **Example** ```js const apps = await client.getApps(); ``` ### Updating an app Updates the name or configuration settings of an existing OneSignal app. **Example** ```js const app = new OneSignal.App(); app.name = 'modified_app_name'; const udpateAppResponse = await client.updateApp('<existing_app_id>', app); ``` ### Creating a notification Sends a notification to your users. **Example** ```js const notification = new OneSignal.Notification(); notification.app_id = app.id; // Name property may be required in some case, for instance when sending an SMS. notification.name = "test_notification_name"; notification.contents = { en: "Gig'em Ags" } // required for Huawei notification.headings = { en: "Gig'em Ags" } const notification = await client.createNotification(notification); ``` ### Creating a notification using Filters Sends a notification to your users filtered by specific criteria. **Example** ```js const notification = new OneSignal.Notification(); notification.app_id = app.id; notification.contents = { en: "Gig'em Ags" } // required for Huawei notification.headings = { en: "Gig'em Ags" } // Find all the users that have not spent any amount in USD on IAP. // https://documentation.onesignal.com/reference/create-notification#send-to-users-based-on-filters notification.filters = [ { field: 'amount_spent', relation: '=', value: "0" }, ]; const notification = await client.createNotification(notification); ``` ### Canceling a notification Stop a scheduled or currently outgoing notification. **Example** ```js const cancelNotificationResponse = await client.cancelNotification('<app id>', '<notification id>'); ``` ### Getting a notification View the details of a single notification and outcomes associated with it. **Example** ```js await client.getNotification('<app id>', '<notification id>'); ``` ### Getting notifications View the details of multiple notifications. | Param | Type | Description | |--------|--------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | app_id | string | The OneSignal App ID for your app. Available in Keys &amp; IDs. | | limit | string | How many notifications to return. Max is 50. Default is 50. | | offset | number | Page offset. Default is 0. Results are sorted by queued_at in descending order. `queued_at` is a representation of the time that the notification was queued at. | | kind | number | Kind of notifications returned: * unset - All notification types (default) * `0` - Dashboard only * `1` - API only * `3` - Automated only | **Example** ```js const notifications = await client.getNotifications('<app id>', '50', 0, 1); ``` ### Getting notification history View the devices sent a message - **OneSignal Paid Plan Required** This method will return all devices that were sent the given `notification_id` of an Email or Push Notification if used within 7 days of the date sent. **Example** ```js const notificationHistory = await client.getNotificationHistory('<notification id>'); ``` ### Creating a segment Create segments visible and usable in the dashboard and API - **Required: OneSignal Paid Plan** **Example** ```js const segment = new OneSignal.Segment(); segment.filters = [ { field: 'session_count', relation: '&gt;', value: '1' }, { field: 'tag', key: 'my_tag', relation: 'exists' } ] const segment = await client.createSegments(app.id, segment); ``` ### Deleting a segment Delete segments (not user devices) - **Required: OneSignal Paid Plan** You can delete a segment under your app by calling this API. You must provide an API key in the Authorization header that has admin access on the app. The `segment_id` can be found in the URL of the segment when viewing it in the dashboard. **Example** ```js const deleteSegmentsResponse = await client.deleteSegments('<app id>', '<segment id>'); ``` ### Creating a player Add a device. **Example** ```js const player = new OneSignal.Player(); player.device_type = 1; player.app_id = app_id; player.identifier = '<identifier>'; const player = await client.createPlayer(player); ``` ### Getting a player View the details of an existing device in one of your OneSignal apps. The email and the hash is **only required if you have enabled Identity Verification and `device_type` is email**. **Example** ```js const player = await client.getPlayer('<app id>', '<player id>', '<email auth hash>'); ``` ### Getting players View the details of multiple devices in one of your OneSignal apps. ⚠️ Unavailable for Apps Over 80,000 Users. | Param | Type | Description | |--------|--------|------------------------------------------------------------------| | app_id | string | The OneSignal App ID for your app. Available in Keys &amp; IDs. | | limit | string | How many devices to return. Max is 300. Default is 300 | | offset | number | Result offset. Default is 0. Results are sorted by id; | **Example** ```js const players = await client.getPlayers('<app id>', '300', 0); ``` ### Exporting a player Generate a compressed CSV export of all of your current user data. This method can be used to generate a compressed CSV export of all of your existing user data and is a better alternative to retrieving this data using the /players API endpoint. See [full CSV Export Reference](https://documentation.onesignal.com/reference/csv-export) **Example** ```js const exportPlayerResponse = await client.exportPlayer('<app id>', { extra_fields: ['location', 'external_user_id'], last_active_since: 1469392779, segment_name: "Subscribed Users" }); ``` ### Updating a player Update an existing device in one of your OneSignal apps. **Example** ```js const updatePlayerResponse = await client.updatePlayer('<player id>', player); ``` ### Updating player tags Update an existing device's tags in one of your OneSignal apps using the External User ID. ```js const playerToUpdate = new OneSignal.Player(); player.app_id = APP_ID; player.device_type = 1; playerToUpdate.external_user_id = 'your_player_external_id'; // setting the same external_user_id as before const updatePlayerTagsRequestBody = new OneSignal.UpdatePlayerTagsRequestBody(); updatePlayerTagsRequestBody.tags = {'typescript_test_tag': 1}; const updatePlayerResponse = await api.updatePlayerTags(APP_ID, PLAYER_EXTERNAL_USER_ID, updatePlayerTagsRequestBody); ``` #### Deleting Tags To delete a tag, include its key and set its value to blank (""). Omitting a key/value will not delete it. For example, if you wanted to delete two existing tags rank and category while simultaneously adding a new tag class, the tags JSON would look like the following: **Example** ```json "tags": { "rank": "", "category": "", "class": "my_new_value" } ``` ### Deleting a player Deletes a user record. **Example** ```js const deletePlayerResponse = await client.deletePlayer(app.id, '<player id>') ``` ### Getting outcomes View the details of all the outcomes associated with your app. 🚧 **Requires your OneSignal App's REST API Key, available in Keys & IDs** 🚧 Outcome data are accessible for 30 days before being deleted from our servers. You can export this data monthly if you need it for a more extended period. | Param | Type | Description | |---------------------|--------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | app_id | string | The OneSignal App ID for your app. Available in Keys &amp; IDs. | | outcome_names | string | Required Comma-separated list of names and the value (sum/count) for the returned outcome data. Note: Clicks only support count aggregation. For out-of-the-box OneSignal outcomes such as click and session duration, please use the “os” prefix with two underscores. For other outcomes, please use the name specified by the user. Example:os__session_duration.count,os__click.count,CustomOutcomeName.sum | | outcome_names2 | string | If outcome names contain any commas, then please specify only one value at a time. Example: `outcome_names[]=os__click.count&outcome_names[]=Sales, Purchase.count` where “Sales, Purchase” is the custom outcomes with a comma in the name. | | outcome_time_range | string | Optional Time range for the returned data. The values can be `1h` (for the last 1 hour data), `1d` (for the last 1 day data), or `1mo` (for the last 1 month data). Default is 1h if the parameter is omitted. | | outcome_platforms | string | Optional Platform id. Refer device&#39;s platform ids for values. **Example:** `outcome_platform=0` for iOS `outcome_platform=7`, `8` for Safari and Firefox Default is data from all platforms if the parameter is omitted. | | outcome_attribution | string | Optional Attribution type for the outcomes. The values can be direct or influenced or unattributed. Example: outcome_attribution=direct Default is total (returns direct+influenced+unattributed) if the parameter is omitted. | **Example** ```js const outcomes = await client.getOutcomes(app.id, 'os__click.count,os_session_duration.count,my_outcome.sum'); ``` ### Begin Live Activity Starts a Live Activity event ```js // Create a player first const player = new OneSignal.Player(); player.device_type = 0; player.app_id = '<app id>'; const playerResponse = await api.createPlayer(player); // Prepare a request const beginLiveActivityRequest: BeginLiveActivityRequest = { push_token: '<push_token>', subscription_id: playerResponse.id!, }; const activityId = '<activity_id>'; // any string // Begin activity await api.beginLiveActivity('<app_id>', activityId, beginLiveActivityRequest); ``` ### Update Live Activity Updates a Live Activity event ```js const updateLiveActivityRequest: UpdateLiveActivityRequest = { event_updates: { data: 'test' }, event: "update", name: "contents" }; await api.updateLiveActivity('<app_id>', '<activity_id>', updateLiveActivityRequest); ``` ### End Live Activity Stops a Live Activity event ```js const subscriptionId = '<subscription_id>'; // player id await api.endLiveActivity('<app_id>', '<activity_id>', subscriptionId); ``` ### Subscription types * iOSPush * AndroidPush * FireOSPush * ChromeExtensionPush * ChromePush * WindowsPush * SafariLegacyPush * FirefoxPush * macOSPush * HuaweiPush * SafariPush * Email * SMS ## Users ### Creating a OneSignal User ```js const user = new OneSignal.User(); const aliasLabel = '<alias_label>'; const aliasId = '<alias_id>'; const subscriptionToken = '<subscription_token>'; user.identity = { [aliasLabel]: aliasId, }; user.subscriptions = [ { type: "iOSPush", token: subscriptionToken, } ]; const createdUser = await api.createUser('<app_id>', user); assert(createdUser.identity!['onesignal_id'] != null); ``` ### Getting a user by `onesignal_id` ```js const oneisgnalAliasLabel = "onesignal_id"; const onesignalAliasId = createdUser.identity!['onesignal_id']; const fetchedUser = await api.fetchUser('<app_id>', oneisgnalAliasLabel, onesignalAliasId); ``` ### Getting a user by an alias ```js const fetchedUser = await api.fetchUser('<app_id>', alias_label, alias_id); ``` ### Updating a user ```js const updateUserRequest: UpdateUserRequest = { properties: { language: 'fr' } }; const updatedUser = await api.updateUser('<app_id>', aliasLabel, aliasId, updateUserRequest); ``` ### Deleting a user ```js await api.deleteUser('<app_id>', aliasLabel, aliasId); ``` ## Subscriptions ### Creating a subscription for existing user ```js const createSubscriptionRequestBody: CreateSubscriptionRequestBody = { subscription: { type: "AndroidPush", token: '<subscription_token>', } }; const response = await api.createSubscription('<app_id>', '<alias_label>', '<alias_id>', createSubscriptionRequestBody); ``` ### Updating a subscription ```js const updateSubscriptionRequestBody: UpdateSubscriptionRequestBody = { subscription: { type: "iOSPush", token: '<new-subscription-token>', } }; await api.updateSubscription('<app_id>', '<existing_subscription_id>', updateSubscriptionRequestBody); ``` ### Deleting a subscription ```js await api.deleteSubscription('<app_id>', '<subscription_id>'); ``` ### Transfer subscription ownership Transfers the subscription from one user to another. ```js // Setting the user for transfering the subscription to. User is identyfied by an IdentityObject. const transferSubscriptionRequestBody: TransferSubscriptionRequestBody = { identity: otherUserIdentityObject }; const transferResponse = await api.transferSubscription('<app_id>', '<subscription_id>', transferSubscriptionRequestBody); ``` ## Aliases ### Fetching aliases for a user ```js const fetchResponse = await api.fetchAliases('<app_id>', '<subscription_id>'); ``` ### Fetching user identity ```js const fetchResponse = await api.fetchUserIdentity('<app_id>', '<alias_label>', '<alias_id>'); ``` ### Identifying user by alias ```js const userIdentityRequestBody: UserIdentityRequestBody = { identity: { ['<new_alias_label>']: '<new_alias_id>' } }; const identifyResponse = await api.identifyUserByAlias('<app_id>', '<existing_alias_label>', '<existing_alias_id>', userIdentityRequestBody); ``` ### Identifying user by subscription id ```js const userIdentityRequestBody: UserIdentityRequestBody = { identity: { ['<new_alias_label>']: '<new_alias_id>' } }; const identifyResponse = await api.identifyUserBySubscriptionId('<app_id>', '<existing_subscription_id>', userIdentityRequestBody); ``` ### Deleting an alias ```js await api.deleteAlias('<app_id>', '<alias_label>', '<alias_id>', '<alias_label_to_delete>'); ``` ## Author * Website: https://onesignal.com * Twitter: [@onesignal](https://twitter.com/onesignal) * Github: [@OneSignal](https://github.com/OneSignal) ## 🤝 Contributing Contributions, issues and feature requests are welcome!<br />Feel free to check [issues page](https://github.com/OneSignal/node-onesignal/issues). ## Show your support Give a ⭐️ if this project helped you! ## 📝 License Copyright © 2023 [OneSignal](https://github.com/OneSignal). This project is [MIT](https://github.com/OneSignal/node-onesignal/blob/main/LICENSE) licensed.