Skip to content

Type - Типы сообщений

Тип сообщения (type.name) определяет, какое поведение и интерфейс будет использоваться для отображения In-App Message.

Тип влияет на структуру поля data, а также на способ рендеринга сообщения внутри клиента.

Обзор

На текущий момент реализованы следующие типы:

  • widget_popup
  • skill_point_received_bottomsheet
  • engage_popup

widget_popup

Этот тип делегирует отображение сообщения внешней системе SDUI (Server-Driven UI), используемой в приложении.

IAM лишь передаёт сообщение с параметрами, а отрисовка и логика происходят в другом слое.

Параметры, поддерживаемые в data:

  • id (String) — ID виджета, зарегистрированного в системе SDUI
  • variables — объект с произвольными параметрами, передаваемыми в шаблон виджета. IAM не интерпретирует структуру variables; её формат полностью зависит от реализации конкретного виджета, указанного в id.

📘 Подробнее см. в отдельной документации по SDUI

Пример:

json
{
  "id": "57351e1a-0c00-4cb6-987d-85d7ebb078f0",
  "enabled": true,
  "type": { "name": "widget_popup" },
  "start": "0000-01-01T00:00:00.000",
  "end": null,
  "priority": 0,
  "triggers": [
    { "type": "event", "event": "feedback_sent" },
    { "type": "event", "event": "first_feedback_sent" }
  ],
  "data": {
    "id": "feedback_sent_popup",
    "variables": {
      "campaign_id": "abc123",
      "show_discount": true,
      "discount_value": 20,
      "cta_url": "https://example.com/apply",
      "l10n": {
        "ru": {
          "title": "Спасибо за обратную связь!",
          "body": "Лови скидку 20% на следующий курс",
          "action": "Перейти",
          "image": "https://example.com/promo_ru.png"
        },
        "en": {
          "title": "Thanks for the feedback!",
          "body": "Here's 20% off your next course",
          "action": "Claim Now",
          "image": "https://example.com/promo_en.png"
        }
      }
    }
  }
}

skill_point_received_bottomsheet

Используется для отображения вовлекающих предложений после получения пользователем баллов по конкретному навыку. Отображается в формате bottom sheet.

Поле data содержит мультиязычные строки и изображения:

Пример:

json
{
  "id": "after_exam_form_skill_intuit_6",
  "enabled": true,
  "type": { "name": "skill_point_received_bottomsheet" },
  "start": "2025-04-24T00:00:00.000",
  "end": null,
  "priority": 0,
  "triggers": [
    {
      "event": "skill_point_received",
      "type": "event",
      "data": {
        "skill": "Интуит",
        "score": 6
      }
    }
  ],
  "condition": { "var": "feature_flags.skill_received_engage_dialog" },
  "data": {
    "image": "https://.../intuit_3@3x.png",
    "title": { "ru": "Открываешь тайны разума" },
    "subtitle": { "ru": "Загляни глубже! ..." },
    "action": { "ru": "Оставить заявку" }
  }
}

engage_popup

Вовлекающее сообщение, которое может быть показано, например, при запуске приложения. Использует произвольные параметры для визуального и логического оформления.

Пример генерации на клиенте:

dart
{
  "id": "app_start_popup_1_123456",
  "enabled": true,
  "type": { "name": "engage_popup" },
  "data": {
    "count": 1,
    "title": { "ru": "Привет!" },
    "description": { "ru": "Готов начать обучение?" },
    "locales": ["ru"],
    "action": {
      "text": "Начать",
      "type": "navigate",
      "reason": "user_engagement"
    }
  },
  "start": "0000-01-01T00:00:00.000",
  "triggers": [
    {
      "type": "event",
      "event": "app_started",
      "data": { "wrapped_count": 1 }
    }
  ],
  "condition": {
    "and": [
      { "date_diff_days_gt": [{ "var": "interactions.last_seen" }, 1] },
      {
        "or": [
          { "==": [{ "var": "user.language" }, "ru"] }
        ]
      }
    ]
  }
}

Если появляются новые типы сообщений, они должны быть документированы отдельно с указанием:

  • Названия типа (type.name)
  • Структуры поля data
  • Примеров генерации и показа

Для стабильной работы рекомендуется избегать повторного использования одного и того же id для сообщений разных типов.

Авторы

The avatar of contributor named as Vadim Melnikov Vadim Melnikov

История