SMeetMini Apps

SMeet Mini Apps

Публикация

SMeet публикует мини-приложение, только когда оба его адреса подтверждены как ваши, встраивать их может только SMeet, указаны ссылки на политику и поддержку и приняты правила. Затем проверяющий проходит приложение.

Адреса#

У мини-приложения два адреса, страницы, которые открывают люди: адрес рабочей версии и адрес тестовой. Их origin (схема, хост и порт) подчиняются правилам:

  • https, порт 443 или 8443, без имени пользователя и пароля в адресе;
  • имя хоста, а не IP-адрес; до 100 символов, в ASCII (международное имя в форме xn--);
  • не на scrile.com и не на его поддоменах: они принадлежат самому SMeet;
  • у рабочей и тестовой версии разные origin, и один origin принадлежит только одному мини-приложению.

Сам адрес может иметь любой путь, например https://forms.example.com/app/. Изменённый адрес нужно снова пройти через проверку домена и встраивания.

Подтверждение домена#

Для каждого origin разместите токен подтверждения приложения из раздела Домены и встраивание на экране мини-приложения:

Text
GET https://forms.example.com/.well-known/smeet-mini-app.txt

HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8

smeet-mini-app-Fy3xK0wQm9PZ2s7vTn4cLbJ8hR5dW1eGqA6uYt2N
  • Ответ 200, токен на отдельной строке; другие строки тоже могут быть. SMeet читает не больше 4 КиБ.
  • Без перенаправлений: SMeet за ними не следует. На весь запрос 10 секунд.
  • Нажмите Проверить, когда файл на месте. Токен не секрет; оставьте файл, пока приложение существует, потому что SMeet может проверить снова.

Встраивание#

Каждая страница приложения отдаёт заголовок, который разрешает показывать её во фрейме только SMeet:

HTTP
Content-Security-Policy: frame-ancestors https://messenger.scrile.com

Если приложение показывает свои страницы в собственных фреймах, добавьте 'self': браузеры проверяют заголовок по всем предкам фрейма, и без него ваш вложенный фрейм не загрузится.

HTTP
Content-Security-Policy: frame-ancestors 'self' https://messenger.scrile.com

SMeet читает заголовки адреса каждой версии, не следуя за перенаправлением, и записывает один из четырёх результатов:

РезультатЗначитЧто исправить
okвстраивать страницу может только SMeet и само приложение
missingвстраивание ничем не ограничено: нет ни frame-ancestors, ни X-Frame-Options, или адрес не отвечает 2xxотдавать заголовок выше
too_wideразрешён и другой источник, например https: или *разрешить только SMeet
refusedSMeet не может встроить страницу: frame-ancestors 'none', один 'self', X-Frame-Options: DENY или SAMEORIGINразрешить SMeet

Для отправки на проверку и публикации нужен ok у обеих версий; для тестового запуска результат только показывается вам. Решает frame-ancestors, если он есть; X-Frame-Options учитывается только без него.

Ваш origin принадлежит приложению#

Мост SMeet доверяет любому документу origin вашего приложения: вложенному фрейму того же origin, другой странице, файлу, отданному там. Такой документ мог бы выполнить вход человека, отправить боту и открыть ссылки от его имени. Поэтому origin мини-приложения не раздаёт пользовательский и чужой HTML (Правила для авторов):

  • файлы людей только как вложения с sandbox или с другого origin (Файлы);
  • никаких страниц, собранных из текста людей как разметка: вставляйте их текст через textContent;
  • никаких чужих виджетов, скриптов и рекламы, за которые вы не ответили бы как за свой код; всё, что вы подключаете, работает с полномочиями вашего приложения;
  • собственный строгий Content-Security-Policy, например default-src 'none'; script-src 'self'; style-src 'self'; img-src 'self'; connect-src 'self'; form-action 'none'; base-uri 'none'; object-src 'none'; frame-ancestors https://messenger.scrile.com, как в примерах.

Cookie#

Не стройте мини-приложение на cookie. В окне SMeet ваша страница является фреймом другого сайта: браузеры считают её cookie сторонними, а Safari их блокирует. Вход вместо этого использует попытку входа и сессию в памяти страницы (Почему без cookie). Страница может хранить черновик в localStorage под ключом с идентификатором человека после входа, чтобы двое людей на одном устройстве не видели черновики друг друга.

Среды#

РабочаяТестовая
Запускаетопубликованную конфигурациючерновик, если он есть (в том числе на проверке и после отказа), иначе опубликованную
Открываютвсе, кому виден ботвладелец, тестировщики, принявшие приглашение, проверяющие открытой заявки
Ссылкаhttps://messenger.scrile.com/u/<bot>?startapp=<param>та же с &env=test
Кнопка mini_appоткрывает еёникогда не открывает
environment.deployment, environment обмена и mini_app_submissionproductiontest
  • У каждой среды свои origin, ключи, сессии и отправки; код одной никогда не обменивается ключом другой.
  • Приглашайте до 20 тестировщиков по имени пользователя в разделе Тестировщики; человек становится тестировщиком, когда примет приглашение в своём SMeet.
  • Сохранение черновика, меняющее его origin, данные, возможности или владельца, закрывает открытые тестовые окна; публикация такого изменения закрывает рабочие окна. Люди открывают приложение снова и видят новый экран согласия.
  • Держите тестовые результаты вне настоящей работы: тестовая анкета не должна создавать настоящую заявку.

Проверка#

Отправить на проверку доступно, когда:

  • origin обеих версий подтверждены, а встраивание у обеих ok;
  • указаны ссылки на вашу политику конфиденциальности и на поддержку;
  • возрастная категория не выше разрешённой (сейчас 4+);
  • вы приняли текущую версию Правил для авторов.

Мини-приложения публичного пространства SMeet проверяют модераторы SMeet; мини-приложения организации проверяют её владелец и администраторы, и открыть их могут только её участники. Проверяющий открывает тестовую версию черновика, проходит её основной сценарий и проверяет, что в ней нет продажи цифровых товаров и ссылок на покупки, что ваша политика называет данные из SMeet и контакт для удаления и что содержание соответствует категории. Отказ называет номера нарушенных правил. Пока заявка на проверке, черновик менять нельзя; Отозвать заявку снова делает его редактируемым.

После публикации любое изменение настроек создаёт новый черновик со своей проверкой; пока он не опубликован, люди видят опубликованную версию. Существенное изменение самого сайта тоже требует новой проверки (Правила для авторов).

Правила#

Правила для авторов входят в публикацию: никаких цифровых товаров и платежей, содержание в пределах категории, данные из SMeet только для заявленной цели, политика конфиденциальности и поддержка, собственный origin, встраивание только в SMeet, никакого чужого HTML на origin и новая проверка при существенных изменениях. Приложение, которое их нарушает, SMeet может заблокировать.

  • Ссылка https://messenger.scrile.com/u/<bot_username>?startapp=<param> открывает рабочую версию; param до 64 символов A-Z a-z 0-9 _ - и может быть пустым. Для тестовой версии добавьте &env=test.
  • Кнопка mini_app открывает его из сообщения бота (Кнопка mini_app).
  • Опубликованные мини-приложения публичного пространства SMeet перечислены в каталоге https://messenger.scrile.com/mini-apps/, с иконками (Иконка в каталоге). Мини-приложений организаций там нет.

Собственные мини-приложения SMeet#

Приложения по адресу https://messenger.scrile.com/mini-apps/ делает сам SMeet, и они часть SMeet. Их адреса авторам недоступны, а правила адресов, подтверждения и встраивания для них заменяет собственная проверка их кода в SMeet.