Создание мини-аппа
Назначение документа
В данном документе описано создание мини-аппа в VK Teams с использованием библиотеки VK Teams Bridge.
Чтобы создать мини-апп, вам потребуется:
- Приложение с подключенной библиотекой VK Teams Bridge. Для успешной загрузки приложения достаточно одной HTML-страницы с подключенной библиотекой.
- Собственный сервер, который будет раздавать статический контент приложения через Nginx с самоподписанным сертификатом.
- Открытый домен, по которому будет доступно приложение.
- Самоподписанный сертификат для вашего домена.
- Доступ к VK Teams, чтобы зарегистрировать приложение.
Подробное описание создания мини-аппа представлено ниже.
Документ предназначен для использования администраторами организации.
Дополнительная документация
Общая информация о мини-аппах — в документе описана общая функциональность мини-аппов в VK Teams.
Библиотека VK Teams Bridge — в документе описаны методы взаимодействия мини-аппа с нативным клиентом VK Teams.
Архитектура и описание системы — в документе представлена информация о сервисах VK Teams, обеспечивающих функциональность мини-аппов. Не является частью публичной документации, обратитесь к представителю VK Tech, чтобы ознакомиться с документом.
Шаг 1. Создайте приложение
-
Создайте директорию для проекта и скопируйте в нее файл с библиотекой VK Teams Bridge.
-
Создайте в директории файл index.html со следующим содержимым:
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <div>Hello world</div> </body> <script> console.log('init') </script> <script src="./package/dist/iife/index.min.js"></script> # В теге src укажите путь до директории с файлом библиотеки VK Teams Bridge <script> window.VKTBridge.send('LoadingCompleted', { ok: true }) .then((bridgeResponse) => { console.log({ bridgeResponse }); }) .catch((bridgeError) => { console.log({ bridgeError }); }); </script> </html>
-
Откройте в браузере index.html и убедитесь, что на странице есть Hello world. Далее перейдите в консоль разработчика и убедитесь, что нет ошибок подключения библиотеки, и в объекте Window есть VK Teams Bridge:
Шаг 2. Создание сервера
Для подключения мини-аппа нужен собственный сервер, который будет раздавать статический контент приложения. На этот сервер нужно загрузить собранное приложение и самоподписанный сертификат для домена. Затем необходимо установить на сервере Nginx и настроить его конфигурацию так, чтобы он раздавал контент и использовал сертификат.
Далее в качестве примера мы рассмотрим создание сервера на мощностях VK Cloud. Если у вас уже есть собственный сервер, вы можете использовать его для раздачи статического контента.
-
Зарегистрируйтесь и авторизуйтесь в VK Cloud— https://cloud.vk.com/
-
Перейдите в раздел Облачные вычисления и нажмите на кнопку Создать инстанс.
-
В отобразившемся окне создайте необходимую конфигурацию сервера. Вы можете выбрать любую операционную систему, но далее в инструкции в качестве примера все команды будут для Ubuntu 20.04.
-
На следующем шаге оставьте настройки по-умолчанию кроме пункта Настройки Firewall. Нажмите на Добавить группу безопасности и выберите Всё разрешено.
-
Далее нажмите на кнопку Создать инстанс.
Если вы создаете виртуальную машину впервые, то на ваш компьютер скачается файл с ключом для подключения к машине через SSH. Название будет разным в зависимости от того, какие настройки были указаны на шаге выше. Например, название ключа для ОС Ubuntu 20.04 может быть ubuntu-STD2-1-1-10GB-eNw7UeS1.pem.
-
Проверьте, установлен ли SSH-клиент на вашем компьютере. Для этого выполните в терминале команду
ssh
. Если SSH-клиент установлен, в выводе команды будет:usage: ssh [...] [-B bind_interface] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-J destination] [-L address] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-P tag] [-p port] [-R address] [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]] destination [command [argument ...]] ssh [-Q query_option]
Если SSH-клиент не установлен, установите его на ваш компьютер.
-
После установки SSH-клиента и создания ВМ выполните в терминале команды:
chmod 400 <путь к SSH-ключу из шага выше> # устанавливаем ограничения на чтение ключа ssh -i <путь к SSH-ключу> <название системы ВМ>@<IP-адрес ВМ> # подключаемся к виртуальной машине
Имя и IP-адрес виртуальной машины отображаются в таблице созданных ВМ.
Инструкция по подключению к ВМ также отображается в интерфейсе VK Cloud в разделе «Информация» для ВМ.
Примечание
Далее используются примеры команд для операционной системы Ubuntu 20.04.
-
Обновите пакеты Ubuntu:
-
Установите Nginx командой:
-
Перейдите в директорию с Nginx:
далее в директорию /var/www — из нее забирается статический контент приложения:
и удалите в ней директорию с HTML:
-
Перейдите в директорию с приложением и библиотекой VK Teams Bridge и загрузите их на сервер:
Пример команды, если директория с проектом называется «test»:
-
На виртуальной машине переместите папку с проектом в директорию /var/www:
-
Настройте Nginx, чтобы он раздавал статический контент приложения:
sudo nano ../../etc/nginx/sites-enabled/default
Найдите строку root /var/www/html; и замените ее на root /var/www/<путь до index.html>;.
Пример строки, если репозиторий называется «test» и файл index.html лежит внутри еще одной папки «test» — root /var/www/test/test
Сохраните изменения.
-
Перезапустите сервер:
-
Введите в адресную строку браузера http://<IP-адрес виртуальной машины>/. Пример — http://31.128.50.35/
В браузере должна отображаться HTML-страница приложения.
Шаг 3. Зарегистрируйте домен
Для регистрации мини-аппа, вам потребуется собственный домен. Он должен быть открытым, чтобы VK Teams смог «забирать» приложение.
Вы можете использовать имеющийся у вас домен или зарегистрировать новый на одном из удобных для вас сервисов. Далее в качестве примера будет рассмотрена регистрация домена при помощи сервиса https://www.reg.ru/.
Зарегистрируйтесь на сайте https://www.reg.ru/ и в верхнем меню нажмите на кнопку Заказать. Укажите домен, который хотите зарегистрировать. Выберите и оплатите его.
Далее настройте DNS-хостинг:
-
Делегируйте домен на сайте, где регистрировали домен. Перейдите на https://www.reg.ru/ → Личный кабинет → Домены → DNS серверы и управление зоной:
-
В разделе DNS серверы и управление зоной нажмите Изменить:
В открывшемся меню нажмите Свой список DNS серверов:
Добавьте два DNS-сервера:
ns1.mcs.mail.ru
ns2.mcs.mail.ru
и нажмите Продолжить.
-
Свяжите домен с IP-адресом сервера в VK Cloud:
3.1. В разделе DNS нажмите на кнопку Создать DNS-зону — оставьте настройки по-умолчанию, в поле DNS-зона укажите зарегистрированный домен.
3.2. Нажмите на созданную DNS-зону. На отобразившейся странице добавьте запись — укажите IP-адрес виртуальной машины в VK Cloud и префикс к DNS. Нажмите на кнопку Добавить запись.
Подождите обновление DNS-серверов. После этого приложение будет доступно по зарегистрированному домену+префикс.
Шаг 4. Сгенерируйте самоподписанный сертификат
Взаимодействие между сервером VK Teams и веб-сервером мини-аппа осуществляется по mTLS. Поэтому веб-сервер мини-аппа должен использовать самоподписанный сертификат с соответствующим CN, который будет указываться при регистрации мини-аппа в VK Teams.
Для генерации сертификата должен быть установлен OpenSSL. Чтобы проверить установлен ли он, выполните в терминале команду openssl -v
. Если OpenSSL не установлен, установите его.
-
Сгенерируйте сертификат командой:
openssl req -x509 -days 36500 -subj "/CN=HOST DOMAIN NAME" -newkey rsa:4096 -nodes -keyout key.pem -out crt.pem
где CN — префикс + зарегистрированный домен.
В результате выполнения команды в директории должны появиться файлы key.pem и crt.pem. Данные файлы необходимы для запуска веб-сервера мини-аппа. Файл crt.pem будет использовать при регистрации мини-аппа в Метаботе на шаге 5.
-
Переместите сертификат и ключи на сервер командой:
-
На виртуальной машине выполните команду:
-
Подключитесь к серверу и проверьте, что сертификат и ключи скопировались:
-
Измените конфигурацию Nginx.
Выполните команду:
и замените содержимое файла на код:
Внимание
Ниже в коде приведены в качестве примера тестовые данные. Укажите ваш домен и пути до сертификата и приватного ключа
server { listen 80 default_server; listen [::]:80 default_server; server_name test-miniapp-bridge-2.ru; # укажите ваш домен location / { return 301 https://$host$request_uri; } } server { listen 443 ssl; server_name test-miniapp-bridge-2.ru; # укажите ваш домен # Указываем путь к сертификатам ssl_certificate /etc/ssl/private/crt.pem; # путь к сертификату ssl_certificate_key /etc/ssl/private/key.pem; # путь к приватному ключу # Настройки SSL ssl_protocols TLSv1.2 TLSv1.3; # используем только безопасные версии TLS ssl_ciphers 'HIGH:!aNULL:!MD5'; # безопасные шифры для SSL root /var/www/test/test; # путь к корневой директории приложения, в котором лежит index.html index index.html index.htm index.nginx-debian.html; ssl_client_certificate /etc/ssl/private/crt.pem; # путь к сертификату, который будет использоваться для проверки клиентских сертификатов location / { try_files $uri $uri/ =404; # ищем запрашиваемый файл } }
Сохраните изменения.
-
Перезапустите Nginx командой:
Перейдите на сайт. Браузер отобразит предупреждение о самоподписанном сертификате, но он позволит перейти, если согласиться с условиями.
Шаг 5. Зарегистрируйте мини-апп в Метаботе
Теперь нужно зарегистрировать мини-апп в VK Tems через специального бота — Metabot.
-
Перейдите в клиентское приложение VK Teams и найдите Metabot.
-
Отправьте боту команду
/newapp
и следуйте инструкциям бота.Для регистрации мини-аппа необходимы следующие атрибуты:
-
Название мини-аппа.
-
Описание мини-аппа.
-
Картинка в формате PNG.
Требования к картинке:
- разрешение не мене 1024х1024px.
- квадрат.
Скачать пример картинки -
Иконка в формате SVG для невыбранного таба.
Требования:
- монохромная;
- без встроенных стилей и скриптов. -
Иконка в формате SVG для выбранного таба.
Требования:
- монохромная;
- без встроенных стилей и скриптов.
При успешном завершении регистрации Метабот отправляет сообщение со ссылкой на мини-апп, которой можно пользоваться и пересылать коллегам.
Ссылка на мини-апп содержит базовую часть, а также ID нового мини-аппа.
Пример ссылки на мини-апп:
https://u.internal.myteam.mail.ru/miniapp/miniapp-16c6c83e-075f-4d92-b840-ad1991f3445c
-
-
Добавьте URL на ваш домен и сгенерированный сертификат crt.pem. Нажмите на Set backend URL and certificate и отправьте боту эти данные.
Если все прошло успешно, бот выводит сообщение «The mini app backend info is updated». При нажатии на ссылку мини-аппа, он отображается в клиентском приложении VK Teams.