# Создание PWA и подключение таблиц Метабот

<span data-source-revision="0">PWA — веб-приложение, которое можно установить на устройство. Интерфейс можно сделать на React, а данные сохранять в кастомных таблицах Метабот через API.</span>

<div class="_Anchor_mzq7h_154" id="bkmrk-"></div>### <span data-source-revision="0">Создать приложение</span>

<span data-source-revision="0">Для небольшого приложения подойдёт React с Vite. Создать проект можно командой:</span>

```
npm create vite@latest my-pwa -- --template react-ts
```

<div class="_Padding_mzq7h_133 _PreformattedWrapper_mzq7h_252" data-source-revision="0" id="bkmrk-%D0%9F%D0%BE%D1%81%D0%BB%D0%B5-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA"><div class="code-content" dir="ltr">После создания проекта установить зависимости и разработать интерфейс: страницы, формы, расчёты и обработку отправки данных.</div><div class="code-content" dir="ltr"></div><div class="code-content" dir="ltr">Документация: [React](https://react.dev/learn), [создание проекта Vite](https://vite.dev/guide/).</div></div><div class="_Anchor_mzq7h_154" id="bkmrk--0"></div>### <span data-source-revision="0">Добавить PWA</span>

<span data-source-revision="0">Для Vite можно использовать vite-plugin-pwa. В настройках указать название приложения, иконки 192×192 и 512×512, стартовый адрес и режим отображения standalone. Настроить service worker для кеширования файлов приложения и работы без сети.</span>

<span data-source-revision="0">Разместить приложение на хостинге с HTTPS. Проверить установку на телефон, запуск с иконки и обновление приложения. Запись в Метабот требует подключения к интернету; сохранение и повторную отправку данных без сети нужно реализовывать отдельно.</span>

<span data-source-revision="0">Документация: [подключение PWA к Vite](https://vite-pwa-org.netlify.app/guide/), [основы PWA](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps).</span>

<div class="_Anchor_mzq7h_154" id="bkmrk--1"></div>## <span data-source-revision="0">Создать таблицу в Метабот</span>

<span data-source-revision="0">В нужном боте открыть «Таблицы», нажать «Создать» и указать техническое имя таблицы, например bmi.</span>

<span data-source-revision="0">В разделе «Структура» добавить поля и выбрать их типы. Имена таблиц и полей задаются строчными латинскими буквами, цифрами и подчёркиваниями. После настройки нажать «Обновить все поля в БД».</span>

<span data-source-revision="0">Названия полей в отправляемом объекте data должны совпадать с техническими именами полей таблицы.</span>

<span data-source-revision="0">Документация: [кастомные таблицы](https://docs.metabot24.ru/books/07-kastomnye-tablicy/page/kastomnye-tablicy).</span>

<div class="_Anchor_mzq7h_154" id="bkmrk--2"></div>## <span data-source-revision="0">4. Создать API-пользователя</span>

<span data-source-revision="0">В разделе «Пользователи бизнеса» создать пользователя, включить «Пользователь API», указать имя, роль и доступ к нужному боту. Нажать «Сгенерировать API-токен» и скопировать токен.</span>

<span data-source-revision="0">Для авторизации запросов используется заголовок:</span>

<div class="_Padding_mzq7h_133 _PreformattedWrapper_mzq7h_252" data-source-revision="0" id="bkmrk-authorization%3A-beare"><div class="code-content" dir="ltr">**Authorization: Bearer &lt;API\_TOKEN&gt;**</div><div class="code-content" dir="ltr"></div><div class="code-content" dir="ltr"><span style="text-align: center;">Документация: </span>[конструктор API, раздел о генерации токена](https://docs.metabot24.ru/books/08-integracii-i-api/page/konstruktor-api)<span style="text-align: center;">.</span></div></div><div class="_Anchor_mzq7h_154" id="bkmrk--3"></div>## <span data-source-revision="0">Настроить запись в таблицу</span>

<span data-source-revision="0">В настройках бота открыть «Внутреннее API» и создать активную конечную точку. Например алиас wright, метод POST, формат JSON.</span>

<span data-source-revision="0">Этот обработчик получает calculator, table и data, убирает начальный $ у ключей данных, проверяет таблицу по разрешённому списку и создаёт запись:</span>

```
var created = table.createItem(tableName, data);
```

<span data-source-revision="0">Для новой таблицы нужно добавить её техническое имя в allowedTables. Например, bmi уже есть в списке на скриншоте. Параметр calculator в этом обработчике проверяется на наличие, но отдельно в таблицу не записывается.</span>

<span data-source-revision="0">Адрес конечной точки: https://&lt;адрес-платформы&gt;/api/v1/bots/&lt;bot\_id&gt;/call/wright</span>

<span data-source-revision="0">Тело запроса для обработчика со скриншота:</span>

```
{ 
  "script_request_params": { 
      "calculator": "bmi", 
      "table": "bmi", 
      "data": { 
        "user_id": "123", 
        "result": 24.5 
      } 
  } 
}
```

user\_id и result здесь — примеры: заменить их полями своей таблицы. Обёртка script\_request\_params нужна для доступа к этим данным через request.json в обработчике Метабот.

Отправлять запрос методом POST с заголовками Content-Type: application/json и Authorization. В публичном PWA запрос лучше выполнять через свой сервер: API-токен хранить на сервере, чтобы он не попадал в код браузера.

<span data-source-revision="0">Документация: [вызов внутреннего API](https://docs.metabot24.ru/books/08-integracii-i-api/page/konstruktor-api).</span>

<div class="_Anchor_mzq7h_154" id="bkmrk--4"></div>## <span data-source-revision="0">Проверить подключение</span>

Отправить тестовый запрос через Postman или Swagger платформы по адресу /api/docs. Убедиться, что появилась строка в таблице и обработчик вернул сообщение «Запись успешно добавлена» с metabot\_id.

<span data-source-revision="0">Затем проверить отправку из приложения. Показывать сообщение об успешном сохранении после подтверждения записи, а при ошибке — предлагать повторить отправку. Запросы в Swagger создают реальные записи.</span>

<div class="_Anchor_mzq7h_154" id="bkmrk--5"></div>## <span data-source-revision="0">Build и размещение на сервере (+настройка домена)</span>

<span data-source-revision="0">После конца разработки и всех проверок вам нужно сбилдить приложение. После билда у вас в папке dist будут файлы, которые нужно перенести на сервер. Далее есть 2 развития событий:</span>

1. <span data-source-revision="0">Размещение на домене заказчика не требуется. Подбираем сервер и заливаем в папку forms/ платформы в папку проекта (допустим forms/testsite) все файлы из dist</span>
2. <span data-source-revision="0">Если требуется размещение на домене заказчика. Нужно подобрать сервер, где не установлена платформа или самый свободный. Создать в var/www/ папку проекта. Залить туда файлы из dist. Настроить nginx на домен который предоставил заказчик. После этого передать заказчику IP сервера и попросить создать A/AAA запись в DNS. Подождать пока обновятся DNS сервера (это может занять от 5 минут до 3 суток), нужно переодически проверять доступность сайта по домену. Далее при необходимости получить сертефикат. Сертефикат требуется для https:// соединения (без него будет http:// и вылазить предупреждение о том, что сайт не безопасен)</span>

<span data-source-revision="0">PS: для того чтобы залить новый билд требуется удалить все файлы в папке проекта и залить новые из билда(dist), иначе могут остаться старые файлы, которые будут мешать работе сайта</span>