You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 21 Next »

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

Все запросы отправляются как 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

ПолеТипОбязательноеКомментарий
OKboolДа

true – успешный ответ
false – ошибка

ErrorErrorНетИнформация об ошибке.
ResultAnyНетУспешный результат, тип зависит от вызываемого метода.
RelsGraphНетГраф зависимых объектов, на которые ссылается результат.

Пример успешного пустого ответа:

{
  "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

ПолеТипОбязательноеКомментарий
Idint64Да
ProjectIdint64Да
ClientIdint64Да
ChannelIdint64Да




EventIdint64НетАйди последнего события в чате
ClientUnreadint32ДаКоличество непрочитанных сообщений в чате




CreatedAtTimestampДаДата создания
ChangedAtTimestampДаДата изменения

ChatMessage

ПолеТипОбязательноеКомментарий
Idint64Да
ChatIdint64Да
LocalIdint64Да
EventIdint64Да




AuthorActorTypeДа
ClientIdint64Зависит от Author
UserIdint64Зависит от Author




PayloadChatMessagePayloadTypeДа
TextstringДаЕсть всегда, но может быть пустой строкой, если тип сообщения — файл.
FileIdstringЗависит от Payload




ReceivedboolДаСообщение доставлено получателю.
ReadboolДаСообщение прочитанно получателем.
PushedboolДаОтправлено пуш-уведомление о сообщении.




CreatedAtTimestampДа

Дата создания.

ReceivedAtTimestampДаДата получения.
ReadAtTimestampДаДата прочтения.




MyboolДаТекущий пользователь автор этого сообщения.

ChatMessagePayloadType

Перечисление типов сообщений в чате.

ЗначениеКомментарий
textТекстовое сообщение
fileСообщение с приложенным файлом

ChatEvent

Событие в чате.

ПолеТипОбязательноеКомментарий
Idint64trueМожет быть 0, если событие транзитивное, т.е. не хранится в базе данных.
TypeChatEventTypetrueТип события




ChatIdint64trueАйди чата, в котором произошло событие
MessageIdint64falseАйди сообщения, с которым связано событие




ActorActorTypetrueТип актора, который совершил действие.
ClientIdint64falseАйди клиента, который совершил действие.
UserIdint64falseАйди пользователя, который совершил действие.




CreatedAtTimestamptrueДата создания
TransitiveboolfalseТранзитивное событие, не хранится в базе данных, пример, что пользователь печатает в чате.

ChatEventType

Перечисление типов событий в чате.

ЗначениеКомментарий
typingКлиент или пользователь печатает в чате.
message_createdНовое сообщение в чате.
message_receivedПолучатель подтвердил, что сообщение доставлено.
message_readПолучатель подтвердил, что сообщение прочитанно.

Client

ПолеТипОбязательноеКомментарий
Idint64true
ProjectIdint64true




TypeClientTypetrueТип клиента.
NamestringtrueИмя клиента.
OnlinebooltrueКлиент сейчас онлайн.




CreatedAtTimestamptrueДата создания.
UpdatedAtTimestamptrueДата обновления.
SeenAtTimestampfalseДата, когда клиент был онлайн последний раз.

File

ПолеТипОбязательноеКомментарий
Idstringtrue
TypeFileTypetrueТип файла
OwnerFileOwnerTypetrue

Тип владельца файла:

  • public — Публичный файл, виден всем.
  • client — Файл в чате клиента.
OwnerClientIdint64Зависит от OwnerАйди клиента, в чате которого находится этот файл.
ClientIdint64falseАйди клиента, который загрузил этот файл.
UserIdint64falseАйди пользователя, который загрузил этот файл.




NamestringtrueОригинальное имя файла.
PathstringtrueВнутренний путь к файлу.
Sizeint64trueРазмер файла в байтах




ImageWidthint64falseШирина изображения.
ImageHeightint64falseВысота изображения




ContentTypestringtrueТип содержания файла.
CreatedAtTimestamptrueДата создания файла.

FileType

Перечисление типов файла

ЗначениеКомментарий
fileФайл или документ.
imageИзображение.

User

ПолеТипОбязательноеКомментарий
Idint64true
NamestringtrueИмя пользователя
PositionstringtrueДолжность пользователя
AvatarIdstringfalseАйди аватарки пользователя
Onlinebooltrue




CreatedAtTimestamptrue
UpdatedAtTimestamptrue
LoggedInAtTimestampfalse




DisplayNamestringtrueИмя, которое нужно показывать клиентам


Сервисы

Клиенты

Информация о текущем клиенте

ПараметрЗначениеКомментарий
Метод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
Запрос
ПолеТипОбязательноеКомментарий
TokenstringДаТокен внутренний сессии на сервере чата

Ответ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
Запрос
ПолеТипОбязательноеКомментарий
NamestringДаИмя клиента

Ответ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
Запрос
ПолеТипОбязательноеКомментарий
NamestringДаИмя клиента
ProjectIdint64ДаАйди проекта

ОтветClientAuth

Пример запроса:

{"Name": "John Doe", "ProjectId": 123}

Пример ответа:

{
  "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
Запрос
ПолеТипОбязательноеКомментарий
CredentialsstringДаЛюбая безопасная строка, по которой внешняя система сможет авторизовать пользователя.

Ответ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
Запрос
ПолеТипОбязательноеКомментарий
CredentialsstringДаЛюбая безопасная строка, по которой внешняя система сможет авторизовать пользователя.
ProjectstringДаНазвание проекта на английском языке.

Ответ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
Запрос
ПолеТипОбязательноеКомментарий
TokenstringДа

ОтветПустой

Регистрация GCM/FCM пуш-токена

ПараметрЗначениеКомментарий
МетодPOST
Путь/public/api/v1/push/channel/apns/:channelName
Запрос
ПолеТипОбязательноеКомментарий
TokenstringДа

Чаты

Информация о чате

ПараметрЗначениеКомментарии
Метод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
Запрос
ПараметрТипОбязательныйКомментарий
Limitint32ДаКоличество сообщений
MaxIdint64НетАйди последнего сообщения в прошлом ответе истории

Ответ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
Запрос
ПолеТипОбязательноеКомментарии
LocalIdint64ДаУникальное айди сообщения на стороне клиента, как правило, можно использовать UTC в миллисекундах.
PayloadChatMessagePayloadTypeДаТип сообщения.
TextstringЗависит от PayloadТекст сообщения.
FileIdstringЗависит от PayloadАйди загруженного файла.

ОтветПустойНовое сообщение придет в 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
Запрос
ПараметрТипОбязательноеКомментарий
sizeFileImageSizeДа

ОтветФайл с изображением в нужном размере

Информация о файле

ПараметрЗначениеКомментарий
Метод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-Typemultipart/form-data
Путь/public/api/v1/files/upload
Запрос
ПолеТипОбязательноеКомментарий
FileMultipart fileДа
TypeFileTypeДа

Ответ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
Запрос
ПолеТипОбязательноеКомментарий
FromIdint64НетАйди последнего полученного события
Limitint32НетМаксимальное количество событий, которое можно вернуть в одном сообщении

Сообщение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
Запрос
ПолеТипОбязательноеКомментарий
FromIdint64НетАйди последнего полученного события
Limitint32НетМаксимальное количество событий, которое можно вернуть в одном сообщении

Сообщение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
}
  • No labels