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

Чтобы открыть модальное окно с представлением, ваше приложение должно иметь действительный, неистекший 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": "Укажите, в какое время присылать выбранные рассылки"
      }
    ]
  }
}
При безошибочном выполнении запроса тело ответа отсутствует