Запросы к серверу
Все запросы отправляются как POST запросы с содержанием "application/json"
. В ответ сервер всегда возвращает HTTP 200 OK
и с содержанием "application/json"
. Единственное исключение — это методы, которые работают с файлам. В теле ответа содержится информация об успешности запроса, результат или ошибка. Для результата может быть приложен граф связанных объектов. Например, если в результате вернулось сообщение в чате, в графе связанных объектов будет пользователь, который отправил это сообщение. Данных подход позволяет снизить объем дублируемых данных в ответах.
Пример запроса:
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":"Привет!"}
Пример ответа:
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": "Иван Коробков" } ] } }
Авторизация запросов
Для авторизации запросов к серверу используется токен сессии, который клиент получает после авторизации во внешней системе. Токен автоматически проставляется в Cookie. Если нужно, его также можно передавать отдельным заголовком Authorization.
Cookie: client-session ${session-token}
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}
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":"Привет!"}
Типы данных
Response
Поле | Тип | Обязательное | Комментарий |
---|---|---|---|
OK | bool | Да |
|
Error | Error | Нет | Информация об ошибке. |
Result | Any | Нет | Успешный результат, тип зависит от вызываемого метода. |
Rels | Graph | Нет | Граф зависимых объектов, на которые ссылается результат. |
Пример успешного пустого ответа:
{ "OK": true, "Error": null, "Result": null, "Rels": null }
Пример успешного ответа с данными и графом зависимых объектов:
{ "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 } ] } }
Пример ответа с ошибкой:
{ "OK": false, "Error": { "Code": "not_found", "Text": "Объект не найден" } }
ActorType
Перечисление типов субъектов, которые могут совершать действия.
Значение | Комментарий |
---|---|
"" | Пустая строка, анонимный клиент. |
client | Клиент. |
user | Пользователь. |
system | Система. |
Chat
Поле | Тип | Обязательное | Комментарий |
---|---|---|---|
Id | int64 | Да | |
ProjectId | int64 | Да | |
ClientId | int64 | Да | |
ChannelId | int64 | Да | |
EventId | int64 | Нет | Айди последнего события в чате |
ClientUnread | int32 | Да | Количество непрочитанных сообщений в чате |
CreatedAt | Timestamp | Да | Дата создания |
ChangedAt | Timestamp | Да | Дата изменения |
ChatMessage
Поле | Тип | Обязательное | Комментарий |
---|---|---|---|
Id | int64 | Да | |
ChatId | int64 | Да | |
LocalId | int64 | Да | |
EventId | int64 | Да | |
Author | ActorType | Да | |
ClientId | int64 | Зависит от Author | |
UserId | int64 | Зависит от Author | |
Payload | ChatMessagePayloadType | Да | |
Text | string | Да | Есть всегда, но может быть пустой строкой, если тип сообщения — файл. |
FileId | string | Зависит от Payload | |
Received | bool | Да | Сообщение доставлено получателю. |
Read | bool | Да | Сообщение прочитанно получателем. |
Pushed | bool | Да | Отправлено пуш-уведомление о сообщении. |
CreatedAt | Timestamp | Да | Дата создания. |
ReceivedAt | Timestamp | Да | Дата получения. |
ReadAt | Timestamp | Да | Дата прочтения. |
My | bool | Да | Текущий пользователь автор этого сообщения. |
ChatMessagePayloadType
Перечисление типов сообщений в чате.
Значение | Комментарий |
---|---|
text | Текстовое сообщение |
file | Сообщение с приложенным файлом |
ChatEvent
Событие в чате.
Поле | Тип | Обязательное | Комментарий |
---|---|---|---|
Id | int64 | true | Может быть 0, если событие транзитивное, т.е. не хранится в базе данных. |
Type | ChatEventType | true | Тип события |
ChatId | int64 | true | Айди чата, в котором произошло событие |
MessageId | int64 | false | Айди сообщения, с которым связано событие |
Actor | ActorType | true | Тип актора, который совершил действие. |
ClientId | int64 | false | Айди клиента, который совершил действие. |
UserId | int64 | false | Айди пользователя, который совершил действие. |
CreatedAt | Timestamp | true | Дата создания |
Transitive | bool | false | Транзитивное событие, не хранится в базе данных, пример, что пользователь печатает в чате. |
ChatEventType
Перечисление типов событий в чате.
Значение | Комментарий |
---|---|
typing | Клиент или пользователь печатает в чате. |
message_created | Новое сообщение в чате. |
message_received | Получатель подтвердил, что сообщение доставлено. |
message_read | Получатель подтвердил, что сообщение прочитанно. |
Client
Поле | Тип | Обязательное | Комментарий |
---|---|---|---|
Id | int64 | true | |
ProjectId | int64 | true | |
Type | ClientType | true | Тип клиента. |
Name | string | true | Имя клиента. |
Online | bool | true | Клиент сейчас онлайн. |
CreatedAt | Timestamp | true | Дата создания. |
UpdatedAt | Timestamp | true | Дата обновления. |
SeenAt | Timestamp | false | Дата, когда клиент был онлайн последний раз. |
File
Поле | Тип | Обязательное | Комментарий |
---|---|---|---|
Id | string | true | |
Type | FileType | true | Тип файла |
Owner | FileOwnerType | true | Тип владельца файла:
|
OwnerClientId | int64 | Зависит от Owner | Айди клиента, в чате которого находится этот файл. |
ClientId | int64 | false | Айди клиента, который загрузил этот файл. |
UserId | int64 | false | Айди пользователя, который загрузил этот файл. |
Name | string | true | Оригинальное имя файла. |
Path | string | true | Внутренний путь к файлу. |
Size | int64 | true | Размер файла в байтах |
ImageWidth | int64 | false | Ширина изображения. |
ImageHeight | int64 | false | Высота изображения |
ContentType | string | true | Тип содержания файла. |
CreatedAt | Timestamp | true | Дата создания файла. |
FileType
Перечисление типов файла
Значение | Комментарий |
---|---|
file | Файл или документ. |
image | Изображение. |
User
Поле | Тип | Обязательное | Комментарий |
---|---|---|---|
Id | int64 | true | |
Name | string | true | Имя пользователя |
Position | string | true | Должность пользователя |
AvatarId | string | false | Айди аватарки пользователя |
Online | bool | true | |
CreatedAt | Timestamp | true | |
UpdatedAt | Timestamp | true | |
LoggedInAt | Timestamp | false | |
DisplayName | string | true | Имя, которое нужно показывать клиентам |
Сервисы
Клиенты
Информация о текущем клиенте
Параметр | Значение | Комментарий |
---|---|---|
Метод | POST | |
Путь | /public/api/v1/clients/me | |
Запрос | Пустой | |
Ответ | Client |
Пример ответа:
{ "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": {} }
Авторизация пользователя по сессии
Параметр | Значение | Комментарии | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
Метод | POST | |||||||||
Путь | /public/api/v1/clients/auth | |||||||||
Запрос |
| |||||||||
Ответ | ClientAuth |
Пример запроса:
{"Token": "e71539abc4e000626c34bf981892b9acf84b84ed.f23e085bdd5d2b46e87b36fd79654727"}
Пример ответа:
{ "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": {} }
Регистрация анонимного пользователя
Параметр | Значение | Комментарий | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
Метод | POST | |||||||||
Путь | /public/api/v1/clients/signup | |||||||||
Запрос |
| |||||||||
Ответ | ClientAuth |
Пример запроса:
{"Name": "John Doe"}
Пример ответа:
{ "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": {} }
Регистрация анонимного пользователя в проекте
Параметр | Значение | Комментарий | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Метод | POST | |||||||||||||
Путь | /public/api/v1/clients/signup_in_project | |||||||||||||
Запрос |
| |||||||||||||
Ответ | ClientAuth |
Пример запроса:
{"Name": "John Doe", "Project": "retail"}
Пример ответа:
{ "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.
Параметр | Значение | Комментарий | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
Метод | POST | |||||||||
Путь | /public/api/v1/clients/integration_auth | |||||||||
Запрос |
| |||||||||
Ответ | ClientAuth |
Пример запроса:
{"Credentials": "super-secure-token"}
Пример ответа:
{ "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": {} }
Авторизация клиента через внешнюю систему в проекте
Например, авторизация клиента, информация о котором есть в ДБО или CRM.
Параметр | Значение | Комментарий | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Метод | POST | |||||||||||||
Путь | /public/api/v1/clients/integration_auth_in_project | |||||||||||||
Запрос |
| |||||||||||||
Ответ | ClientAuth |
Пример запроса:
{ "Credentials": "super-secure-token", "Project": "retail" }
Пример ответа:
{ "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 пуш-токена
Параметр | Значение | Комментарий | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
Метод | POST | |||||||||
Путь | /public/api/v1/push/channel/apns/:channelName | |||||||||
Запрос |
| |||||||||
Ответ | Пустой |
Регистрация GCM/FCM пуш-токена
Параметр | Значение | Комментарий | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
Метод | POST | |||||||||
Путь | /public/api/v1/push/channel/apns/:channelName | |||||||||
Запрос |
|
Чаты
Информация о чате
Параметр | Значение | Комментарии |
---|---|---|
Метод | POST | |
Путь | /public/api/v1/chats/channel/chat/:channelName | |
Запрос | Пустое | |
Ответ | Chat |
Пример ответа:
{ "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" } ] } }
Отправка уведомления о том, что пользователь печатает сообщение
Параметр | Значение | Комментарии |
---|---|---|
Метод | POST | |
Путь | /public/api/v1/chats/channel/typing/:channelName | |
Запрос | Пустой | |
Ответ | Пустой |
Пример ответа:
{ "OK": true, "Error": null, "Result": null, "Rels": null }
Получение истории сообщений в чате
Сообщения в чате возвращаются в обратном порядке по дате, сначала новые.
Параметр | Значение | Комментарии | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Метод | POST | |||||||||||||
Путь | /public/api/v1/chats/channel/messages/:channelName | |||||||||||||
Запрос |
| |||||||||||||
Ответ | ChatMessage[] |
Пример запроса:
{ "Limit": 10, "MaxId": 1234 }
Пример ответа:
{ "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": "Оператор" } ] } }
Отправка сообщения в чат
Параметр | Значение | Комментарий | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Метод | POST | |||||||||||||||||||||
Путь | /public/api/v1/chats/channel/send/:channelName | |||||||||||||||||||||
Запрос |
| |||||||||||||||||||||
Ответ | Пустой | Новое сообщение придет в SSE подключении. |
Пример запроса:
{ "LocalId": 1518166402407, "Payload": "text", "Text": "Привет" }
Подтверждение получения сообщений
Параметр | Значение | Комментарий |
---|---|---|
Метод | POST | |
Путь | /public/api/v1/chats/messages/received | |
Запрос | int64[] | Айди сообщений, которые нужно пометить как полученные |
Ответ | Пустой |
Пример запроса:
[1, 2, 3, 4, 5]
Подтверждение прочтения сообщений
Параметр | Значение | Комментарий |
---|---|---|
Метод | POST | |
Путь | /public/api/v1/chats/messages/read | |
Запрос | int64[] | Айди сообщений, которые нужно пометить как прочтенные |
Ответ | Пустой |
Пример запроса:
[1, 2, 3, 4, 5]
Файлы
Ссылка на файл
Параметр | Значение | Комментарий |
---|---|---|
Метод | GET | |
Путь | /public/api/v1/files/get/:fileId | |
Ответ | Файл с правильным Content-Type |
Ссылка на изображение
В отличии от ссылки на файл позволяет получить изображение в уменьшенном размере.
Параметр | Значение | Комментарий | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
Метод | GET | |||||||||
Путь | /public/api/v1/files/image/:fileId?size=:size | |||||||||
Запрос |
| |||||||||
Ответ | Файл с изображением в нужном размере |
Информация о файле
Параметр | Значение | Комментарий |
---|---|---|
Метод | GET | |
Путь | /public/api/v1/files/meta/:fileId | |
Ответ | File |
Пример ответа:
{ "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": {} }
Загрузка файла
Параметр | Значение | Комментарий | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Метод | POST | |||||||||||||
Content-Type | multipart/form-data | |||||||||||||
Путь | /public/api/v1/files/upload | |||||||||||||
Запрос |
| |||||||||||||
Ответ | File |
Пример ответа:
{ "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.
События в чате
Параметр | Значение | Комментарий | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Метод | GET | |||||||||||||
Путь | /public/api/v1/ws/chats/channel/events/:channelName?FromId=:fromId&Limit=:limit | |||||||||||||
Запрос |
| |||||||||||||
Сообщение | ChatEvent[] |
Пример сообщения с двумя событиями:
{ "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": "Иван Коробков" } ] } }
Количество непрочитанных сообщений
Параметр | Значение | Комментарий |
---|---|---|
Метод | GET | |
Путь | /public/api/v1/ws/chats/channel/unread/:channelName | |
Сообщение | int32 |
Пример сообщения:
{ "OK": true, "Error": null, "Result": 13 }
HTML5 Server-Sent Events
Сервис событий позволяет подписываться и получать события в реальном времени. В качестве протокола используется HTML5 SSE и WebSockets.
События в чате
Параметр | Значение | Комментарий | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Метод | GET | |||||||||||||
Путь | /public/api/v1/sse/chats/channel/events/:channelName?FromId=:fromId&Limit=:limit | |||||||||||||
Запрос |
| |||||||||||||
Сообщение | ChatEvent[] |
Пример сообщения с двумя событиями:
{ "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": "Иван Коробков" } ] } }
Количество непрочитанных сообщений
Параметр | Значение | Комментарий |
---|---|---|
Метод | GET | |
Путь | /public/api/v1/sse/chats/channel/unread/:channelName | |
Сообщение | int32 |
Пример сообщения:
{ "OK": true, "Error": null, "Result": 13 }