Элементы Actions
Actions
Динамически создаваемые элементы интерфейса приложения (в т.ч. элементы fml-форм) при их актвации пользователем могут инициировать действия, описанные c помощью actions-атрибута:
Значением атрибута actions является массив обьектов, которые описывают действия, выполняемые в порядке следования в массиве.
Каждый обьект одержит обязательное поле: oper - определяющее выполняемую операцию, обязательное поле. Оста
oper extCall (fml only)
Выполнить вызов внешнего сервера с параметрами (опционально), введёнными в фроме. При ответе сервера форма с содержимым ответа отправляется обычным способом
Пример:
{
"actions":
[
{
"oper":"extCall",
"url":"<url to external get request>",
"form_data": true
}
]
}
form_data - признак, следует ли отправлять в запросе поля формы. Поля отправяляются как get-параметры в формате <имя поля>=<значение>&...
oper goTo
Отправить пользователя в указанный интерфейс приложения. Обязательным атрибутом является "to", который принимает значения:
contacts|dialogs|profile|settings
В случае, если action описан в fml-форме, она должна быть отправлена на сервер перед переходом
Пример:
{
"actions":
[
{
"oper":"goTo",
"to":"<to>"
}
]
}
Возможные значения to
- contacts: список контактов
- dialogs: список диалогов
- profile: страницу профиля пользователя
- settings: страница настроек
- contact: страница текущего контакта (только в p2p чате)
oper addUser
Добавить пользователя в текущий чат: открыть диалог выбора пользователя и по результату добавить выбранного (выбранных)
Если текущий чат p2p - будет создан новый, групповой чат
Пример:
{
"actions":
[
{
"oper":"addUser"
}
]
}
oper viewLink
В поле "link" передается веб ссылка, начиная с http/https, поле обязательно. Открываем стандартный диалог выбора приложений для открытия ссылки, если таковых несколько. Если одно, открываем напрямую, если отсутствует уведомляем об отсутствии.
Пример:
{ "actions" : [ { "oper":"viewLink","link":"<link>" } ] }
oper sendMsg
Открыть окно ввода текста и введённый текст отправить сообщением в текущий чат
Пример:
{
"actions":
[
{
"oper":"sendMsg"
}
]
}
oper sendMedia
Открыть окно выбора медиа-контента (cпецифическое для типа контента и платформы) и выбранный контент отправить в текущий чат.
Обязательное поле type определяет тип контента. Варианты: sticker, file, photo, video, location
Пример:
{
"actions":
[
{
"oper":"sendMedia",
"type":"<type>"
}
]
}
oper scanCard: scan card by reader (fml only)
При активации элемента с этим oper, показываем диалог сканирования, обращаемся к ридеру, при успешном сканировании строку к номером карты помещаем в поле "card" json-структуры, которую отправляем на серврер как model формы. Остальные ранее введённые данные этой формы также отправляются в этой структуре аналогично обычному submit формы.
Пример:
{
"actions":
[
{
"oper":"scanCard"
}
]
}
oper callPhone
В поле "phone" передается телефон в международном формате, без плюса, поле обязательно. Открываем стандартный диалог телефонного вызова с этим номером
Пример:
{
"actions":
[
{
"oper":"callPhone",
"phone":"380501234567"
}
]
}
oper callRobot
Вызывается робот в текущем чате (чате в котором форма находится).
В поле "class" передается класс робота который вызывается, поле обязательно.
Если авзывается из формы, при нажатии в model посылаются все те же элементы что и при нажатии на обычную кнопку этой формы.
Пример:
{
"actions":
[
{
"oper":"callRobot",
"class":"<robotClass>",
"data":
{
"name":"value"
}
}
]
}
Данные из обьекта "data" передаются в model вместе с данными формы. Если имена полей совпадают с именами полей в форме данные из "data" считаются более приоритетными
При нажатии клиент-приложение должно послать в этот чат обычный fsubmit запрос:
POST /fsubmit
{
"sid": "<sid>",
"chatId": "<chatId>",
"model": {},
"class": "<robotClass>"
}
oper callRobotInP2PChat
В поле "userId" передается UserId пользователя или компании в p2p чат с которым нужно перейти, поле обязательно.
В поле "class" передается класс робота который вызывается, поле обязательно.
При нажатии в model посылаются все те же элементы что и при нажатии на обычную кнопку.
Пример:
{
"actions":
[
{
"oper": "callRobotInP2PChat",
"userId": "<userId>",
"class": "<robotClass>"
}
]
}
При нажатии клиент-приложение должно по
POST /fsubmit
{
"sid": "<sid>",
"chatId": "<chatId>",
"model": {},
"class": "<robotClass>"
}
oper startP2PChat
В поле "userId" передается UserId пользователя или компании в p2p чат с которым нужно перейти, поле обязательно.
Пример:
{
"actions":
[
{
"oper": "startP2PChat",
"userId": "<userId>"
}
]
}
oper selectUser (fml only)
При выборе элемента в поле action которого указан этот oper нужно открыть нативный диалог выбора пользователей из списка контактов.
В диалоге отображаются только зарегистрированные пользователи при "reg":true иначе - все пользователи.
При выборе конкретного пользователя его номер телефона помещается в поле формы, имя которого задано в атрибуте "to".
Если "autosubmit":true форма отправляется на сервер сразу после того, как клиент сделал выбор в списке контактов, иначе - после выбора форма доступна для работы и отправки на сервер обычным способом (кнопкой в форме)
Например:
{
"actions":
[
{
"oper": "selectUser",
"reg": true,
"to": "<field name>",
"autosubmit":true
}
]
}
oper switchView (fml only)
При выборе элемента в поле action которого указан этот oper нужно скрыть элементы, name которых указаны в массиве "hide", и показать элементы, name которых указаны в массиве "show". Т.е. первой группе должен быть назначен "state":"gone" а второй - "state":"visible" выполнена перерисовка формы
{
"actions":
[
{
"oper": "switchView",
"hide":
[
elem1, elem2
],
"show":
[
elem3, elem4
]
}
]
}
oper coords (fml only)
При выборе элемента в поле action которого указан этот oper нужно открыть окно с картой (google maps), при выборе точки на карте значение поля val должно быть равно занчению широты и долготы с разделителем ";" а поле title должно быть равно адресу выбранной точки.
{
"actions":
[
{
"oper": "coords"
}
]
}
oper qrScan
При выборе элемента в поле action которого указан этот oper нужно вызвать окно сканирования qr-кода и отсканированный результат отправить роботу, указанному в поле "class". model отправляемой формы должна содержать результат распознавания кода в поле "qr". Форму результата отправляем в чат указанный в поле "chatId".
Например:
{
"actions":
[
{
"oper": "qrScan",
"class":"<robotClass>",
"chatId":"<chatId>"
}
]
}
В результает отправляем форму:
{
"sid": "<sid>",
"chatId": "<chatId>",
"model": {
"qr":"<value>"
},
"class": "<robotClass>"
}
Using push
Если для клиента есть сообщения, а он не вычитывает их, сервер может отправить клиенту push-сообщение по системному каналу, в зависимости от платформы клиента
Также сервер может спросить клиента в онлайне он или нет.
Push-сообщение представляет собой json-обьект вида:
{
"status": "wake_up",
"online_key": "<key>",
"ref":"<ref>"
}
Оба поля опциональны.
При получении "status":"wake_up" нужно поднять comet-канал для получения сообщений. "" передавать в коммет
При получении "online_key"
нужно послать синхронный запрос вида:
POST /online?udid=<token>
&online_key=<key>
&ref=<ref>
где