Operator API
API доступно только при наличии модуля "IQChannels – API. Operator"
Запросы к серверу
Все запросы отправляются как POST запросы с содержанием "application/json". В ответ сервер всегда возвращает HTTP 200 OK и с содержанием "application/json". Единственное исключение — это методы, которые работают с файлам. В теле ответа содержится информация об успешности запроса, результат или ошибка. Для результата может быть приложен граф связанных объектов. Например, если в результате вернулось сообщение в чате, в графе связанных объектов будет пользователь, который отправил это сообщение. Данных подход позволяет снизить объем дублируемых данных в ответах.
Пример запроса:
POST /api/tickets/create_message HTTP/1.1
Host: app.iqstore.ru
Connection: keep-alive
Content-Length: 65
Origin: http://app.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: user-session=7b6ea6627729db70414da6518561ddc2e07a320e.00000000000000000
{"TicketId":103,"Message":{"LocalId":1548142724904,"Type":"text","Text":"Hello"}}
Пример ответа:
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,
"Ping": false,
"Data": {
"Message": {
"Id": 1632,
"UID": "a75247b226787bc7fc2e337e28d898c2eb46da14",
"TicketId": 103,
"LocalId": 1548142724904,
"Author": "user",
"ClientId": null,
"UserId": 1,
"Type": "text",
"Text": "Hello",
"Received": false,
"Read": false,
"CreatedAt": 1548142724951,
"UpdatedAt": 1548142724951,
"ReceivedAt": null,
"ReadAt": null,
"My": true
},
"Graph": {
"Users": [
{
"Id": 1,
"Name": "Иван Коробков",
"Email": "i.korobkov@iqstore.ru",
"Position": "Технический директор",
"RoleId": 1,
"AvatarId": "baac46c4-c475-11e7-999e-fb4e907475d9.jpg",
"Online": true,
"Active": true,
"Deleted": false,
"TotalAssignedTickets": 1,
"CreatedAt": 1508308102244,
"UpdatedAt": 1548142724569,
"LastSeenAt": 1548142724569,
"AssignedAt": 1548142706408,
"DisplayName": "Иван Коробков",
"Permissions": null
}
]
}
}
}
Авторизация пользовательских запросов
Для авторизации пользовательских запросов используется токен сессии, который пользователь получает после авторизации. Токен автоматически проставляется в Cookie.
Cookie: user-session ${session-token}
POST /api/tickets/create_message HTTP/1.1
Host: app.iqstore.ru
Connection: keep-alive
Content-Length: 65
Origin: http://app.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: user-session=7b6ea6627729db70414da6518561ddc2e07a320e.00000000000000000
{"TicketId":103,"Message":{"LocalId":1548142724904,"Type":"text","Text":"Hello"}}
Авторизация сервисных запросов
Для авторизации запросов сервисных аккаунтов используется заголовок Authorization: Bearer <token>, который система генерирует автоматически при создании нового сервисного аккаунта в разделе Пользователи.
Authorization: Bearer ${service-account-token}
POST /api/tickets/create_message HTTP/1.1
Host: app.iqstore.ru
Connection: keep-alive
Content-Length: 65
Content-Type: application/json
Authorization: Bearer 3dd194ed5b5f6302fdd02170751126232440979c57102b8c14da9dd3126f7037
{"TicketId":103,"Message":{"LocalId":1548142724904,"Type":"text","Text":"Hello"}}
Типы данных
Response
| Поле | Тип | Обязательное | Комментарий |
|---|---|---|---|
OK | bool | Да | true – успешный ответ false – ошибка |
Error | [Error](#error) | Нет | Информация об ошибке. |
Data | Any | Нет | Успешный результат, тип зависит от вызываемого метода. |
Graph | Graph | Нет | Граф зависимых объектов, на которые ссылается результат. |
Error
Ошибка.
| Поле | Тип | Nullable | Описание |
|---|---|---|---|
| Code | ErrorCode | Код ошибки | |
| Text | string | Описание ошибки |
ErrorCode
| Константа | Значение | Описание |
|---|---|---|
| ErrorCodeNotFound | "not_found" | Объект не найден |
| ErrorCodeForbidden | "forbidden" | Доступ запрещен |
| ErrorCodeUnauthorized | "unauthorized" | Ошибка авторизации |
| ErrorCodeInvalid | "invalid" | Ошибка валидации данных |