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, находит агента с указанным идентификатором и создает с ним диалог.
Обсуждение