Запросы к серверу

Все запросы отправляются как 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":"Привет!"}