1. Publish/Subcribe Principle
With Stringee, Client Apps can monitor status of each other in real-time, like:
- Call status.
- Online status.
- Any attribute defined by the developer.
If client A wants to monitor the change of an attribute of Client B, both sides have to define a topic, i.g. topic_1
- Client A subscribes to topic_1
- When there is any attribute of Client B changes, Client B will publish the change to topic_1
- Client A will receive notification from topic_1
2. Decide to use Publish/Subcribe in Access Token
To allow an App to Publish or to Subcribe to a Topic, you can add "subscribe" values and "attributes" array into the Access Token Payload; read more about Access Token here.
To be specific, you add at least 1 of 2 fields below in to the Payload:
- subscribe: List of Topics the App wants to subcribe to, separated by the comma (,)
- attributes: Arrays of attributes the App wants to publish if there is any change, and the target Topic.
[{
"attribute": "ATTRIBUTE_NAME",
"topic" "TOPIC_NAME"
}]
There are 2 default attributes (you can't define new attributes with same name):
- onlineStatus: Online status of the Client App
- call: Status of the Call (Calling/Ringing/Answered/Ended)
*Besides those 2 attributes, you can define new ones freely for the Clients. *
There is 1 default Topic:
- ALL_CALL_STATUS: When status of a Call changes, Stringee system will publish the change to this topic (Call to any user)
An example of Access Token Payload:
{
"jti": "...-1554197947",
"iss": "...",
"exp": 1555197947,
"userId": "agent_1",
"subscribe": "online_status_GRDHG0HI,ALL_CALL_STATUS,agent_manual_status",
"attributes": [{
"attribute": "onlineStatus",
"topic": "online_status_GRDHG0HI"
},
{
"attribute": "call",
"topic": "call_GRDHG0HI"
},
{
"attribute": "manual_status",
"topic": "agent_manual_status"
}
]
}
After being authorized with above Access Token, the App will:
Subscribe to Topics:
- online_status_GRDHG0HI
- ALL_CALL_STATUS
- agent_manual_status
Publish:
- Online status, to the Topic online_status_GRDHG0HI
- Call status, to the Topic call_GRDHG0HI
- Attribute manual_status, to the Topic agent_manual_status
3. Get current attributes of an user
GET https://api.stringee.com/v1/users/USER_ID
Response:
{
"loginTime": 1554204151774,
"attributes": [
{
"attribute": "onlineStatus",
"value": "online"
},
{
"attribute": "call"
},
{
"attribute": "app_is_foreground",
"value": true
}
],
"chatCustomer": false,
"userId": "USER_ID"
}
Notice: REST API must be authorized, more details at: https://developer.stringee.com/docs/call-rest-api/call-rest-api-authentication
4. Change attributes of an user
a) By REST API
PUT https://api.stringee.com/v1/users/USER_ID/attributes
[
{
"attribute": "ATTRIBUTE_NAME",
"value": "NEW_VALUE"
}
]
Response:
{
"loginTime": 1554204151774,
"attributes": [
{
"attribute": "onlineStatus",
"value": "online"
},
{
"attribute": "call"
},
{
"attribute": "ATTRIBUTE_NAME",
"value": "NEW_VALUE"
}
],
"chatCustomer": false,
"userId": "USER_ID"
}
Notice: REST API must be authorized, more details at: https://developer.stringee.com/docs/call-rest-api/call-rest-api-authentication
b) From Client App
Call function:
stringeeClient.changeAttribute('ATTRIBUTE_NAME', "NEW_VALUE")
5. Client Apps receives notification of changes from subcribed Topics
stringeeClient.on('messagefromtopic', function (data) {
console.log('++++++++++++++ messagefromtopic++++', data);
});
Format of returned data (response):
{
"topic": "online_status_GRDHG0HI",
"message": {
"newValue": "online",
"callEnded": true,
"attribute": "onlineStatus",
"userId": "user_1",
"projectId": 25,
"timestamp": 1554261314286
}
}