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, находит агента с указанным идентификатором и создает с ним диалог.
Ваш комментарий. Вики-синтаксис разрешён:
O H L B C
 
  • /var/www/html/wiki/data/pages/pd/develop/wsapi/chat.txt
  • Последние изменения: 2025/04/28 05:01
  • (внешнее изменение)