Mibew Messenger Community
General => Support => Русский (ru) => Topic started by: stdex 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:
{
"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())
От сервера приходит что-то вроде:
{
"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. Может быть есть способ решить задачу проще чем я собираюсь?
-
1. Подскажите, в правильном ли направлении я двигаюсь? Просто на 3 запрос не приходит ответа...
В принципе, Вы двигаетесь в правильном направлении. Что касается 3-го запроса, то это ответ на один из предыдущих пакетов. Связь между пакетами запроса и ответа происходит через поле token. Вообще обмен информацией между ядром Mibew и окном диалога построен по модели RPC, правда довольно своеобразной и учитывающей асинхронность и асимметричность взаимодействия.
2. Может есть документация по формату обмена сообщениями в этих json'ах? Какие функции есть, какие параметры что означают?
К сожалению, никакой информации по формату обмена пока нет. Возможно она появится несколько позже, однако с текущей загруженностью гарантировать я ничего не могу.
3. Может быть есть способ решить задачу проще чем я собираюсь?
Я бы сделал иначе: создал бы плагин реализующий минимально необходимое внешнее API (+ возможно логику авторизации) и уже с ним взаимодействовал бы на уровне Android приложения. Если Вы планируете разрабатывать клиент с открытым исходным кодом (на условиях одной из свободных лицензий), то я мог бы оказать некоторую помощь с разработкой плагина для Mibew.
-
Я бы сделал иначе: создал бы плагин реализующий минимально необходимое внешнее API (+ возможно логику авторизации) и уже с ним взаимодействовал бы на уровне Android приложения. Если Вы планируете разрабатывать клиент с открытым исходным кодом (на условиях одной из свободных лицензий), то я мог бы оказать некоторую помощь с разработкой плагина для Mibew.
С удовольствием принял бы вашу помощь. В свою очередь обязуюсь выложить все наработки в github.
Для конкретно моих задач нужен функционал (планируется реализация чат-клиента только посетителя):
1) Открытие чат-сессии.
2) Запрос-поддержка открытой чат сессии.
3) Получение сообщений (например, отправлять при запросе только последние непрочитанные сообщения, отмечать в обратном запросе id полученных сообщений).
4) Отправка сообщений.
5) Закрытие чат-сессии.
-
Встряну, пожалуй, в диалог.
С удовольствием принял бы вашу помощь. В свою очередь обязуюсь выложить все наработки в github.
А эти наработки уже есть? Или под принятием помощи имеется в виду "напишите за меня код, а я его выложу на Github"? ;D
-
@stdx, каркас плагина для внешнего API я опубликовал: https://github.com/Mibew/external-api-plugin (https://github.com/Mibew/external-api-plugin). Он пока не делает ничего, но поможет понять направление развития и логику API.
Кроме того, раз уж речь шла о свободном клиенте под Android, Вы могли бы разместить наработки по нему в открытом доступе (скажем, на GitHub). ;)