Типы данных: мессенджинг
Справочник JSON-структур мессенджинга: каналы, диалоги, треды, контакты, вложения и события диалогов.
Справочник JSON-структур, которые API возвращает для сущностей мессенджинга. Показаны репрезентативные наборы полей; вложенные ссылки вида { "...Contact" } или [{ "...Thread" }] указывают на другие типы этого справочника. Значения-заглушки "..." обозначают произвольные строки, а {} — объекты со свободной структурой.
Каналы
Channel
{
"id": 1,
"company_id": 1,
"channel_type_id": 1,
"channel_type_provider_id": 1,
"provider_key": "whatsapp",
"provider_version": "1.0",
"name": "...",
"description": "...",
"account_name": "...",
"timezone": "UTC",
"notes": "...",
"status": "connected",
"setup_state": "draft|pairing|ready|failed",
"status_message": "...",
"health": {},
"external_ids": {},
"config": {},
"allow_broadcasts": true,
"allow_automations": true,
"allow_inbound_handling": true,
"rate_limits": {},
"quota_limits": {},
"status_changed_at": "2024-01-01T00:00:00Z",
"connected_at": "2024-01-01T00:00:00Z",
"disconnected_at": null,
"last_seen_at": "2024-01-01T00:00:00Z",
"last_inbound_at": null,
"last_outbound_at": null,
"last_error_at": null,
"last_error_code": null,
"reconnect_attempts": 0,
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z",
"capabilities": {},
"limits": {},
"channel_type": {
"id": 1,
"key": "whatsapp",
"name": "WhatsApp"
}
}capabilities и limits — финальные значения: базовые из ChannelType плюс override из ChannelTypeProvider.
provider_key — публичный идентификатор провайдера; внутренние имена runtime-библиотек наружу не отдаются. QR-каналы маппятся на нейтральные значения: WhatsApp (QR) → whatsapp, Telegram (личный) → telegram, Instagram (неофициальный) → instagram. Остальные провайдеры отдаются как есть: meta, meta_instagram, meta_threads, telegram_bot, sip_telephony, live_chat_widget, twilio. Для различения типа канала используйте channel_type.key.
ChannelType
{
"id": 1,
"key": "whatsapp",
"name": "WhatsApp",
"description": "...",
"category": "messaging",
"order_id": 1,
"badge_label": "Popular",
"badge_variant": "primary",
"is_published": true,
"capabilities": {},
"limits": {},
"provider_config": {},
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z"
}ChannelTypeProvider
{
"id": 1,
"channel_type_id": 1,
"provider_key": "meta",
"provider_version": "1",
"capabilities_override": {},
"limits_override": {},
"config": {},
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-01T00:00:00Z"
}ChannelProviderConfig
{
"flag_key": {
"value": true,
"label": "...",
"description": "..."
}
}ChannelAccess
{
"id": 1,
"model_type": "team",
"model_id": 10,
"rule": "allow",
"created_at": "2024-01-01T00:00:00Z"
}ChannelLog
{
"id": "123",
"level": "info",
"code": "...",
"message": "...",
"context": {},
"created_at": "2024-01-01T00:00:00Z"
}Диалоги и сообщения
Conversation
{
"id": 1,
"company_id": 1,
"contact_id": 10,
"subject": "Support request",
"lifecycle_status": "active",
"is_closed": false,
"is_archived": false,
"last_message_id": 1001,
"last_message_at": "2026-02-09T18:00:00Z",
"last_message": { "...Message" },
"unread_count_for_current_user": 5,
"closed_at": null,
"archived_at": null,
"reopened_at": null,
"created_at": "2026-02-09T17:00:00Z",
"updated_at": "2026-02-09T18:00:00Z",
"contact": { "...Contact" },
"threads": [{ "...Thread" }]
}lifecycle_status: active|closed.
Thread
{
"id": 1,
"conversation_id": 1,
"company_id": 1,
"contact_id": 10,
"channel_id": 3,
"contact_account_id": 44,
"funnel_id": 5,
"funnel_stage_id": 8,
"lifecycle_status": "active",
"is_closed": false,
"is_archived": false,
"is_group": false,
"external_thread_id": "1203630...@g.us",
"last_message_id": 1001,
"last_message_at": "2026-02-09T18:00:00Z",
"conversation_last_message_id": 1001,
"conversation_last_message_at": "2026-02-09T18:00:00Z",
"closed_at": null,
"archived_at": null,
"reopened_at": null,
"created_at": "2026-02-09T17:00:00Z",
"updated_at": "2026-02-09T18:00:00Z",
"contact_account": { "...ContactAccount" },
"funnel_stage": { "...FunnelStage" },
"events": [{ "...ConversationEvent" }],
"conversation": { "...Conversation" }
}Contact
{
"id": 10,
"company_id": 1,
"created_user_id": 7,
"salutation": "Mr",
"firstName": "John",
"lastName": "Doe",
"secondName": null,
"displayName": "John Doe",
"dob": null,
"title": null,
"photo": "https://api.aisar.app/v1/contacts/10/photo?signature={signature}",
"comments": null,
"company": null,
"status": "lead",
"merged_into_contact_id": null,
"merged_at": null,
"merged_by_user_id": null,
"phones": [{ "phone": "+77000001122", "type": "mobile" }],
"emailes": [{ "email": "john@example.com", "type": "work" }],
"contactAccounts": [{ "...ContactAccount" }]
}Массив email-адресов носит историческое имя ключа emailes (не emails). Поле photo — временный подписанный URL: параметр signature в примере заменён плейсхолдером.
MessageAttachment
{
"id": 501,
"type": "image",
"url": "https://api.aisar.app/v1/messages/1001/attachments/501/media?signature={signature}",
"thumbnail_url": null,
"filename": "12.jpg",
"mime_type": "image/jpeg",
"size": 23927,
"duration": null,
"metadata": {}
}url — временная подписанная ссылка на скачивание файла; параметр signature в примере заменён плейсхолдером.
ConversationEvent
{
"id": 1,
"company_id": 1,
"conversation_id": 1,
"thread_id": 1,
"type": "comment",
"author_user_id": 7,
"comment": "Conversation closed by operator.",
"from_lifecycle_status": "active",
"to_lifecycle_status": "closed",
"payload": {},
"created_at": "2026-02-09T18:10:00Z",
"updated_at": "2026-02-09T18:10:00Z",
"author": { "id": 7, "name": "Jane", "lastname": "Doe", "email": "...", "photo": null }
}type: created|comment|status_changed|archived|unarchived|assigned|unassigned.
ConversationParticipant
{
"id": 1,
"company_id": 1,
"conversation_id": 1,
"member_type": "user",
"member_id": 7,
"role": "assignee",
"is_primary": true,
"joined_at": "2026-02-09T18:00:00Z",
"left_at": null,
"added_by_user_id": 1,
"removed_by_user_id": null,
"created_at": "2026-02-09T18:00:00Z",
"updated_at": "2026-02-09T18:00:00Z",
"added_by": { "id": 1, "name": "Jane", "lastname": "Doe", "email": "..." },
"removed_by": null
}member_type: user|team|bot. role: значащая роль — assignee (ответственный оператор); по умолчанию participant.
ConversationTag
{
"id": 1,
"company_id": 1,
"conversation_id": 1,
"name": "vip",
"color": "#22c55e",
"source": "manual",
"created_by_user_id": 7,
"created_at": "2026-02-09T18:00:00Z",
"updated_at": "2026-02-09T18:00:00Z",
"created_by": { "id": 7, "name": "Jane", "lastname": "Doe", "email": "..." }
}source: manual|automation|integration.
ConversationNote
{
"id": 1,
"company_id": 1,
"conversation_id": 1,
"thread_id": 2,
"author_user_id": 7,
"body": "Closed after successful resolution.",
"is_private": true,
"pinned_at": null,
"edited_at": null,
"metadata": {},
"created_at": "2026-02-09T18:00:00Z",
"updated_at": "2026-02-09T18:00:00Z",
"author": { "id": 7, "name": "Jane", "lastname": "Doe", "email": "..." }
}ConversationRead
{
"id": 501,
"company_id": 1,
"conversation_id": 1,
"thread_id": 2,
"user_id": 7,
"last_read_message_id": 1001,
"first_read_at": "2026-02-09T18:05:00Z",
"last_read_at": "2026-02-09T18:10:00Z",
"created_at": "2026-02-09T18:10:00Z",
"updated_at": "2026-02-09T18:10:00Z",
"user": { "id": 7, "name": "Jane", "lastname": "Doe", "email": "..." }
}