Для разработчиков

Открытие представления

POST/views/open

Показывает пользователю модальное окно с формой в ответ на его действие. Метод вызывают токеном бота: события о нажатии кнопок приходят только ботам, от имени бота окно и открывается.

Открыть окно можно единственным способом — по trigger_id из события о нажатии кнопки. Один trigger_id открывает одно окно и живёт 3 секунды. У бота с вебхуком они отсчитываются с момента, когда Пачка передала нажатие, а у бота, который читает GETИсторию событий, с момента записи нажатия в журнал. Поэтому окно открывают первым делом, а всё остальное по событию делают уже после.

Заполненная форма приходит обратно событием view_submit: на исходящий вебхук, а если адрес не задан — в журнал. На вебхук отвечают прямо в ответе на него, и Пачка ждёт его 3 секунды. Событие из журнала закрывают методом POSTОтвет на отправку формы, на это есть 5 секунд. Не успели — пользователь увидит ошибку отправки.

Тело запроса

application/json
type
string
*
Способ открытия представления
Возможные значения
Пример:modal
trigger_id
string
*
Уникальный идентификатор события (полученный, например, в исходящем вебхуке о нажатии кнопки)
Пример:791a056b-006c-49dd-834b-c633fde52fe8
private_metadata
string
Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате JSON какой то дополнительной информации вместе с заполненной пользователем формой.
Пример:{"timeoff_id":4378}
Длина:
<= 3000 символов
callback_id
string
Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь.
Пример:timeoff_request_form
Длина:
<= 255 символов
view
object
*
Собранный объект представления
title
string
*
Заголовок представления
Пример:Уведомление об отпуске
Длина:
1 — 24 символов
close_text
string
Текст кнопки закрытия представления. Отображается только в десктоп-вебе. В мобильных приложениях (iOS/Android) кнопка закрытия — это крестик в шапке, и заданный текст там не показывается.
Пример:Закрыть
По умолчанию:
Отменить
Длина:
1 — 24 символов
submit_text
string
Текст кнопки отправки формы
Пример:Отправить заявку
По умолчанию:
Отправить
Длина:
1 — 24 символов
blocks[]
array of anys
*
Массив блоков представления. Имена блоков (name) не повторяются, в select и radio заранее выбрано не больше одного варианта, а min_length поля ввода не больше его max_length.
Количество:
1 — 100 элементов
Union-тип для всех возможных блоков представления
ViewBlockHeaderobject
ViewBlockPlainTextobject
ViewBlockMarkdownobject
ViewBlockDividerobject
ViewBlockInputobject
ViewBlockSelectobject
ViewBlockRadioobject
ViewBlockCheckboxobject
ViewBlockDateobject
ViewBlockTimeobject
ViewBlockFileInputobject

Ответ

201Created
The request has succeeded and a new resource has been created as a result.
Открытие представления
pachca views open \  --title='Уведомление об отпуске' \  --close-text=Закрыть \  --submit-text='Отправить заявку' \  --blocks='[{"type":"header","text":"Основная информация"},{"type":"plain_text","text":"Заполните форму. После отправки формы в общий чат будет отправлено текстовое уведомление, а ваш отпуск будет сохранен в базе."},{"type":"markdown","text":"Информацию о доступных вам днях отпуска вы можете прочитать по [ссылке](https://example.com/timeoff)"},{"type":"divider"},{"type":"input","name":"info","label":"Описание отпуска","placeholder":"Куда собираетесь и что будете делать","multiline":true,"initial_value":"Начальный текст","min_length":10,"max_length":500,"required":true,"hint":"Возможно вам подскаджут, какие места лучше посетить"},{"type":"select","name":"team","label":"Выберите команду","options":[{"text":"Ничего","value":"nothing","description":"Каждый день бот будет присылать список новых задач в вашей команде","selected":true}],"hint":"Выберите одну из команд"},{"type":"radio","name":"accessibility","label":"Доступность","options":[{"text":"Ничего","value":"nothing","description":"Каждый день бот будет присылать список новых задач в вашей команде","checked":true}],"required":true,"hint":"Если вы не планируете выходить на связь, то выберите вариант Ничего"},{"type":"checkbox","name":"newsletters","label":"Рассылки","options":[{"text":"Ничего","value":"nothing","description":"Каждый день бот будет присылать список новых задач в вашей команде","checked":true}],"hint":"Выберите интересующие вас рассылки"},{"type":"date","name":"date_start","label":"Дата начала отпуска","initial_date":"2025-07-01","required":true,"hint":"Укажите дату начала отпуска"},{"type":"time","name":"newsletter_time","label":"Время рассылки","initial_time":"11:00","hint":"Укажите, в какое время присылать выбранные рассылки"},{"type":"file_input","name":"request_doc","label":"Заявление","filetypes":["pdf","jpg","png"],"max_files":1,"required":true,"hint":"Загрузите заполненное заявление с электронной подписью (в формате pdf, jpg или png)"}]' \  --type=modal \  --trigger-id=791a056b-006c-49dd-834b-c633fde52fe8 \  --private-metadata='{"timeoff_id":4378}' \  --callback-id=timeoff_request_form \  --json \  --token YOUR_ACCESS_TOKEN