Author Topic: Схема подключения клиента  (Read 9012 times)

0 Members and 1 Guest are viewing this topic.

stdex

  • Jr. Member
  • **
  • Posts: 2
Схема подключения клиента
« on: June 28, 2015, 12:16:26 AM »
Здравствуйте. Стоит задача - написать нативный пользовательский клиент для Mibew под Android.
Т.к. веб-API нету стал сниферить пакеты. На данный момент дошел  до следующей схемы:

1) GET http://localhost/mibew/index.php/b?i=simple&lang=ru
Ставим куки: MibewSessionID и mibew_locale

2) GET http://localhost/mibew/index.php/chat?locale=ru&url=http://localhost/&referrer=
Ставим куку: MIBEW_UserID

3) POST http://localhost/mibew/index.php/thread/update
Отправляем форму (application/x-www-form-urlencoded; charset=UTF-8) с полем data с содержимым json закодированным в urlencode:
Quote
{
    "signature": "",
    "proto": "1.0",
    "async": true,
    "requests": [{
        "token": "wnd143427929242821",
        "functions": [{
            "function": "processSurvey",
            "arguments": {
                "references": {},
                "return": {
                    "next": "next",
                    "options": "options"
                },
                "groupId": 0,
                "name": "Посетитель",
                "info": null,
                "email": null,
                "message": "",
                "referrer": "http://localhost/ ",
                "threadId": null,
                "token": null
            }
        }]
    }]
}
token формируется по алгоритму "wnd"+(new Date()).getTime()+Math.round(50 * Math.random())
От сервера приходит что-то вроде:
Quote
{
    "signature": "",
    "proto": "1.0",
    "async": true,
    "requests": [{
        "token": "wnd143427798604428",
        "functions": [{
            "function": "result",
            "arguments": {
                "next": "chat",
                "options": {
                    "messageForm": {
                        "ignoreCtrl": false
                    },
                    "links": {
                        "mail": "\/mibew\/index.php\/chat\/6\/10036732\/mail",
                        "chat": "http:\/\/localhost\/mibew\/index.php\/chat\/6\/10036732"
                    },
                    "windowsParams": {
                        "mail": {
                            "height": 254,
                            "width": 603,
                            "resizable": false
                        },
                        "history": {
                            "width": 720,
                            "height": 560,
                            "resizable": true
                        }
                    },
                    "thread": {
                        "id": "6",
                        "token": 10036732,
                        "agentId": 0,
                        "userId": "557d5848060b67.99927082"
                    },
                    "page": {
                        "title": "Live Support",
                        "company": {
                            "name": "Your Company",
                            "chatLogoURL": ""
                        },
                        "mibewHost": "http:\/\/mibew.org"
                    },
                    "user": {
                        "name": "\u041f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u044c",
                        "canChangeName": true,
                        "defaultName": false,
                        "canPost": true,
                        "isAgent": false
                    },
                    "avatar": ""
                },
                "threadId": null,
                "token": null,
                "references": [],
                "return": [],
                "errorCode": 0
            }
        }]
    }]
}

4) Далее каждые N секунд отправляет POST запросы на тот же http://localhost/mibew/index.php/thread/update и формируются json'ы
Удалось выявить функции: update, updateMessages, result, close

Вопросы:
1. Подскажите, в правильном ли направлении я двигаюсь? Просто на 3 запрос не приходит ответа...
2. Может есть документация по формату обмена сообщениями в этих json'ах? Какие функции есть, какие параметры что означают?
3. Может быть есть способ решить задачу проще чем я собираюсь?

Dmitriy Simushev

  • Moderator
  • Native
  • *****
  • Posts: 345
Re: Схема подключения клиента
« Reply #1 on: June 29, 2015, 10:23:02 AM »
Quote
1. Подскажите, в правильном ли направлении я двигаюсь? Просто на 3 запрос не приходит ответа...

В принципе, Вы двигаетесь в правильном направлении. Что касается 3-го запроса, то это ответ на один из предыдущих пакетов. Связь между пакетами запроса и ответа происходит через поле token. Вообще обмен информацией между ядром Mibew и окном диалога построен по модели RPC, правда довольно своеобразной и учитывающей асинхронность и асимметричность взаимодействия.

Quote
2. Может есть документация по формату обмена сообщениями в этих json'ах? Какие функции есть, какие параметры что означают?

К сожалению, никакой информации по формату обмена пока нет. Возможно она появится несколько позже, однако с текущей загруженностью гарантировать я ничего не могу.

Quote
3. Может быть есть способ решить задачу проще чем я собираюсь?

Я бы сделал иначе: создал бы плагин реализующий минимально необходимое внешнее API (+ возможно логику авторизации) и уже с ним взаимодействовал бы на уровне Android приложения. Если Вы планируете разрабатывать клиент с открытым исходным кодом (на условиях одной из свободных лицензий), то я мог бы оказать некоторую помощь с разработкой плагина для Mibew.

stdex

  • Jr. Member
  • **
  • Posts: 2
Re: Схема подключения клиента
« Reply #2 on: July 01, 2015, 10:29:44 AM »
Я бы сделал иначе: создал бы плагин реализующий минимально необходимое внешнее API (+ возможно логику авторизации) и уже с ним взаимодействовал бы на уровне Android приложения. Если Вы планируете разрабатывать клиент с открытым исходным кодом (на условиях одной из свободных лицензий), то я мог бы оказать некоторую помощь с разработкой плагина для Mibew.

С удовольствием принял бы вашу помощь. В свою очередь обязуюсь выложить все наработки в github.

Для конкретно моих задач нужен функционал (планируется реализация чат-клиента только посетителя):
1) Открытие чат-сессии.
2) Запрос-поддержка открытой чат сессии.
3) Получение сообщений (например, отправлять при запросе только последние непрочитанные сообщения, отмечать в обратном запросе id полученных сообщений).
4) Отправка сообщений.
5) Закрытие чат-сессии.
« Last Edit: July 01, 2015, 10:38:47 AM by stdex »

faf

  • Mibew Staff Member
  • Native
  • *****
  • Posts: 951
    • Mibew Messenger
Re: Схема подключения клиента
« Reply #3 on: July 03, 2015, 11:17:10 AM »
Встряну, пожалуй, в диалог.

С удовольствием принял бы вашу помощь. В свою очередь обязуюсь выложить все наработки в github.

А эти наработки уже есть? Или под принятием помощи имеется в виду "напишите за меня код, а я его выложу на Github"?  ;D

Dmitriy Simushev

  • Moderator
  • Native
  • *****
  • Posts: 345
Re: Схема подключения клиента
« Reply #4 on: July 07, 2015, 10:02:07 AM »
@stdx, каркас плагина для внешнего API я опубликовал: https://github.com/Mibew/external-api-plugin. Он пока не делает ничего, но поможет понять направление развития и логику API.

Кроме того, раз уж речь шла о свободном клиенте под Android, Вы могли бы разместить наработки по нему в открытом доступе (скажем, на GitHub).  ;)