Модуль для работы с 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.