
Формы в Пачке позволяют создавать интерактивные модальные окна для сбора данных от сотрудников прямо в мессенджере. Это удобно, если вы хотите автоматизировать регулярные рабочие процессы:
Можно придумать разные сценарии использования — всё зависит от специфики вашей деятельности :)
⚠️ Важно: сейчас вызов модального окна с представлением возможен только через кнопки в сообщении бота.
Вы можете добавить до 100 блоков в одно представление.
Подробное описание всех типов блоков и их параметров смотрите в документации Блоки представления.
header — крупный заголовок секции (до 150 символов)plain_text — простой текст без форматирования (до 12000 символов)markdown — текст с форматированием (до 12000 символов)divider — горизонтальная линия-разделительinput — текстовое поле (одно/многострочное, до 3000 символов)select — выпадающий список (до 100 вариантов)radio — радиокнопки для выбора одного варианта (до 10 вариантов)checkbox — чекбоксы для множественного выбора (до 10 вариантов)date — выбор даты (формат YYYY-MM-DD)time — выбор времени (формат HH:mm)file_input — загрузка файлов (до 10 файлов, ссылки живут 1 час)Примеры:
{
"type": "input",
"name": "description",
"label": "Описание",
"multiline": true,
"required": true
}
{
"type": "select",
"name": "priority",
"label": "Приоритет",
"options": [
{ "text": "Низкий", "value": "low" },
{ "text": "Высокий", "value": "high", "selected": true }
]
}
POST-запрос на https://api.pachca.com/api/shared/v1/views/open:
{
"trigger_id": "791a056b-006c-49dd-834b-c633fde52fe8",
"type": "modal",
"callback_id": "vacation_request",
"view": {
"title": "Заявка на отпуск",
"submit_text": "Отправить",
"blocks": [
{
"type": "date",
"name": "start_date",
"label": "Дата начала",
"required": true
},
{
"type": "input",
"name": "comment",
"label": "Комментарий",
"multiline": true
}
]
}
}
⚠️ Важно:
trigger_idдействует только 3 секунды!
Вебхук на ваш Webhook URL:
{
"type": "view",
"event": "submit",
"callback_id": "vacation_request",
"user_id": 1235523,
"data": {
"start_date": "2026-07-01",
"comment": "Поеду в отпуск на море"
}
}
Обработка:
app.post("/webhook", async (req, res) => {
const { type, event, callback_id, data } = req.body;
if (type === "view" && event === "submit") {
// Валидация
if (new Date(data.end_date) <= new Date(data.start_date)) {
return res.status(400).json({
errors: { end_date: "Должна быть позже даты начала" },
});
}
// Сохранение и закрытие формы
await saveRequest(data);
return res.status(200).send();
}
});
Успех: ответьте 200 OK — форма закроется
Ошибки: ответьте 400 Bad Request с JSON:
{
"errors": {
"end_date": "Дата окончания не может быть раньше даты начала",
"comment": "Обязательное поле"
}
}
Ошибки покажутся под полями красным цветом.
В нашей статье в блоге рассказали, как с помощью n8n можно за несколько минут создать автоматизацию для сбора заявок на отпуск — с единым форматом и быстрым реагированием HR.
