...
Code Block |
---|
HTTP/1.1 200 OK Server: nginx/1.11.13 Date: Fri, 09 Feb 2018 10:16:21 GMT Content-Type: application/json; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Vary: Accept-Encoding Access-Control-Allow-Credentials: true Access-Control-Allow-Headers: Accept, Accept-Encoding, Accept-Language, Access-Control-Request-Headers, Access-Control-Request-Method, Authorization, Cache-Control, Connection, Content-Type, Cookie, Host, Origin, Pragma, Referer, X-Requested-With, User-Agent Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS Access-Control-Allow-Origin: http://dev.iqstore.ru Pragma: no-cache Cache-Control: private, must-revalidate Content-Encoding: gzip { "OK": true, "Error": null, "Result": [ { "Id": 252, "ChatId": 10, "LocalId": 1498085875116, "EventId": 1649, "TicketMessageId": null, "Author": "client", "ClientId": 11, "UserId": null, "Payload": "text", "Text": "Здравствуйте!", "Received": true, "Read": true, "Pushed": false, "CreatedAt": 1498085875206, "ReceivedAt": 1498085920218, "ReadAt": 1498085920218, "My": true }, { "Id": 253, "ChatId": 10, "LocalId": 1498085875247, "EventId": 1626, "TicketMessageId": null, "Author": "system", "ClientId": null, "UserId": null, "Payload": "notice", "Text": "", "Received": false, "Read": false, "Pushed": false, "CreatedAt": 1498085875247, "ReceivedAt": null, "ReadAt": null, "My": false }, { "Id": 254, "ChatId": 10, "LocalId": 1498085879130, "EventId": 1633, "TicketMessageId": null, "Author": "user", "ClientId": null, "UserId": 4, "Payload": "text", "Text": "Добрый день!", "Received": true, "Read": true, "Pushed": false, "CreatedAt": 1498085879130, "ReceivedAt": 1498085879272, "ReadAt": 1498085879302, "My": false } ], "Rels": { "Clients": [ { "Id": 11, "ProjectId": 1, "CompanyId": 2, "Type": "crm", "Name": "Дмитрий Менделеев", "Online": true, "CustomerId": 5, "ChannelId": null, "TelegramId": null, "FacebookId": null, "VKId": null, "TotalTickets": 2, "TotalOpenTickets": 1, "CreatedAt": 1498085866873, "UpdatedAt": 1518171379854, "SeenAt": 1518171379854, "MessagedAt": null, "IntegrationId": "10" } ], "Files": [ { "Id": "1705a928-0d7a-11e8-b187-13b6ccbb5d10.txt", "Type": "file", "Owner": "client", "OwnerClientId": 11, "ClientId": null, "UserId": 1, "Name": "oci8-sigsegv.txt", "Path": "clients/11/11/1705a928-0d7a-11e8-b187-13b6ccbb5d10.txt", "Size": 5356, "ImageWidth": null, "ImageHeight": null, "ContentType": "", "CreatedAt": 1518167865822 } ], "Users": [ { "Id": 1, "Name": "Иван Коробков", "Email": "i.korobkov@iqstore.ru", "Position": "Технический директор", "RoleId": 1, "AvatarId": "e83220a3-56cb-11e7-b21f-6109cf735b0f.png", "Online": true, "Deleted": false, "TotalAssignedTickets": 1, "CreatedAt": 1491321126034, "UpdatedAt": 1518171379292, "LastSeenAt": 1518171379292, "AssignedAt": 1518166787715, "DisplayName": "Иван Коробков" } ] } } |
Типы данных
Response
...
true
– успешный ответfalse
– ошибка
...
Пример успешного пустого ответа:
Code Block |
---|
{
"OK": true,
"Error": null,
"Result": null,
"Rels": null
} |
Пример успешного ответа с данными и графом зависимых объектов:
Code Block |
---|
{
"OK": true,
"Error": null,
"Result": [
{
"Id": 504,
"ChatId": 10,
"EventId": 3614,
"Author": "user",
"UserId": 12,
"Payload": "text",
"Text": "Добрый день!",
"CreatedAt": 1500970393387,
}
],
"Rels": {
"Users": [
{
"Id": 12,
"Name": "Оператор",
"Email": "operator@iqstore.ru",
"CreatedAt": 1500970142322,
"UpdatedAt": 1507204200866
}
]
}
} |
Пример ответа с ошибкой:
Code Block |
---|
{
"OK": false,
"Error": {
"Code": "not_found",
"Text": "Объект не найден"
}
} |
ActorType
Перечисление типов субъектов, которые могут совершать действия.
...
Chat
...
ChatMessage
...
Дата создания.
...
Авторизация запросов
Для авторизации запросов к серверу используется токен сессии, который клиент получает после авторизации во внешней системе. Токен автоматически проставляется в Cookie. Если нужно, его также можно передавать отдельным заголовком Authorization.
Cookie: client-session ${session-token}
Code Block |
---|
POST /public/api/v1/chats/channel/send/support HTTP/1.1
Host: dev.iqstore.ru
Connection: keep-alive
Content-Length: 65
Origin: http://dev.iqstore.ru
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36
Content-Type: application/json
Cookie: client-session=973b38b354a508bf13244b2655077895c78f1e86.aaaa7e84433b0901c502a5f7d38c71ee
{"LocalId":1518171256447,"Payload":"text","Text":"Привет!"} |
Authorization: Client ${session-token}
Code Block |
---|
POST /public/api/v1/chats/channel/send/support HTTP/1.1
Host: dev.iqstore.ru
Connection: keep-alive
Content-Length: 65
Origin: http://dev.iqstore.ru
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36
Content-Type: application/json
Authorization: Client 973b38b354a508bf13244b2655077895c78f1e86.aaaa7e84433b0901c502a5f7d38c71ee
{"LocalId":1518171256447,"Payload":"text","Text":"Привет!" |
ChatMessagePayloadType
Перечисление типов сообщений в чате.
...
ChatEvent
Событие в чате.
...
ChatEventType
Перечисление типов событий в чате.
...
Client
...
File
...
Тип владельца файла:
public
— Публичный файл, виден всем.client
— Файл в чате клиента.
...
FileType
Перечисление типов файла
...
User
...
Сервисы
Клиенты
Информация о текущем клиенте
...
Пример ответа:
Code Block |
---|
{
"OK": true,
"Error": null,
"Result": {
"Id": 11,
"ProjectId": 1,
"CompanyId": 2,
"Type": "crm",
"Name": "Дмитрий Менделеев",
"Online": true,
"CustomerId": 5,
"ChannelId": null,
"TelegramId": null,
"FacebookId": null,
"VKId": null,
"TotalTickets": 2,
"TotalOpenTickets": 1,
"CreatedAt": 1498085866873,
"UpdatedAt": 1518167008390,
"SeenAt": 1518167008390,
"MessagedAt": null,
"IntegrationId": "10"
},
"Rels": {}
}
|
Авторизация пользователя по сессии
...
Поле | Тип | Обязательное | Комментарий |
---|---|---|---|
Token | string | Да | Токен внутренний сессии на сервере чата |
...
Пример запроса:
Code Block |
---|
{"Token": "e71539abc4e000626c34bf981892b9acf84b84ed.f23e085bdd5d2b46e87b36fd79654727"} |
Пример ответа:
Code Block |
---|
{
"OK": true,
"Error": null,
"Result": {
"Client": {
"Id": 11,
"ProjectId": 1,
"CompanyId": 2,
"Type": "crm",
"Name": "Дмитрий Менделеев",
"Online": true,
"CustomerId": 5,
"ChannelId": null,
"TelegramId": null,
"FacebookId": null,
"VKId": null,
"TotalTickets": 2,
"TotalOpenTickets": 1,
"CreatedAt": 1498085866873,
"UpdatedAt": 1518167109406,
"SeenAt": 1518167109406,
"MessagedAt": null,
"IntegrationId": "10"
},
"Session": {
"Id": 92,
"ClientId": 11,
"Token": "e71539abc4e000626c34bf981892b9acf84b84ed.f23e085bdd5d2b46e87b36fd79654727",
"CreatedAt": 1518164878551,
"Integration": false,
"IntegrationHash": null,
"IntegrationCredentials": null
}
},
"Rels": {}
} |
Регистрация анонимного пользователя
...
Поле | Тип | Обязательное | Комментарий |
---|---|---|---|
Name | string | Да | Имя клиента |
...
Пример запроса:
Code Block |
---|
{"Name": "John Doe"} |
Пример ответа:
Code Block |
---|
{
"OK": true,
"Error": null,
"Result": {
"Client": {
"Id": 18,
"ProjectId": 1,
"CompanyId": null,
"Type": "internal",
"Name": "John Doe",
"Online": false,
"CustomerId": null,
"ChannelId": null,
"TelegramId": null,
"FacebookId": null,
"VKId": null,
"TotalTickets": 0,
"TotalOpenTickets": 0,
"CreatedAt": 1518167345813,
"UpdatedAt": 1518167345813,
"SeenAt": null,
"MessagedAt": null,
"IntegrationId": null
},
"Session": {
"Id": 94,
"ClientId": 18,
"Token": "9f0ccd578394c9ef56c660de0f6c4614cbfe9a35.a07b3b3359e0d3943e074656dcda5d28",
"CreatedAt": 1518167345815,
"Integration": false,
"IntegrationHash": null,
"IntegrationCredentials": null
}
},
"Rels": {}
} |
Авторизация клиента через внешнюю систему
Например, авторизация клиента, информация о котором есть в ДБО или CRM.
...
Поле | Тип | Обязательное | Комментарий |
---|---|---|---|
Credentials | string | Да | Любая безопасная строка, по которой внешняя система сможет авторизовать пользователя. |
...
Пример запроса:
Code Block |
---|
{"Credentials": "super-secure-token"} |
Пример ответа:
Code Block |
---|
{
"OK": true,
"Error": null,
"Result": {
"Client": {
"Id": 1,
"ProjectId": 1,
"CompanyId": null,
"Type": "crm",
"Name": "Мартин Лютер Кинг",
"Online": false,
"CustomerId": 7,
"ChannelId": null,
"TelegramId": null,
"FacebookId": null,
"VKId": null,
"TotalTickets": 15,
"TotalOpenTickets": 0,
"CreatedAt": 1491678852327,
"UpdatedAt": 1517989811064,
"SeenAt": 1516117515977,
"MessagedAt": null,
"IntegrationId": "1"
},
"Session": {
"Id": 95,
"ClientId": 1,
"Token": "cd0f8d5b81358ec76db6aa50ec0424d7fd4fccc7.da3df153848575972de2e8b3ca187f2f",
"CreatedAt": 1518167539961,
"Integration": false,
"IntegrationHash": null,
"IntegrationCredentials": null
}
},
"Rels": {}
} |
Пуши
Регистрация APNS пуш-токена
...
Регистрация GCM/FCM пуш-токена
...
Чаты
Информация о чате
...
Пример ответа:
Code Block | ||
---|---|---|
| ||
{
"OK": true,
"Error": null,
"Result": {
"Id": 10,
"ProjectId": 1,
"ClientId": 11,
"ChannelId": 1,
"TicketId": 68,
"EventId": 3645,
"ClientUnread": 5,
"CreatedAt": 1498085875177,
"ChangedAt": 1518091061880
},
"Rels": {
"Clients": [
{
"Id": 11,
"ProjectId": 1,
"CompanyId": 2,
"Type": "crm",
"Name": "Дмитрий Менделеев",
"Online": true,
"CustomerId": 5,
"ChannelId": null,
"TelegramId": null,
"FacebookId": null,
"VKId": null,
"TotalTickets": 2,
"TotalOpenTickets": 1,
"CreatedAt": 1498085866873,
"UpdatedAt": 1518164918835,
"SeenAt": 1518164918835,
"MessagedAt": null,
"IntegrationId": "10"
}
]
}
} |
Отправка уведомления о том, что пользователь печатает сообщение
...
Пример ответа:
Code Block | ||
---|---|---|
| ||
{
"OK": true,
"Error": null,
"Result": null,
"Rels": null
} |
Получение истории сообщений в чате
Сообщения в чате возвращаются в обратном порядке по дате, сначала новые.
...
Параметр | Тип | Обязательный | Комментарий |
---|---|---|---|
Limit | int32 | Да | Количество сообщений |
MaxId | int64 | Нет | Айди последнего сообщения в прошлом ответе истории |
...
Пример запроса:
Code Block | ||
---|---|---|
| ||
{
"Limit": 10,
"MaxId": 1234
} |
Пример ответа:
Code Block | ||
---|---|---|
| ||
{
"OK": true,
"Error": null,
"Result": [
{
"Id": 504,
"ChatId": 10,
"LocalId": 1500970393387,
"EventId": 3614,
"TicketMessageId": null,
"Author": "user",
"ClientId": null,
"UserId": 12,
"Payload": "text",
"Text": "Добрый день!",
"Received": false,
"Read": false,
"Pushed": true,
"CreatedAt": 1500970393387,
"ReceivedAt": null,
"ReadAt": null,
"My": false
}
],
"Rels": {
"Clients": [
{
"Id": 11,
"ProjectId": 1,
"CompanyId": 2,
"Type": "crm",
"Name": "Дмитрий Менделеев",
"Online": true,
"CustomerId": 5,
"ChannelId": null,
"TelegramId": null,
"FacebookId": null,
"VKId": null,
"TotalTickets": 2,
"TotalOpenTickets": 1,
"CreatedAt": 1498085866873,
"UpdatedAt": 1518165344742,
"SeenAt": 1518165344742,
"MessagedAt": null,
"IntegrationId": "10"
}
],
"Users": [
{
"Id": 12,
"Name": "Оператор",
"Email": "operator@iqstore.ru",
"Position": "Оператор",
"RoleId": 2,
"AvatarId": null,
"Online": false,
"Deleted": false,
"TotalAssignedTickets": 0,
"CreatedAt": 1500970142322,
"UpdatedAt": 1507204200866,
"LastSeenAt": 1500970417675,
"DisplayName": "Оператор"
}
]
}
} |
Отправка сообщения в чат
...
Поле | Тип | Обязательное | Комментарии |
---|---|---|---|
LocalId | int64 | Да | Уникальное айди сообщения на стороне клиента, как правило, можно использовать UTC в миллисекундах. |
Payload | ChatMessagePayloadType | Да | Тип сообщения. |
Text | string | Зависит от Payload | Текст сообщения. |
FileId | string | Зависит от Payload | Айди загруженного файла. |
...
Пример запроса:
Code Block |
---|
{
"LocalId": 1518166402407,
"Payload": "text",
"Text": "Привет"
} |
Подтверждение получения сообщений
...
Пример запроса:
Code Block |
---|
[1, 2, 3, 4, 5] |
Подтверждение прочтения сообщений
...
Пример запроса:
Code Block |
---|
[1, 2, 3, 4, 5] |
Файлы
Ссылка на файл
...
Ссылка на изображение
В отличии от ссылки на файл позволяет получить изображение в уменьшенном размере.
...
Информация о файле
...
Пример ответа:
Code Block |
---|
{
"OK": true,
"Error": null,
"Result": {
"Id": "1705a928-0d7a-11e8-b187-13b6ccbb5d10.txt",
"Type": "file",
"Owner": "client",
"OwnerClientId": 11,
"ClientId": null,
"UserId": 1,
"Name": "oci8-sigsegv.txt",
"Path": "clients/11/11/1705a928-0d7a-11e8-b187-13b6ccbb5d10.txt",
"Size": 5356,
"ImageWidth": null,
"ImageHeight": null,
"ContentType": "",
"CreatedAt": 1518167865822
},
"Rels": {}
} |
Загрузка файла
...
Пример ответа:
Code Block |
---|
{
"OK": true,
"Error": null,
"Result": {
"Id": "9a9cef3d-0d7a-11e8-b188-9def95b467fb.jpg",
"Type": "image",
"Owner": "client",
"OwnerClientId": 11,
"ClientId": 11,
"UserId": null,
"Name": "1.jpg",
"Path": "clients/11/11/9a9cef3d-0d7a-11e8-b188-9def95b467fb.jpg",
"Size": 1039999,
"ImageWidth": 3024,
"ImageHeight": 4032,
"ContentType": "image/jpeg",
"CreatedAt": 1518168086597
},
"Rels": {}
} |
WebSockets
Сервис событий позволяет подписываться и получать события в реальном времени. В качестве протокола используется HTML5 SSE и WebSockets.
События в чате
...
Поле | Тип | Обязательное | Комментарий |
---|---|---|---|
FromId | int64 | Нет | Айди последнего полученного события |
Limit | int32 | Нет | Максимальное количество событий, которое можно вернуть в одном сообщении |
...
Пример сообщения с двумя событиями:
Code Block |
---|
{
"OK": true,
"Error": null,
"Result": [
{
"Id": 0,
"Type": "typing",
"ChatId": 10,
"MessageId": null,
"Actor": "user",
"ClientId": null,
"UserId": 1,
"CreatedAt": 1518168819924,
"Transitive": true
},
{
"Id": 4648,
"Type": "message_created",
"ChatId": 10,
"MessageId": 869,
"Actor": "user",
"ClientId": null,
"UserId": 1,
"CreatedAt": 1518168820897,
"Transitive": false
}
],
"Rels": {
"Chats": [
{
"Id": 10,
"ProjectId": 1,
"ClientId": 11,
"ChannelId": 1,
"TicketId": 68,
"EventId": 3645,
"ClientUnread": 5,
"CreatedAt": 1498085875177,
"ChangedAt": 1518168808785
}
],
"Clients": [
{
"Id": 11,
"ProjectId": 1,
"CompanyId": 2,
"Type": "crm",
"Name": "Дмитрий Менделеев",
"Online": true,
"CustomerId": 5,
"ChannelId": null,
"TelegramId": null,
"FacebookId": null,
"VKId": null,
"TotalTickets": 2,
"TotalOpenTickets": 1,
"CreatedAt": 1498085866873,
"UpdatedAt": 1518168816421,
"SeenAt": 1518168816421,
"MessagedAt": null,
"IntegrationId": "10"
}
],
"Users": [
{
"Id": 1,
"Name": "Иван Коробков",
"Email": "i.korobkov@iqstore.ru",
"Position": "Технический директор",
"RoleId": 1,
"AvatarId": "e83220a3-56cb-11e7-b21f-6109cf735b0f.png",
"Online": true,
"Deleted": false,
"TotalAssignedTickets": 1,
"CreatedAt": 1491321126034,
"UpdatedAt": 1518168818121,
"LastSeenAt": 1518168818121,
"AssignedAt": 1518166787715,
"DisplayName": "Иван Коробков"
}
]
}
} |
Количество непрочитанных сообщений
...
Пример сообщения:
Code Block |
---|
{
"OK": true,
"Error": null,
"Result": 13
} |
HTML5 Server-Sent Events
Сервис событий позволяет подписываться и получать события в реальном времени. В качестве протокола используется HTML5 SSE и WebSockets.
События в чате
...
Поле | Тип | Обязательное | Комментарий |
---|---|---|---|
FromId | int64 | Нет | Айди последнего полученного события |
Limit | int32 | Нет | Максимальное количество событий, которое можно вернуть в одном сообщении |
...
Пример сообщения с двумя событиями:
Code Block |
---|
{
"OK": true,
"Error": null,
"Result": [
{
"Id": 0,
"Type": "typing",
"ChatId": 10,
"MessageId": null,
"Actor": "user",
"ClientId": null,
"UserId": 1,
"CreatedAt": 1518168819924,
"Transitive": true
},
{
"Id": 4648,
"Type": "message_created",
"ChatId": 10,
"MessageId": 869,
"Actor": "user",
"ClientId": null,
"UserId": 1,
"CreatedAt": 1518168820897,
"Transitive": false
}
],
"Rels": {
"Chats": [
{
"Id": 10,
"ProjectId": 1,
"ClientId": 11,
"ChannelId": 1,
"TicketId": 68,
"EventId": 3645,
"ClientUnread": 5,
"CreatedAt": 1498085875177,
"ChangedAt": 1518168808785
}
],
"Clients": [
{
"Id": 11,
"ProjectId": 1,
"CompanyId": 2,
"Type": "crm",
"Name": "Дмитрий Менделеев",
"Online": true,
"CustomerId": 5,
"ChannelId": null,
"TelegramId": null,
"FacebookId": null,
"VKId": null,
"TotalTickets": 2,
"TotalOpenTickets": 1,
"CreatedAt": 1498085866873,
"UpdatedAt": 1518168816421,
"SeenAt": 1518168816421,
"MessagedAt": null,
"IntegrationId": "10"
}
],
"Users": [
{
"Id": 1,
"Name": "Иван Коробков",
"Email": "i.korobkov@iqstore.ru",
"Position": "Технический директор",
"RoleId": 1,
"AvatarId": "e83220a3-56cb-11e7-b21f-6109cf735b0f.png",
"Online": true,
"Deleted": false,
"TotalAssignedTickets": 1,
"CreatedAt": 1491321126034,
"UpdatedAt": 1518168818121,
"LastSeenAt": 1518168818121,
"AssignedAt": 1518166787715,
"DisplayName": "Иван Коробков"
}
]
}
} |
Количество непрочитанных сообщений
...
Пример сообщения:
Code Block |
---|
{
"OK": true,
"Error": null,
"Result": 13
} |