General > Русский (ru)
Схема подключения клиента
(1/1)
stdex:
Здравствуйте. Стоит задача - написать нативный пользовательский клиент для 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
}
}]
}]
}
--- End quote ---
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
}
}]
}]
}
--- End quote ---
4) Далее каждые N секунд отправляет POST запросы на тот же http://localhost/mibew/index.php/thread/update и формируются json'ы
Удалось выявить функции: update, updateMessages, result, close
Вопросы:
1. Подскажите, в правильном ли направлении я двигаюсь? Просто на 3 запрос не приходит ответа...
2. Может есть документация по формату обмена сообщениями в этих json'ах? Какие функции есть, какие параметры что означают?
3. Может быть есть способ решить задачу проще чем я собираюсь?
Dmitriy Simushev:
--- Quote ---1. Подскажите, в правильном ли направлении я двигаюсь? Просто на 3 запрос не приходит ответа...
--- End quote ---
В принципе, Вы двигаетесь в правильном направлении. Что касается 3-го запроса, то это ответ на один из предыдущих пакетов. Связь между пакетами запроса и ответа происходит через поле token. Вообще обмен информацией между ядром Mibew и окном диалога построен по модели RPC, правда довольно своеобразной и учитывающей асинхронность и асимметричность взаимодействия.
--- Quote ---2. Может есть документация по формату обмена сообщениями в этих json'ах? Какие функции есть, какие параметры что означают?
--- End quote ---
К сожалению, никакой информации по формату обмена пока нет. Возможно она появится несколько позже, однако с текущей загруженностью гарантировать я ничего не могу.
--- Quote ---3. Может быть есть способ решить задачу проще чем я собираюсь?
--- End quote ---
Я бы сделал иначе: создал бы плагин реализующий минимально необходимое внешнее API (+ возможно логику авторизации) и уже с ним взаимодействовал бы на уровне Android приложения. Если Вы планируете разрабатывать клиент с открытым исходным кодом (на условиях одной из свободных лицензий), то я мог бы оказать некоторую помощь с разработкой плагина для Mibew.
stdex:
--- Quote from: Dmitriy Simushev on June 29, 2015, 10:23:02 AM ---Я бы сделал иначе: создал бы плагин реализующий минимально необходимое внешнее API (+ возможно логику авторизации) и уже с ним взаимодействовал бы на уровне Android приложения. Если Вы планируете разрабатывать клиент с открытым исходным кодом (на условиях одной из свободных лицензий), то я мог бы оказать некоторую помощь с разработкой плагина для Mibew.
--- End quote ---
С удовольствием принял бы вашу помощь. В свою очередь обязуюсь выложить все наработки в github.
Для конкретно моих задач нужен функционал (планируется реализация чат-клиента только посетителя):
1) Открытие чат-сессии.
2) Запрос-поддержка открытой чат сессии.
3) Получение сообщений (например, отправлять при запросе только последние непрочитанные сообщения, отмечать в обратном запросе id полученных сообщений).
4) Отправка сообщений.
5) Закрытие чат-сессии.
faf:
Встряну, пожалуй, в диалог.
--- Quote from: stdex on July 01, 2015, 10:29:44 AM ---С удовольствием принял бы вашу помощь. В свою очередь обязуюсь выложить все наработки в github.
--- End quote ---
А эти наработки уже есть? Или под принятием помощи имеется в виду "напишите за меня код, а я его выложу на Github"? ;D
Dmitriy Simushev:
@stdx, каркас плагина для внешнего API я опубликовал: https://github.com/Mibew/external-api-plugin. Он пока не делает ничего, но поможет понять направление развития и логику API.
Кроме того, раз уж речь шла о свободном клиенте под Android, Вы могли бы разместить наработки по нему в открытом доступе (скажем, на GitHub). ;)
Navigation
[0] Message Index
Go to full version