chat api
====== api бэк входящее ======
===== Агенты (операторы) =====
==== Аутентификация ====
// вход в систему агента по логину и паролю
{
"agent": {
"signin": {
"login": "predeinay",
"password": "123"
}
}
}
// вход в систему по куки
{
"agent": {
"signin": {
"token" : "secretcookiehere"
}
}
}
==== Изменение статуса ====
// вход в систему агента по логину и паролю
// установка статуса агента
// 0 - работает, 1,2,3..etc все другие статусы
{
"agent": {
"status": 0
}
}
==== Получение сообщения ====
// сообщение от агента клиенту
// tid - код клиента
{
"agent": {
"msg": {
"tid": "148",
"dialogId" : 123,
"text": "главное не паниковать"
}
}
}
==== Запрос списка сообщений клиента ====
// Получение списка сообщений по tid c offset и limit (limit не обязательное)
{
"agent": {
"getMsgList": {
"tid": 148,
"offset": 0,
"limit": 50
}
}
}
==== Агент печатает или ушел из чата ====
//Агент печатает..
{
"agent": {
"typing": {
"tid": 123,
"isTyping": true
}
}
}
//Агент ушел из чата ( например ну другую вкладку)
{
"agent": {
"chatting": {
"isChatting": true
}
}
}
==== Агент закрыл диалог с клиентом ====
{
"agent": {
"closeDialog": {
"tid": 148
}
}
}
==== Агент ралогинился ====
{
"agent": {
"signout": true
}
}
===== Клиенты =====
==== Аутентификация ====
{
"client": {
"signin": {
"token": "secretapphere",
"queue": 1000
}
}
}
==== Получение сообщения ====
// сообщение от клиента (только если аутентифицирован)
// при первом сообщении попадает в ранее указанную очередь
{
"client": {
"msg": {
"text": "Сообщение от клиента"
}
}
}
==== Запрос истории сообщений ====
//Запрос истории сообщений с указанным клиентом
{
"client": {
"getMsgList": {
"offset": 0,
"limit": 50
}
}
}
==== Клиент закрыл чат / печатает ====
//Клиент печатает..
{
"client": {
"typing": {
"isTyping": true
}
}
}
//Клиент ушел из чата ( например ну другую вкладку)
{
"client": {
"chatting": {
"isChatting": true
}
}
}
==== выход клиента из системы====
// выход клиента из системы
{
"client": {
"signout": true
}
}
===== Работа с партнерскими заказами ====
// Запрос списка партнерских заказов
{
"agent":{
"getOrdersList":{
"tid" : "1724" // tid => account.device_id
}
}
}
====== api бэк исходящее ======
===== Агенты (операторы) =====
==== Сервер информирует агента об аутентификации агента ====
// вход в агента по логину и паролю
{
"agent": {
"signin": {
"ok" : true
}
}
}
==== Сервер информирует агента о логауте агента ====
// Выход агента из системы
{
"agent": {
"signout": {}
}
}
==== Сервер информирует агента о смене статуса агента ====
{
"agent": {
"status": 1
}
}
==== Сервер информирует агента о создании нового диалога с клиентом ====
// tid - token_id из таблицы client_tokens
{
"dialog": {
"create": {
"tid": 123,
"dialogId" : 123,
"phone": "9125212573",
"username" : "client.username",
"account_name" : "client.account_name",
"addr": [{
"address": "ул ленина 1 - 2",
"cnt_info": "Ук ромажка"
}],
"lastMsg" : "Последнее сообщение от этого клиента"
}
}
}
==== Сервер информирует агента о получении нового сообщения от клиента ====
{
"dialog": {
"msg": {
"tid": 123,
"dialog_id" : 123,
"text": "Hello world!",
"by": 1,
"atDate": "2017-01-01",
"atTime": "14:33:22"
}
}
}
==== Сервер информирует агента о закрытии диалога с клиентом ====
{
"dialog": {
"close": {
"tid": 123
}
}
}
==== Сервер информирует агента об изменении состояния клиента ====
{
"dialog": {
"user": {
"tid": 123,
"dialogId": 123,
"isTyping": false,
"isChatting": true
}
}
}
==== Сервер информирует агента о исторических сообщениях с клиентом ====
{
"dialog": {
"msgList": [{
"tid" : 123,
"text": "Hello world!",
"by": 1,
"atDate": "2017-01-01",
"atTime": "14:33:22"
},
{
"tid" : 123,
"text": "Hello world 2!",
"by": 1,
"atDate": "2017-01-01",
"atTime": "14:33:22"
}
]
}
}
===== Клиенты =====
==== Сервер информирует клиента об аутентификации ====
{
"client": {
"signin": {
"ok" : true
}
}
}
==== Сервер информирует клиента о логауте ====
{
"client": {
"signout": {}
}
}
==== Сервер информирует клиента о создании диалога с агентом ====
{
"dialog": {
"create": {
"fullname": "agent.fullname"
}
}
}
==== Сервер информирует клиента о получении нового сообщения от агента ====
{
"dialog": {
"msg": {
"text": "Hello world!",
"by": 1,
"atDate": "2017-01-01",
"atTime": "14:33:22"
}
}
}
==== Сервер информирует клиента о закрытии диалога с агентом ====
{
"dialog": {
"close": {}
}
}
==== Сервер информирует клиента о исторических сообщениях ====
{
"dialog": {
"msgList": [{
"tid" : 123,
"text": "Hello world!",
"by": 1,
"atDate": "2017-01-01",
"atTime": "14:33:22"
},
{
"tid" : 123,
"text": "Hello world 2!",
"by": 1,
"atDate": "2017-01-01",
"atTime": "14:33:22"
}
]
}
}
==== Сервер информирует клиента о изменении состояния агента ====
{
"dialog": {
"user": {
"isTyping": true
}
}
}
==== Работа с партнерскими заказами ====
// Сервер отправляет ответ на фронт
// {dialog: {getOrdersList: orders}}
{
"dialog": {
"getOrdersList":{// orders =>
"tid" : "1945",
"list" : [{
"request_id" : "1829"
"statusId" : "4"
"status" : "Выполнен. Требует подтверждения"
"statusColor" : "#3EAE32"
"partner_name" : "ТестовыйСубПартнер"
"sub_partner" : "32"
"email" : "mail@mail.com"
"name" : "СубпартнерТест Услуга"
"totalPrice" : "10010.00"
"price" : null
"quantity" : null
"payMethod" : "O"
"price_type" : "M"
"price_from" : null
"price_to" : null
"created_on_tz" : "2019-02-20T06:29:13.125Z"
"note" : null
"request_type" : "O"
"sub_partner_phone" : "9999999999"
}]
}
}
}
===== Переводы диалогов =====
==== Передача информации на интерфейс перевода ====
// Фронт запрашивает информацию передавая токен диалога и идентификатор агента, которому сервер должен отсылать информацию
{
"agent": {
"getInfoForTransfer": {
"tid":"2165",
"agentId":2
}
}
}
// При запуска устанавливаем таймер для ежесекундной отправки информации
QueueManager.toggleSwitch[`a${agentId}`] = timer;
// Бэк собирает информацию каждую секунду и отправляет информацию на фронт пока открыт интерфейс перевода
{
"dialog": {
"getInfoForTransfer": {
"queueList": [{
"queue_num": 9000,
"queue_name": "ЮИТ урал",
"queue_quntity_agent": 0 // если параметр 0, перевод в очередь невозможен, т.к. там нет свободных агентов
}]
"agentList": [{
"agent_id": 1,
"fullname": "test testovich",
"max_chat_count": 10,
"chat_count": 1,
"status": 0,
"queues": [9000, 9100, 9200] // массив доступных очередей
}]
}
}
// При закрытии интерфейса перевода отключаем сбор информации
{"agent": {
"disableToogleSwitch": {
"agentId":2
}
}
}
==== Перевод в другую очередь ====
{
"agent":{
"transferToQueue":{
"curQueue":9000,
"newQueue":9100,
"tid":"t2165",
"agentId":1
}
}
}
// Удаляем клиента из текущей очереди, добавляем в новую
// Если текущая очередь и новая совпадает (перевод в свою очередь), алгоритм другой - просто пытаемся найти любого другого агента, исключая того агента, который осуществил перевод
==== Перевод на другого оператора ====
{
"agent": {
"transferToAgent": {
"curQueue":9100,
"tid":"t2165",
"agentId":2,
"newAgentId":1
}
}
}
// Если новый агент присутствует в текущей очереди клиента - переводим на него диалог
// Если агент обслуживает другие очереди, смотрим какие есть у него очереди, переводим диалог в первую возможную очередь и находим нужного нам агента
// Найти нужного агента помогает поле nextAgentId и расширенный алгоритм поиска, который в случае перевода сначала смотрит это поле и если оно есть и не 0, находит агента с указанным идентификатором и создает с ним диалог.