SMeet Mini Apps
Публикация
SMeet публикует мини-приложение, только когда оба его адреса подтверждены как ваши, встраивать их может только SMeet, указаны ссылки на политику и поддержку и приняты правила. Затем проверяющий проходит приложение.
Адреса#
У мини-приложения два адреса, страницы, которые открывают люди: адрес рабочей версии и адрес тестовой. Их origin (схема, хост и порт) подчиняются правилам:
https, порт 443 или 8443, без имени пользователя и пароля в адресе;- имя хоста, а не IP-адрес; до 100 символов, в ASCII (международное имя в форме
xn--); - не на
scrile.comи не на его поддоменах: они принадлежат самому SMeet; - у рабочей и тестовой версии разные origin, и один origin принадлежит только одному мини-приложению.
Сам адрес может иметь любой путь, например https://forms.example.com/app/. Изменённый адрес нужно снова пройти через проверку домена и встраивания.
Подтверждение домена#
Для каждого origin разместите токен подтверждения приложения из раздела Домены и встраивание на экране мини-приложения:
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:
Content-Security-Policy: frame-ancestors https://messenger.scrile.comЕсли приложение показывает свои страницы в собственных фреймах, добавьте 'self': браузеры проверяют заголовок по всем предкам фрейма, и без него ваш вложенный фрейм не загрузится.
Content-Security-Policy: frame-ancestors 'self' https://messenger.scrile.comSMeet читает заголовки адреса каждой версии, не следуя за перенаправлением, и записывает один из четырёх результатов:
| Результат | Значит | Что исправить |
|---|---|---|
ok | встраивать страницу может только SMeet и само приложение | |
missing | встраивание ничем не ограничено: нет ни frame-ancestors, ни X-Frame-Options, или адрес не отвечает 2xx | отдавать заголовок выше |
too_wide | разрешён и другой источник, например https: или * | разрешить только SMeet |
refused | SMeet не может встроить страницу: 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_submission | production | test |
- У каждой среды свои 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.