gildebrand / chatkit-push-helper

Pusher Chatkit Push Helper
7 stars 2 forks source link

chatkit-push-helper

Since Pusher's Chatkit product doesn't support push notifications natively just yet, I built a NodeJS application that polls Chatkit for new messages and calls your own API to send the push notifications.

To get started, you first need to create your config.json file. Below is an example of what this file can look like:

{
  "pollingInterval": 30,
  "messagesToLoad": 5,
  "chatkit": {
    "instanceLocator": "MY_INSTANCE_LOCATER_FROM_PUSHER_DASH",
    "key": "MY_VERY_SECRET_KEY_FROM_PUSHER_DASH"
  },
  "push": {
    "endpoint": "https://api.myapplication.com/v1/chatkit/push",
    "strictSSL": true,
    "auth": {
      "endpoint": "https://api.myapplication.com/v1/oauth/token",
      "grantType": "client_grant",
      "refreshGrantType": "refresh_token",
      "clientId": 2,
      "clientSecret": "j1xr1ykCGGERx120dYyGLKasdfd93uhpwivdCH3QIRDO2"
    }
  }
}

The pollingInterval attribute is in seconds. I set it to thirty seconds in my application. The messagesToLoad attribute tells the script how many messages it should download per user and room. In my application it's not super important that the user get's notified about every single message, but more important that they get notified about new messages at all. That's why I decided to keep this attribute on the low side.

The push attribute holds information about the endpoint to send the push notifications, and how to authenticate with that endpoint. I've used a standard OAuth2.0 implementation where I've issued a client that has permissions to send push notifications only.

This is what the payload data sent from the script to the push endpoint looks like

{
   "notifications":[
      {
         "message":"You got 5 unread messages from Anton",
         "user_id":156,
         "rooms":[
            12345
         ]
      }
   ]
}

To get this helper application going you need to: