# Carrot quest Web API: Написать пользователю в чат

Сценарий из mcp-everything. Актуально на 2026-10-24.

Отправить сообщение от имени поддержки: статус заказа, ответ на обращение из другой системы.

1. Найди пользователя: GET /users/{id} с by_user_id = true. Если его нет, вернётся 400 LookupError.
2. Отправь сообщение: POST /users/{id}/sendmessage с body — текстом. type задаёт вид: popup_chat (по умолчанию), popup_small или popup_big.
3. В ответе data.conversation — ID диалога и data.message — ID сообщения. По ID диалога можно получить переписку: GET /conversations/{id}.

```bash
curl -X POST https://api.carrotquest.io/users/user_42/sendmessage \
  -H "Authorization: Token $CQ_TOKEN" \
  --data-urlencode 'by_user_id=true' \
  --data-urlencode 'body=Ваш заказ №1042 передан в доставку. Курьер привезёт его завтра с 14 до 16.'
```

## Базовые URL

- Боевой: `https://api.carrotquest.io`

## Авторизация

Тип: API-ключ

Токен берётся в панели администратора: «Настройки» → «Разработчикам» → «API-ключи». Передаётся в заголовке `Authorization: Token <токен>` (или `Bearer <токен>`) либо параметром `auth_token`.

```
curl -X GET -H "Authorization: Token <ваш_токен>" https://api.carrotquest.io/users/123
```

## Методы сценария

### GET /users/{id} — Данные пользователя

Если пользователя нет — `400 LookupError`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `id` | path | string | да | ID в Carrot quest или ваш User ID (с by_user_id=true) |
| `by_user_id` | query | boolean | нет | Искать по вашему User ID, по умолчанию false |
| `props` | query | boolean | нет | Системные свойства, по умолчанию true |
| `props_events` | query | boolean | нет | Свойства, связанные с событиями |
| `props_custom` | query | boolean | нет | Пользовательские свойства |
| `events` | query | boolean | нет | События |
| `segments` | query | boolean | нет | Сегменты |
| `notes` | query | boolean | нет | Заметки |
| `tags` | query | boolean | нет | Теги |
| `email_status` | query | boolean | нет | Статус подписки на email |
| `app` | query | integer | нет | ID приложения (по умолчанию из токена) |

### POST /users/{id}/sendmessage — Ручное сообщение пользователю

В ответе `data`: `conversation` (ID диалога) и `message` (ID сообщения).

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `id` | path | string | да | ID пользователя |
| `by_user_id` | body | boolean | нет | Искать по вашему User ID |
| `body` | body | string | да | Текст сообщения |
| `type` | body | string | нет | popup_chat (по умолчанию), popup_small, popup_big |

Пример запроса:

```
curl -X POST \
  --data-urlencode 'body=Hello' \
  -H "Authorization: Token XXX" \
  https://api.carrotquest.io/users/2137216/sendmessage
```

### GET /conversations/{id} — Диалог

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `id` | path | integer | да | ID диалога |

## Нюансы

- Параметры передаются GET- или POST-параметрами в UTF-8.
- Ответы — JSON с полями `meta` и `data`; `meta.status` дублирует HTTP-код.
- `{id}` пользователя — ID Carrot quest или ваш User ID с `by_user_id=true`; запись свойств и событий по неизвестному User ID создаёт пользователя.
- Токен даёт почти неограниченный доступ к данным приложения — не передавайте его третьим лицам.
- Для получения событий в реальном времени есть вебхуки и Realtime Services API.

## Другие сценарии

- [Передать данные пользователя с сервера](https://mcp-everything.ru/integrations/carrot-quest/scenarios/peredat-dannye-polzovatelya-s-servera.md)
- [Записать событие пользователя](https://mcp-everything.ru/integrations/carrot-quest/scenarios/zapisat-sobytie-polzovatelya.md)
- [Выгрузить неразобранные диалоги](https://mcp-everything.ru/integrations/carrot-quest/scenarios/vygruzit-nerazobrannye-dialogi.md)

---

Если этого недостаточно — официальная документация: https://developers.carrotquest.io/webapi/
Вся интеграция одним документом: https://mcp-everything.ru/integrations/carrot-quest.md
