Чтобы открыть модальное окно с представлением, ваше приложение должно иметь действительный, неистекший trigger_id
. Это требование связано с тем, чтобы приложение открывало модальное окно только с разрешения пользователя и делало это быстро.
Получить trigger_id
вы можете, например, в исходящем вебхуке о нажатии кнопки пользователем.
С целью поддержания интерактивности и отзывчивости интерфейсов Пачки, срок жизни trigger_id ограничен и составляет 3 секунды
Имея валидный trigger_id
, вы можете воспользоваться методом открытия представления, передав в него параметры модального окна (включая блоки представления).
post
/views/open
открытие представления
Запрос
|
|||
---|---|---|---|
type | string* | Способ открытия представления. На данный момент доступно только модальное окно (modal). | |
trigger_id | string* | Уникальный идентификатор события (полученный, например, в исходящем вебхуке о нажатии кнопки) | |
private_metadata | string | Необязательная строка, которая будет отправлена в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для передачи в формате JSON какой то дополнительной информации вместе с заполненной пользователем формой. Максимум - 3000 символов. | |
callback_id | string | Необязательный идентификатор для распознавания этого представления, который будет отправлен в ваше приложение при отправке пользователем заполненной формы. Используйте это поле, например, для понимания, какую форму должен был заполнить пользователь. Максимум - 255 символов. | |
view | object* | Собранный объект представления | |
title | string* | Заголовок представления (максимум - 24 символа) | |
close_text | string | Текст кнопки закрытия представления, по умолчанию Отменить (максимум - 24 символа) | |
submit_text | string | Текст кнопки отправки формы, по умолчанию Отправить (максимум - 24 символа) | |
blocks | array of objects | Массив блоков представления (максимум - 100 блоков) | |
Ответ
|
|||
При безошибочном выполнении запроса тело ответа отсутствует | |||
Возможные ошибки запроса (errors code)
|
|||
invalid | Поле имеет недопустимое значение | ||
trigger_not_found | Не удалось найти идентификатор события | ||
trigger_expired | Время жизни идентификатора события истекло | ||
|
{
"trigger_id": "791a056b-006c-49dd-834b-c633fde52fe8",
"type": "modal",
"private_metadata": "{'timeoff_id':4378}",
"callback_id": "timeoff_reguest_form",
"view": {
"title": "Уведомление об отпуске",
"close_text": "Закрыть",
"submit_text": "Отправить заявку",
"blocks": [
{
"type": "plain_text",
"text": "Заполните форму. После отправки формы в общий чат будет отправлено текстовое уведомление, а ваш отпуск будет сохранен в базе."
},
{
"type": "markdown",
"text": "Информацию о доступных вам днях отпуска вы можете прочитать по [ссылке](https://www.website.com/timeoff)"
},
{
"type": "header",
"text": "Основная информация"
},
{
"type": "date",
"name": "date_start",
"label": "Дата начала отпуска",
"initial_date": "2025-07-01",
"required": true
},
{
"type": "date",
"name": "date_end",
"label": "Дата окончания отпуска",
"initial_date": "2025-07-28",
"required": true
},
{
"type": "file_input",
"name": "request_doc",
"label": "Заявление",
"filetypes": ["pdf","jpg","png"],
"max_files": 1,
"required": true,
"hint": "Загрузите заполненное заявление с электронной подписью (в формате pdf, jpg или png)"
},
{
"type": "radio",
"name": "accessibility",
"label": "Доступность",
"options": [
{
"text": "Ничего",
"value": "nothing",
"checked": true
},
{
"text": "Только телефон",
"value": "phone_only"
},
{
"text": "Телефон и ноутбук",
"value": "phone_notebook"
}
],
"required": true,
"hint": "Если вы не планируете выходить на связь, то выберите вариант Ничего"
},
{
"type": "divider"
},
{
"type": "header",
"text": "Дополнительно"
},
{
"type": "input",
"name": "info",
"label": "Описание отпуска",
"placeholder": "Куда собираетесь и что будете делать",
"multiline": true,
"hint": "Возможно вам подскаджут, какие места лучше посетить"
},
{
"type": "checkbox",
"name": "newsletters",
"label": "Рассылки",
"options": [
{
"text": "Получать уведомления о новых задачах в команде",
"value": "new_tasks",
"description": "Каждый день бот будет присылать список новых задач в вашей команде"
},
{
"text": "Получать уведомления об обновлениях в проектах",
"value": "project_updates",
"description": "Два раза в неделю бот будет присылать обновления по проектам"
}
]
},
{
"type": "select",
"name": "team",
"label": "Выберите команду",
"options": [
{
"text": "Все команды",
"value": "all"
},
{
"text": "Web",
"value": "web",
"selected": true
},
{
"text": "iOS",
"value": "ios"
},
{
"text": "Android",
"value": "android"
},
{
"text": "Back",
"value": "back"
},
{
"text": "Design",
"value": "design"
},
{
"text": "Success",
"value": "success"
}
]
},
{
"type": "time",
"name": "newsletter_time",
"label": "Время рассылки",
"initial_time": "11:00",
"hint": "Укажите, в какое время присылать выбранные рассылки"
}
]
}
}
При безошибочном выполнении запроса тело ответа отсутствует