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

Messages

Сообщения принадлежат конкретному тикету. У сообщения есть тип отправителя (contact, operator, bot) и флагis_internal — внутренние заметки не видны клиенту.

GET/api/v1/tickets/{ticket_id}/messages

Список сообщений тикета

Query параметры:

  • since — ISO 8601 datetime, только сообщения после
  • page, page_size (default 50, max 200)
200 OK
{
  "items": [
    {
      "id": "f1...",
      "ticket_id": "8a3f...",
      "workspace_id": "1c2b...",
      "sender_type": "contact",
      "sender_id": "44e1...",
      "content": "Здравствуйте!",
      "is_internal": false,
      "media": [
        {
          "id": "m1...",
          "url": "https://api.support.forestsnet.com/api/v1/media/m1...",
          "mime_type": "image/png",
          "original_name": "screenshot.png",
          "file_type": "image",
          "width": 1280,
          "height": 720
        }
      ],
      "created_at": "2026-04-06T10:12:33.123456"
    }
  ],
  "total": 4,
  "page": 1,
  "page_size": 50
}
POST/api/v1/tickets/{ticket_id}/messages

Отправить сообщение от имени бота/системы

Сообщение публикуется с типом bot. Используется для автоответов и интеграций. К сообщению можно прикрепить ранее загруженные файлы черезmedia_ids — см. раздел Медиа.

body
{
  "content": "Спасибо! Прикладываю инструкцию.",
  "is_internal": false,
  "media_ids": ["m1...", "m2..."]
}
PATCH/api/v1/messages/{message_id}

Редактировать сообщение

Перезаписывает content сообщения. Применимо к сообщениям которые отправил ваш бот / интеграция через предыдущие endpoint'ы — сообщения от посетителей и операторов через дашборд тоже редактируются, но обычно проще вызвать админский WS-канал.

body
{
  "content": "Обновлённый текст сообщения"
}

В ответ возвращается обновлённое сообщение целиком (как в GET-листе). Триггерит webhook event message.edited.

POST/api/v1/messages

Принять входящее сообщение от внешнего контакта

Универсальный «инбокс»: используйте этот эндпоинт, когда внешняя система (CRM, бот, форма на сайте) хочет передать сообщение от пользователя. Если активного тикета нет — он будет создан автоматически.

body
{
  "external_id": "user-42",
  "content": "Здравствуйте, не приходит код",
  "media_ids": ["m1..."],
  "contact": {
    "full_name": "Иван Петров",
    "email": "ivan@example.com"
  }
}

Поле media_ids опционально: передайте id файлов, ранее загруженных через POST /api/v1/media/upload. Они появятся в массиве media у созданного сообщения.

IP клиента автоматически сохраняется в contact.extra_data.last_ip — удобно для антифрода и геоаналитики.
Была ли страница полезной?