@onesignal/node-onesignal
Version:
OpenAPI client for @onesignal/node-onesignal
590 lines (462 loc) • 20.8 kB
Markdown
<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 & 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: '>', 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 & 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 & 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'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.