Элементы 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"
        }
    ]
}

В поле "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>"
        }
    ]
}

При нажатии клиент-приложение должно по найти/создать p2p чат и перейти в него, и послать в этот чат обычный fsubmit запрос:

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=<token>&online_key=<key>&ref=<ref>

где - значение поля "online_key" в push-сообщении