Модуль для работы с Web-чатом

Понятия

SFE - интерфейс сайта, загруженный в браузере. SBE - серверная часть сайта, выполняющая авторизацию пользователя по предоставленным SFE данным. CFE - интерфейс вебчата, загруженный в браузере. CBE - серверная часть web-чата, зыполняющая авторизацию пользователя. SAC - сервис обмена авторизационных данных на идентификационные данные. channel_token - уникальный идентификатор канала в CBE. site_token - уникальный идентификатор для авторизации запросов от CBE к SBE. session_token - уникальный идентификатор сессии чата, выданный CBE. auth_token - Уникальный идентификатор сессии пользователя SFE, выданный SBE.

Подключение

Сначала пользователь заходит на портал / сайт (SFE) и проходит авторизацию. Браузер получает от SBE идентификатор сессии.

Затем SFE загружает CFE. Среди данных передается уникальный токен канала channel_token. Находится в файле chat.webchat.{lk_domain},json. После загрузки CFE получает новую сессию / продлевает текущую у CBE. Запрос вида POST https://{CBE}/api/omni/

{
    "obj": "DOCWebChat",
    "action": "get_session",
    "params": {
        "channel_token": channel_token
    },
    "action_id": "some id"
}

При получении запроса CBE проверяет доступность сервиса SAC, выполняя запрос:

{
    "obj": "WebChat",
    "action": "ping",
    "params": {
        "site_token": site_token
    }
}

В случае прохождения теста SBE формирует ответ:

{
    "action": "ping",
    "obj": "WebChat",
    "code": 200
}

После завершения теста CBE формирует ответ:

{
    "action": "get_session",
    "action_id": "some id",
    "obj": "DOCWebChat",
    "code": 200,
    "notifies": null,
    "body": {
        "session_token": "some  token"
    }
}

После получения session_token выполняется авторизация. Запрос:

 {
    "obj": "DOCWebChat",
    "action": "auth",
    "params": {
        "session_token": session_token,
        "auth_token": auth_token
    },
    "action_id": "some id"
}

При выполении авторизации CBE отправляет запрос к SBE:

{
    "action": "get_user_data",
    "action_id": str(uuid.uuid4()),
    "obj": "WebChat",
    "params": {
        "auth_token": auth_token,
        "site_token": site_token
     }
}

SBE проверяет наличие сессии auth_token и, в случае прохождения валидации, отвечает:

{
    "action": "auth",
    "obj": "WebChat",
    "code": 200,
    "body": {
        "ident": "1234567890",
        "name": "Алексей",
        "surname": "Паневин",
        "phone": "79066800404",
        "email": "a@runtel.ru"
    }
}

CBE проверяет полученные данные, находит запись с ident или создает новую. Далее следует ответ для CFE:

{
    "action": "auth",
    "action_id": "some id",
    "obj": "DOCWebChat",
    "code": 200,
    "notifies": None
}

Затем CBE выполняет подключение к CBE, используя WebSocket.