Table of Contents | ||
---|---|---|
|
Типы данных
Response
...
true
– успешный ответfalse
– ошибка
...
Запросы к серверу
Все запросы отправляются как POST запросы с содержанием "application/json"
. В ответ сервер всегда возвращает HTTP 200 OK
и с содержанием "application/json"
. Единственное исключение — это методы, которые работают с файлам. В теле ответа содержится информация об успешности запроса, результат или ошибка. Для результата может быть приложен граф связанных объектов. Например, если в результате вернулось сообщение в чате, в графе связанных объектов будет пользователь, который отправил это сообщение. Данных подход позволяет снизить объем дублируемых данных в ответах.
Пример запроса:
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":"Привет!"} |
Пример ответа:
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 |
Пример успешного пустого ответа:
Пример ответа:
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", "CreatedAtChatId": 150097014232210, "UpdatedAtLocalId": 15072042008661498085875116, }"EventId": 1649, ] } } |
Пример ответа с ошибкой:
Code Block |
---|
{ "OK": false, "Error": {"TicketMessageId": null, "Author": "client", "ClientId": 11, "CodeUserId": "not_found"null, "TextPayload": "Объектtext", не найден" } } |
Сервисы
Клиенты
Информация о текущем клиенте
...
Пример ответа:
Code Block |
---|
{ "OKText": true"Здравствуйте!", "ErrorReceived": nulltrue, "Result": { "IdRead": 11true, "ProjectIdPushed": 1false, "CompanyIdCreatedAt": 21498085875206, "TypeReceivedAt": "crm"1498085920218, "NameReadAt": "Дмитрий Менделеев"1498085920218, "OnlineMy": true, "CustomerId": 5}, "ChannelId": null, { "TelegramIdId": null253, "FacebookIdChatId": null10, "VKIdLocalId": null1498085875247, "TotalTicketsEventId": 21626, "TotalOpenTicketsTicketMessageId": 1null, "CreatedAtAuthor": 1498085866873"system", "UpdatedAtClientId": 1518167008390null, "SeenAtUserId": 1518167008390null, "MessagedAtPayload": null"notice", "IntegrationIdText": "10", } "Received": false, "RelsRead": {} } |
Авторизация пользователя по сессии
...
Поле | Тип | Обязательное | Комментарий |
---|---|---|---|
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": {}
} |
Чаты
Информация о чате
...
Пример ответа:
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, false, "Pushed": false, "CreatedAt": 1498085875247, "TelegramIdReceivedAt": null, "FacebookIdReadAt": null, "VKIdMy": null,false }, "TotalTickets": 2,{ "TotalOpenTicketsId": 1254, "CreatedAtChatId": 149808586687310, "UpdatedAtLocalId": 15181649188351498085879130, "SeenAtEventId": 15181649188351633, "MessagedAtTicketMessageId": null, "IntegrationIdAuthor": "10user", }"ClientId": null, ] } } |
Отправка уведомления о том, что пользователь печатает сообщение
...
Пример ответа:
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": [ { "UserId": 4, "Payload": "text", "Text": "Добрый день!", "Received": true, "Read": true, "Pushed": false, "CreatedAt": 1498085879130, "ReceivedAt": 1498085879272, "ReadAt": 1498085879302, "My": false } ], "Rels": { "Clients": [ { "Id": 50411, "ProjectId": 1, "ChatIdCompanyId": 102, "LocalIdType": 1500970393387"crm", "EventIdName": "Дмитрий 3614Менделеев", "TicketMessageIdOnline": nulltrue, "AuthorCustomerId": "user"5, "ClientIdChannelId": null, "UserIdTelegramId": 12null, "PayloadFacebookId": "text"null, "Text": "Добрый день!"VKId": null, "ReceivedTotalTickets": false2, "ReadTotalOpenTickets": false1, "PushedCreatedAt": true1498085866873, "CreatedAtUpdatedAt": 15009703933871518171379854, "ReceivedAtSeenAt": null1518171379854, "ReadAtMessagedAt": null, "MyIntegrationId": false"10" } ], "Rels": { "ClientsFiles": [ { "Id": "1705a928-0d7a-11e8-b187-13b6ccbb5d10.txt", "Type": 11"file", "ProjectIdOwner": 1"client", "CompanyIdOwnerClientId": 211, "TypeClientId": null, "crmUserId": 1, "Name": "Дмитрий Менделеевoci8-sigsegv.txt", "OnlinePath": true"clients/11/11/1705a928-0d7a-11e8-b187-13b6ccbb5d10.txt", "CustomerIdSize": 55356, "ChannelIdImageWidth": null, "TelegramIdImageHeight": null, "FacebookIdContentType": null"", "VKIdCreatedAt": null, 1518167865822 } ], "TotalTicketsUsers": 2,[ "TotalOpenTickets": 1,{ "CreatedAtId": 14980858668731, "UpdatedAtName": "Иван 1518165344742Коробков", "SeenAtEmail": 1518165344742"i.korobkov@iqstore.ru", "MessagedAtPosition": null"Технический директор", "IntegrationIdRoleId": "10" } 1, ], "UsersAvatarId": [ "e83220a3-56cb-11e7-b21f-6109cf735b0f.png", {"Online": true, "IdDeleted": 12false, "NameTotalAssignedTickets": "Оператор"1, "EmailCreatedAt": "operator@iqstore.ru"1491321126034, "PositionUpdatedAt": "Оператор"1518171379292, "RoleIdLastSeenAt": 21518171379292, "AvatarIdAssignedAt": null1518166787715, "OnlineDisplayName": 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": "Привет"
} |
Подтверждение получения сообщений
...
]
}
} |
Авторизация запросов
Для авторизации запросов к серверу используется токен сессии, который клиент получает после авторизации во внешней системе. Токен автоматически проставляется в 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 |
...
Пример запроса:
Code Block |
---|
[1, 2, 3, 4, 5] |
Подтверждение прочтения сообщений
...
Пример запроса:
Code Block |
---|
[1, 2, 3, 4, 5]/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":"Привет!"} |