Получение списка подписок
Для получения списка подписок используется API-метод
При вызове без параметров метод возвращает все подписки на события.
Есть возможность отфильтровать параметры через OData $filter
В данном примере значение параметра active eq true and address/chatId eq '2341918'
Возможна выборка по содержимому secureContext
и insecureContext
Пример результата:
{
"$error": null,
"$items": [
{
"id": "41631b7b-527a-4b4f-accd-1031d3e16d99",
"accountId": "99bffda5-5bd1-49b1-b4f2-658854797c01",
"user": {
"externalId": "12345",
"id": "41631b7b-527a-4b4f-accd-1031d3e16d99",
"accountId": "99bffda5-5bd1-49b1-b4f2-658854797c01"
},
"insecureContext": {
"externalId": "214214",
"orederId": "22"
},
"secureContext": {
"orderId": "4568"
},
"secureContextToken": null,
"subject": null,
"subscribedTs": "2017-04-04T08:37:30.43Z",
"unsubscribedTs": null,
"address": {
"channel": "tg",
"channelId": 76,
"accountId": "99bffda5-5bd1-49b1-b4f2-658854797c01",
"remoteAddress": "71418274",
"chatId": "71418274"
},
"active": true
}
],
"$value": null,
"$count": 40
}
в случае ошибки:
{
"$error": {
"sc": 500,
"scn": "INTERNAL_ERROR",
"msg": "Failed to encode as JSON: Direct self-reference leading to cycle (through reference chain: textback.restapi.ApiResponse[\"$error\"]->textback.restapi.ApiError[\"ex\"]->org.apache.olingo.odata2.api.uri.expression.ExpressionParserException[\"httpExceptionCause\"])",
"ex": {
"cause": null,
"stackTrace": [
{...}
],
"message": "Failed to encode as JSON: Direct self-reference leading to cycle (through reference chain: textback.restapi.ApiResponse[\"$error\"]->textback.restapi.ApiError[\"ex\"]->org.apache.olingo.odata2.api.uri.expression.ExpressionParserException[\"httpExceptionCause\"])",
"localizedMessage": "Failed to encode as JSON: Direct self-reference leading to cycle (through reference chain: textback.restapi.ApiResponse[\"$error\"]->textback.restapi.ApiError[\"ex\"]->org.apache.olingo.odata2.api.uri.expression.ExpressionParserException[\"httpExceptionCause\"])",
"suppressed": []
}
},
"$items": null,
"$value": null,
"$count": null
}
Отправка уведомлений подписанным клиентам
Тело запроса:
{
"$filter":"1 eq 1",
"text":"Test notification for all subscribers",
"location": {
"longitude":34.5,
"latitude":34.5
}
}
Рекомендуется слать либо текст, либо локацию. В Viber приходит только одно поле в одном сообщении.
В поле $filter
задается OData-фильтр, такой-же как при поиске подписок.
Рекомендуем сначала проверить фильтр через /api/endUserNotifications/subscriptions,
а потом использовать его для рассылки.
Единственное ограничение: рассылка будет осуществлена только на активные подписки.
Формат ответа:
{
"$error": null,
"$items": null,
"$value": {
"id": "3c1a89b0-051c-4679-a1e0-84b47eb831c9",
"accountId": "99bffda5-5bd1-49b1-b4f2-658854797c01",
"affectedSubscriptions": 40,
"affectedAddresses": 6,
"subject": null,
"text": null,
"chatTitle": null,
"location": {
"longitude": 34.5,
"latitude": 34.5
},
"attachments": [],
"sentTimestamp": "2017-04-04T16:09:48.004+03:00",
"textMarkup": "PLAIN",
"$filter": "1 eq 1 and active eq true"
},
"$count": 1
}
Поле affectedSubscriptions указывает, сколько подписок соответствовало данному критерию.
Поле affectedAddresses указывает, на сколько уникальных "адресов" было отправлено сообщения.
Secure Context
Безопасный контекст формируется на основе JWT-токена. Json, из которого создан токен, может иметь следующий вид:
{
"orderId" : "4568",
"iat" : 1491311737,
"exp" : 1492175737,
"iss" : "99bffda5-5bd1-49b1-b4f2-658854797c01",
"sub" : "12345"
}
Поле iss
является обязательным и должно равняться TextBackAccountId
Поле sub
— это ID пользователя в вашей системе.
Поля iat
и exp
— служебные поля JWT, сигнализирующие о времени жизни токена.
Можно добавлять любое количество полей, все они попадут в поле secureContext
созданной подписки.