Скачать спецификацию OpenAPI:Скачать
Вы можете использовать данную документацию для ознакомления с методами API. Описание составлено в формате OpenAPI 3.0. Для генерации базового кода для работы с API на удобном для вас языке программирования воспользуйтесь утилитой Swagger Codegen или онлайн-сервисом Swagger Editor.
По всем вопросам работы с API обращайтесь к нам по email: p@teletype.app
Включите Public API в настройках проекта в панели Teletype и получите токен авторизации. У каждого проекта свой токен.
Передавайте токен проекта в заголовке X-Auth-Token либо query-параметре token. Достаточно одного способа; заголовок имеет приоритет. Public API должен быть включён и доступен по тарифу проекта.
Срок действия токена не ограничен. В настройках проекта можно сгенерировать новый токен; после этого старый перестанет действовать.
Ответ API содержит success, data, errors и errorsType. Проверяйте success даже при HTTP 200: прикладные ошибки, включая авторизацию и лимиты, возвращаются в этом статусе. При ошибке data равен null. При успешном запросе errors — пустой массив, errorsType — null; data: false не равнозначен ошибке запроса. Неверный HTTP-метод отклоняется фильтром с HTTP 200 и errorsType: MethodNotAllowedException (код 405 внутри errors). Необработанное исключение при выполнении действия может вернуть HTTP 500 и errorsType: ServerException.
Идентификаторы в Public API — внешние строковые ключи. dialogId обозначает диалог, sessionId — отдельное обращение внутри него; после закрытия и нового обращения sessionId меняется.
Сообщения ошибок локализуются. До авторизации язык определяется заголовком Accept-Language (поддерживаются ru и en, по умолчанию en). После успешной авторизации по API-токену используется язык клиента — владельца проекта, если он задан. Например, сообщение ServerException на русском: «Ошибка сервера. Пожалуйста, повторите попытку позднее.». Для обработки ошибок ориентируйтесь на errorsType и errors[].code, а не на текст message.
Примеры используют условные идентификаторы. Подставьте свои значения и задайте TELETYPE_API_TOKEN в окружении.
Тела POST-запросов передавайте как форму в указанном для метода Content-Type. Вложенные значения формы используют скобки: values[field], active_webhooks[], template_params[text_variables][]. Ответы API возвращаются в JSON.
Базовые лимиты запросов указаны в таблице. Чтобы увеличить их в 2 или 5 раз, обратитесь в поддержку Teletype. Опции ×2 и ×5 покупаются отдельно и подключаются для проекта.
В пробном периоде действуют базовые лимиты. Опции не повышают лимиты методов с пометкой «Не повышается». Если оплачены обе опции, применяется ×5.
Владелец проекта определяется по API-токену в запросе. Счётчик общий для всех его проектов. Для лимитов по паре «владелец проекта + канал» у каждого канала свой счётчик. Пути указаны без префикса /public/api/v1 и идентификаторов в URL.
| Методы | Базовый | ×2 | ×5 | На кого считается |
|---|---|---|---|---|
client/details, client/dialog |
2/сек | 4/сек | 10/сек | Владелец проекта |
dialog/details, dialog/sessions, dialog/seen, dialog/group-clients |
3/сек | 6/сек | 15/сек | Владелец проекта |
session/view |
3/сек | 6/сек | 15/сек | Владелец проекта |
project/balance, project/operators |
1 за 2 сек | 2 за 2 сек | 5 за 2 сек | Владелец проекта |
dialog/create, channel/send-message |
2/сек | 4/сек | 10/сек | Владелец проекта + канал из channelId в POST |
whatsapp-edna/send-template |
2/сек | 4/сек | 10/сек | Владелец проекта + канал диалога из dialogId в POST |
messages |
2/сек | 4/сек | 10/сек | Владелец проекта¹ |
message/send |
2/сек | Не повышается | Владелец проекта + канал диалога из dialogId в POST |
|
message/delete, message/update |
2/сек | Не повышается | Владелец проекта² | |
groups, group/view |
3/сек | 6/сек | 15/сек | Владелец проекта |
group/add-member, group/remove-member |
2/сек | Не повышается | Владелец проекта | |
group/set-supervisor |
2/сек | Не повышается | Владелец проекта | |
group/set-channel-visibility |
2/сек | Не повышается | Владелец проекта | |
group/add-channel, group/remove-channel |
2/сек | Не повышается | Владелец проекта + канал из channelId в POST |
|
Методы в одной строке используют общий лимит, в разных строках - отдельные счётчики. Например, один запрос client/details и один client/dialog расходуют базовый лимит 2/сек. Если лимит считается по каналу, он общий для всех диалогов этого канала.
¹ В GET-запросе messages параметр dialogId из URL не влияет на лимит: запросы к разным диалогам учитываются вместе.
² У message/delete и message/update лимит считается по владельцу проекта. Если в POST передан dialogId и диалог найден в текущем проекте, лимит считается по паре «владелец проекта + канал диалога». Идентификатор сообщения в URL на счётчик не влияет.
Там, где в таблице указан канал диалога, он определяется по dialogId из POST. Если диалог не найден в текущем проекте или dialogId не передан, лимит считается по владельцу проекта.
При превышении лимита API возвращает HTTP 200 с success: false, errorsType: "TooManyRequestsException" и кодом 429 в errors[].code. Проверяйте тело ответа: HTTP-статус остаётся 200 и при этой ошибке.
Повторите запрос после паузы. Частые повторные запросы могут продлевать ограничение.
При проверке лимита в ответ добавляются заголовки:
X-Rate-Limit-Limit - лимит запросов за интервал из таблицы с учётом опции ×2 или ×5.X-Rate-Limit-Remaining - оставшееся количество запросов.X-Rate-Limit-Reset - примерное количество секунд до полного восстановления лимита.Возвращает текущий баланс в копейках, дату, до которой хватит средств, остаток пробного периода и размер обещанного платежа.
Лимит: 1 запрос за 2 секунды на владельца проекта. С опцией ×2 - 2, с ×5 - 5 за 2 секунды. Общий для методов project/balance, project/operators.
Подробнее об ограничениях запросов.
curl --request GET "https://api.teletype.app/public/api/v1/project/balance" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": {
- "balance": 100000,
- "paidUntilDate": "2026-09-30",
- "promoDaysRemain": 0,
- "promoEndDate": null,
- "promisedPayment": 0
}, - "errors": [ ],
- "errorsType": null
}Возвращает список операторов проекта без пагинации.
Лимит: 1 запрос за 2 секунды на владельца проекта. С опцией ×2 - 2, с ×5 - 5 за 2 секунды. Общий для методов project/balance, project/operators.
Подробнее об ограничениях запросов.
curl --request GET "https://api.teletype.app/public/api/v1/project/operators" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": [
- {
- "id": "operator_1",
- "email": "operator@example.com",
- "status": 20,
- "name": "Анна",
- "last_name": "Иванова",
- "timezone": "Europe/Moscow",
- "language": "ru",
- "roles": [
- "operator"
]
}
], - "errors": [ ],
- "errorsType": null
}Возвращает идентификатор проекта, URL получателя, включённые события и общий счётчик ошибок вебхука.
curl --request GET "https://api.teletype.app/public/api/v1/project/api-status" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": {
- "projectId": "project_1",
- "activeWebhooks": [
- "new message",
- "message status change"
], - "webhookErrorsCount": 0
}, - "errors": [ ],
- "errorsType": null
}Возвращает основные сведения о проекте: id, owner_id, name, domain, url и createdAt.
curl --request GET "https://api.teletype.app/public/api/v1/project/details" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": {
- "id": "project_1",
- "owner_id": "owner_1",
- "name": "Поддержка",
- "domain": "support-example",
- "createdAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}
}, - "errors": [ ],
- "errorsType": null
}Возвращает баланс, стоимость услуг, тарифные опции, пакеты и настройки автоплатежа текущего проекта. Денежные суммы указаны в копейках.
curl --request GET "https://api.teletype.app/public/api/v1/project/tariff" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": {
- "project": {
- "id": "project_1",
- "owner_id": "owner_1",
- "name": "Поддержка",
- "domain": "support-example",
- "createdAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}
}, - "active": true,
- "paid": true,
- "dailyPayment": 99700,
- "dailyPaymentByPrice": 99700,
- "balance": {
- "total": 0
}, - "promoDaysGranted": 3,
- "promoDaysRemain": 0,
- "promoEndDate": null,
- "packagePrice": [ ],
- "options": {
- "operators": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "groups": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 1
}, - "telegram-bot-application": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 0
}, - "online-chat": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "whatsapp": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "telegram-bot": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "vk": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "facebook": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "viber": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "email": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "instagram-comments": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "statistic": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 1
}, - "messages-templates": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 1
}, - "amo-crm": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 1
}, - "telegram-notifier": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 1
}, - "telegram": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "instagram-direct": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "branding-link": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 0
}, - "bitrix24": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 1
}, - "public-api": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 1
}, - "roistat": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 0
}, - "whatsapp-free": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "instagram-comments-business": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "whatsapp-phone": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "avito": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "messengers-button": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "instagram-direct-business": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "moi-sklad": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 1
}, - "joinposter": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 1
}, - "yclients": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 1
}, - "sber-crm": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 1
}, - "vk-direct": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "sipuni": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 1
}, - "categories": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 1
}, - "teletype-sender": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 0
}, - "tags": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 1
}, - "whatsapp-edna": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "time-tracker": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 1
}, - "max-bot": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "max": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "max-phone": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "sms-plusofon": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "kakao": {
- "category": "multiple",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 5
}, - "superset-analytics": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 1
}, - "public-api-rate-limit-x2": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 1
}, - "public-api-rate-limit-x5": {
- "category": "binary",
- "price": {
- "1": 8500
}, - "promoPrice": null,
- "count": 0
}
}, - "packages": [ ],
- "autopayEnabled": false,
- "autopayBalance": null,
- "autopayAmount": null,
- "cardNumber": null,
- "cardType": null,
- "paidEntities": {
- "operators": [
- "3QMa5NlOyv0LBQ9StiLRtun9zmN9zM5U4YETgV959X2zMLBumLxd-MxtBSnAPkd8"
], - "groups": true,
- "online-chat": [
- "EeVl5R_AoDicrzjTk_rdThGdeo3hW6Y6D-knt7sEFU6JDDF54X_5EXDz_ls5J0kN"
], - "whatsapp": [
- "k9cyGcYeZmKAhK29GbZuRVfsSTrW98OISdXbWOCk3b71UFRYBJEe8Unqpkp_9wzj"
], - "vk": [
- "0xqZW9DmYJhb9FfAWQeeVo_BmQudmLtQNIdOX0-EVKwO-A6-WEvYRlMswiuRgIJV"
], - "facebook": [
- "FbT7paehuoMl8N8ls0RbjfHbpsaf5RznwHZnWacfhnHC_tAFbWRzCdYzXj6ngF8K"
], - "viber": [
- "ViF7paehuoMl8N8ls0RbjfHbpsaf5RznwHZnWacfhnHC_tAFbWRzCdYzXj6ngV1B"
], - "email": [
- "HU7KA45XVbjzkupWCZlv3T8qaPj7NIpxhJa8GGTFj-R3fGvdGsRRKOVyUK87hHFg"
], - "statistic": true,
- "messages-templates": true,
- "amo-crm": [
- "AmC5paehuoMl8N8ls0RbjfHbpsaf5RznwHZnWacfhnHC_tAFbWRzCdYzXj6ngA2M"
], - "telegram-notifier": true,
- "telegram": [
- "dBt7paehuoMl8N8ls0RbjfHbpsaf5RznwHZnWacfhnHC_tAFbWRzCdYzXj6ngY1B"
], - "branding-link": false,
- "bitrix24": [
- "idrhfBN75MyuaWxfhmPT914GRL4cmYq5IU5EOvU5yk_ooBzm5d4BZ6LZSZJOymSl"
], - "public-api": true,
- "roistat": false,
- "instagram-comments-business": [
- "BcF7paehuoMl8N8ls0RbjfHbpsaf5RznwHZnWacfhnHC_tAFbWRzCdYzXj6ngI3H"
], - "whatsapp-phone": false,
- "avito": [
- "AtF7paehuoMl8N8ls0RbjfHbpsaf5RznwHZnWacfhnHC_tAFbWRzCdYzXj6ngA9N"
], - "messengers-button": [
- "BtF7paehuoMl8N8ls0RbjfHbpsaf5RznwHZnWacfhnHC_tAFbWRzCdYzXj6ngB3K"
], - "instagram-direct-business": [
- "IdB7paehuoMl8N8ls0RbjfHbpsaf5RznwHZnWacfhnHC_tAFbWRzCdYzXj6ngI6O"
], - "moi-sklad": [
- "MsF7paehuoMl8N8ls0RbjfHbpsaf5RznwHZnWacfhnHC_tAFbWRzCdYzXj6ngM2P"
], - "sber-crm": [
- "ScF7paehuoMl8N8ls0RbjfHbpsaf5RznwHZnWacfhnHC_tAFbWRzCdYzXj6ngS4T"
], - "vk-direct": [
- "VkD7paehuoMl8N8ls0RbjfHbpsaf5RznwHZnWacfhnHC_tAFbWRzCdYzXj6ngV3Y"
], - "sipuni": [
- "SpF7paehuoMl8N8ls0RbjfHbpsaf5RznwHZnWacfhnHC_tAFbWRzCdYzXj6ngS9E"
], - "categories": true,
- "teletype-sender": false,
- "tags": true,
- "whatsapp-edna": [
- "9fmycXZPepjl3EURE7ejd8Q1nIB0U2UUZCtFDgJvahPs2AEy5cPfh_gt0nK88YDW"
], - "time-tracker": true,
- "max-bot": [
- "MbF7paehuoMl8N8ls0RbjfHbpsaf5RznwHZnWacfhnHC_tAFbWRzCdYzXj6ngM8B"
], - "telegram-bot": [
- "I_Ez6M7Y3Bu64es2gWVq62EUsOAEIwBcm5yxb00vDJqT2pn_oFPPGY0zqx45cAI3"
], - "max": [
- "SpF7paehuoMl8N8ls0RbjfHbpsaf5RznwHZnWacfhnHC_tAFbWRzCdYzXj6ngS9E"
], - "max-phone": true,
- "sms-plusofon": [
- "SmF7paehuoMl8N8ls0RbjfHbpsaf5RznwHZnWacfhnHC_tAFbWRzCdYzXj6ngS7P"
], - "kakao": [
- "KaF7paehuoMl8N8ls0RbjfHbpsaf5RznwHZnWacfhnHC_tAFbWRzCdYzXj6ngK4O"
], - "superset-analytics": true,
- "public-api-rate-limit-x2": true,
- "public-api-rate-limit-x5": false,
- "instagram-direct": [
- "string"
], - "instagram-comments": [
- "string"
], - "joinposter": [
- "string"
], - "yclients": [
- "string"
], - "whatsapp-free": [
- "string"
], - "telegram-bot-application": false
}, - "promisedPayment": 0
}, - "errors": [ ],
- "errorsType": null
}Заменяет URL получателя и набор активных вебхуков. Передавайте обе настройки: отсутствие api_webhook удаляет URL, отсутствие active_webhooks отключает все события.
| active_webhooks[] | Массив элементов: strings Допустимые элементы Допустимые значения: "close dialog" "new dialog" "open dialog" "message status change" "new note" "new message" "success send" "person change" "appeal rate" "messages templates updated" "session operator changed" "channel deleted" "channel status updated" "message deleted" События для включения. Имя поля на уровне HTTP содержит PHP-скобки: повторяйте |
| api_webhook | string URL получателя. Если поле отсутствует или пустое, текущий URL удаляется. |
curl --request POST "https://api.teletype.app/public/api/v1/project/update-public-api" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --data-urlencode 'active_webhooks[]=new message' \ --data-urlencode 'active_webhooks[]=message status change' \ --data-urlencode 'api_webhook=https://example.com/webhook'
{- "success": true,
- "data": true,
- "errors": [ ],
- "errorsType": null
}Возвращает страницу полностью созданных каналов проекта, не помеченных к удалению, от новых к старым. По умолчанию выбираются только активные каналы; onlyActive=0 отключает этот фильтр. channelType фильтрует по типу; специальное значение phoneBased выбирает номерные WhatsApp и Telegram.
| page | integer По умолчанию: 1 Номер страницы, начиная с 1. Значения меньше 1 приводятся к 1. |
| pageSize | integer По умолчанию: 15 Размер страницы: от 1 до 100. По умолчанию 15; значения вне диапазона заменяются на 15. |
| channelType | string Допустимые значения: "web_widget" "email" "telegram" "facebook" "whatsapp_chat_api" "vk" "viber" "telegram-bot" "whatsapp_teletype" "instagram_comment" "instagram_direct" "instagram_comments_business" "avito" "instagram_direct_business" "vk_direct" "whatsapp_edna" "max_bot" "max" "sms_plusofon" "kakao" "phoneBased" Пример: channelType=whatsapp_teletype Тип канала, например |
| onlyActive | integer По умолчанию: 1 Допустимые значения: 0 1 Только активные каналы. Передавайте 0 или 1; по умолчанию 1. |
curl --request GET "https://api.teletype.app/public/api/v1/channels" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": {
- "currentPage": 1,
- "totalItems": 1,
- "totalPages": 1,
- "pageSize": 15,
- "items": [
- {
- "id": "channel_1",
- "name": "Поддержка в Telegram",
- "type": "telegram",
- "active": true,
- "state": "active",
- "dialogCount": 1,
- "creationStep": 40,
- "source": {
- "phone": "+79991111111"
}
}
]
}, - "errors": [ ],
- "errorsType": null
}Находит или создаёт диалог в указанном канале и отправляет сообщение. Требования к clientPhone, clientEmail и clientUsername совпадают с POST /dialog/create. Необходим непустой text либо вложение file/url.
Возвращает data.dialog и массив идентификаторов data.messages. autoClose=1 закрывает только вновь созданное обращение. Существующее обращение не закрывается. Ошибка отправки может привести к пустому data.messages при success: true. Для асинхронных каналов отслеживайте доставку через вебхуки.
Лимит: 2 запроса в секунду на владельца проекта и канал из channelId в POST. С опцией ×2 - 4, с ×5 - 10 в секунду. Общий для методов dialog/create, channel/send-message.
Подробнее об ограничениях запросов.
| channelId обязательно | string Идентификатор канала |
| clientPhone | string Телефон получателя. Обязателен для номерных WhatsApp, WhatsApp Edna, MAX, SMS Plusofon и KakaoTalk; для Telegram и VK через профиль допустим вместо |
| clientEmail | string Email получателя |
| clientUsername | string Username получателя. Обязателен для |
| autoClose | integer По умолчанию: 0 Допустимые значения: 0 1 Закрыть только вновь созданное обращение: |
| text | string Текст сообщения |
| file | string <binary> Вложенный файл |
| url | string Ссылка на вложенный файл. Используется если не передан |
| replied_message_id | string Идентификатор цитируемого сообщения |
curl --request POST "https://api.teletype.app/public/api/v1/channel/send-message" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --form-string 'channelId=Hgdt532edLkgd' \ --form-string 'text=Здравствуйте!' \ --form-string 'clientPhone=+79990000000'
{- "success": true,
- "data": {
- "messages": [
- "message_1"
]
}, - "errors": [ ],
- "errorsType": null
}Отправляет WABA-шаблон в существующий диалог канала whatsapp_edna. В пути id указывается канал; dialogId и templateId должны относиться к этому каналу и текущему проекту. Переменные передаются в template_params, опции — в template_options. Возвращает идентификаторы созданных сообщений, а не подтверждение доставки.
Лимит: 2 запроса в секунду на владельца проекта. С опцией ×2 - 4, с ×5 - 10 в секунду. Если в POST передан dialogId и диалог найден в текущем проекте, лимит считается по владельцу проекта и каналу этого диалога. Параметр id в URL на счётчик не влияет.
Подробнее об ограничениях запросов.
| id обязательно | string Идентификатор канала |
| dialogId обязательно | string Идентификатор диалога |
| templateId обязательно | string Идентификатор шаблона |
| template_params[text_variables][] | Массив элементов: strings Переменные текста, по порядку. Повторяйте полное имя поля для каждого значения. |
| template_params[header_variables][] | Массив элементов: strings Переменные заголовка, по порядку. |
| template_params[button_variables][] | Массив элементов: strings Переменные кнопок, по порядку. |
| template_params[attachment][url] | string <uri> URL вложения. |
| template_params[attachment][name] | string По умолчанию: "file" Имя файла. |
| template_options[comment] | string Комментарий к отправке. |
| template_options[sendDelay] | integer Задержка отправки, передаваемая провайдеру. |
| template_options[priority] | string Допустимые значения: "LOW" "NORMAL" "HIGH" "REALTIME" Приоритет отправки. |
curl --request POST "https://api.teletype.app/public/api/v1/whatsapp-edna/send-template/example_id" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --data-urlencode 'dialogId=example_dialogId' \ --data-urlencode 'templateId=example_templateId' \ --data-urlencode 'template_params[text_variables][]=Иван' \ --data-urlencode 'template_params[text_variables][]=12345' \ --data-urlencode 'template_params[attachment][url]=https://example.com/file.pdf' \ --data-urlencode 'template_params[attachment][name]=file.pdf' \ --data-urlencode 'template_options[priority]=NORMAL' \ --data-urlencode 'template_options[sendDelay]=0' \ --data-urlencode 'template_options[comment]=Отправка через Public API'
{- "success": true,
- "data": {
- "ids": [
- "example_messageId"
]
}, - "errors": [ ],
- "errorsType": null
}Методы API для просмотра групп операторов и управления их участниками, каналами и правами
Возвращает группы операторов текущего проекта с участниками, супервизорами и настройками каналов
Лимит: 3 запроса в секунду на владельца проекта. С опцией ×2 - 6, с ×5 - 15 в секунду. Общий для методов groups, group/view.
Подробнее об ограничениях запросов.
curl --request GET "https://api.teletype.app/public/api/v1/groups" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": [
- {
- "id": "group_1",
- "name": "Поддержка",
- "description": "Операторы поддержки",
- "color": "#51C951",
- "operatorIds": [
- "operator_1"
], - "supervisorIds": [ ],
- "channels": [
- {
- "channelId": "channel_1",
- "canViewOtherDialogs": true
}
]
}
], - "errors": [ ],
- "errorsType": null
}Возвращает информацию об указанной группе текущего проекта
Лимит: 3 запроса в секунду на владельца проекта. С опцией ×2 - 6, с ×5 - 15 в секунду. Общий для методов groups, group/view.
Подробнее об ограничениях запросов.
| groupId обязательно | string Идентификатор группы |
curl --request GET "https://api.teletype.app/public/api/v1/group/view/example_groupId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": {
- "id": "group_1",
- "name": "Поддержка",
- "description": "Операторы поддержки",
- "color": "#51C951",
- "operatorIds": [
- "operator_1"
], - "supervisorIds": [ ],
- "channels": [
- {
- "channelId": "channel_1",
- "canViewOtherDialogs": true
}
]
}, - "errors": [ ],
- "errorsType": null
}Добавляет оператора текущего проекта в указанную группу
Лимит: 2 запроса в секунду на владельца проекта. Опции ×2 и ×5 не повышают лимит. Общий для методов group/add-member, group/remove-member.
Подробнее об ограничениях запросов.
Требуется оплаченная или доступная в пробном периоде опция групп операторов.
| groupId обязательно | string Идентификатор группы |
| operatorId обязательно | string Идентификатор оператора |
curl --request POST "https://api.teletype.app/public/api/v1/group/add-member/example_groupId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --form-string 'operatorId=example_operatorId'
{- "success": true,
- "data": true,
- "errors": [ ],
- "errorsType": null
}Удаляет оператора из указанной группы
Лимит: 2 запроса в секунду на владельца проекта. Опции ×2 и ×5 не повышают лимит. Общий для методов group/add-member, group/remove-member.
Подробнее об ограничениях запросов.
Требуется оплаченная или доступная в пробном периоде опция групп операторов.
| groupId обязательно | string Идентификатор группы |
| operatorId обязательно | string Идентификатор оператора |
curl --request POST "https://api.teletype.app/public/api/v1/group/remove-member/example_groupId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --form-string 'operatorId=example_operatorId'
{- "success": true,
- "data": true,
- "errors": [ ],
- "errorsType": null
}Добавляет канал текущего проекта в указанную группу
Лимит: 2 запроса в секунду на владельца проекта и канал из channelId в POST. Опции ×2 и ×5 не повышают лимит. Общий для методов group/add-channel, group/remove-channel.
Подробнее об ограничениях запросов.
Требуется оплаченная или доступная в пробном периоде опция групп операторов.
| groupId обязательно | string Идентификатор группы |
| channelId обязательно | string Идентификатор канала |
curl --request POST "https://api.teletype.app/public/api/v1/group/add-channel/example_groupId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --form-string 'channelId=example_channelId'
{- "success": true,
- "data": true,
- "errors": [ ],
- "errorsType": null
}Удаляет канал текущего проекта из указанной группы
Лимит: 2 запроса в секунду на владельца проекта и канал из channelId в POST. Опции ×2 и ×5 не повышают лимит. Общий для методов group/add-channel, group/remove-channel.
Подробнее об ограничениях запросов.
Требуется оплаченная или доступная в пробном периоде опция групп операторов.
| groupId обязательно | string Идентификатор группы |
| channelId обязательно | string Идентификатор канала |
curl --request POST "https://api.teletype.app/public/api/v1/group/remove-channel/example_groupId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --form-string 'channelId=example_channelId'
{- "success": true,
- "data": true,
- "errors": [ ],
- "errorsType": null
}Включает или выключает права супервизора у участника указанной группы
Лимит: 2 запроса в секунду на владельца проекта. Опции ×2 и ×5 не повышают лимит. Подробнее об ограничениях запросов.
Требуется оплаченная или доступная в пробном периоде опция групп операторов.
| groupId обязательно | string Идентификатор группы |
| operatorId обязательно | string Идентификатор участника группы |
| isSupervisor обязательно | boolean Признак наличия прав супервизора |
curl --request POST "https://api.teletype.app/public/api/v1/group/set-supervisor/example_groupId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --form-string 'operatorId=example_operatorId' \ --form-string 'isSupervisor=true'
{- "success": true,
- "data": true,
- "errors": [ ],
- "errorsType": null
}Изменяет видимость диалогов, назначенных другим операторам, для обычных участников группы в указанном канале. Супервизоры группы всегда видят такие диалоги
Лимит: 2 запроса в секунду на владельца проекта. Опции ×2 и ×5 не повышают лимит. Подробнее об ограничениях запросов.
Требуется оплаченная или доступная в пробном периоде опция групп операторов.
| groupId обязательно | string Идентификатор группы |
| channelId обязательно | string Идентификатор канала, подключенного к группе |
| canViewOtherDialogs обязательно | boolean Разрешено ли обычным участникам группы видеть диалоги, назначенные другим операторам |
curl --request POST "https://api.teletype.app/public/api/v1/group/set-channel-visibility/example_groupId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --form-string 'channelId=example_channelId' \ --form-string 'canViewOtherDialogs=true'
{- "success": true,
- "data": true,
- "errors": [ ],
- "errorsType": null
}Без clientId возвращает страницу клиентов проекта с краткими профилями в data.items. При непустом clientId возвращает один краткий профиль в data, без полей пагинации. Фильтры clientPhone и tagIds[] действуют и при поиске по clientId.
Для подробного профиля используйте GET /client/details/{clientId}. Если по clientId не найден клиент с учётом фильтров, текущая реализация может вернуть HTTP 500 вместо прикладной ошибки «не найдено».
| page | integer По умолчанию: 1 Номер страницы, начиная с 1. Значения меньше 1 приводятся к 1. |
| pageSize | integer По умолчанию: 15 Размер страницы: от 1 до 100. По умолчанию 15; значения вне диапазона заменяются на 15. |
| clientId | string Идентификатор клиента |
| clientPhone | string Пример: clientPhone=+79161234567 Поиск по части нормализованного номера телефона клиента. |
| tagIds[] | Массив элементов: strings Пример: tagIds[]=yVenn4PjxvQKj15QJ1Vi5xSRfyMxseBHvOxeq4gluZmPdyS4MTltLuKtfVOQj9eL Идентификаторы тегов: |
curl --request GET "https://api.teletype.app/public/api/v1/clients" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": {
- "currentPage": 1,
- "totalItems": 1,
- "totalPages": 1,
- "pageSize": 15,
- "items": [
- {
- "id": "client_1",
- "isOnline": false,
- "lastOnlineAt": null,
- "phoneIsLocked": true,
- "emailIsLocked": false,
- "banned": false,
- "averageRate": null,
- "firstMessageAt": "2026-09-08T09:00:00+00:00",
- "lastMessageAt": "2026-09-08T09:00:00+00:00",
- "name": "Иван",
- "avatar": null,
- "avatarOriginal": null,
- "color": "#51C951",
- "animal": null,
- "phone": "+79990000000",
- "email": null
}
]
}, - "errors": [ ],
- "errorsType": null
}Возвращает последний диалог клиента с учётом фильтров канала. По умолчанию рассматриваются только активные каналы. При заданном channelId фильтр onlyActive не применяется. Если у найденного диалога нет обращения, sessionId и url равны false.
Лимит: 2 запроса в секунду на владельца проекта. С опцией ×2 - 4, с ×5 - 10 в секунду. Общий для методов client/details, client/dialog.
Подробнее об ограничениях запросов.
| clientId обязательно | string Идентификатор клиента |
| channelId | string Идентификатор канала |
| channelType | string Пример: channelType=whatsapp_teletype Тип канала, например |
| onlyActive | integer По умолчанию: 1 Допустимые значения: 0 1 Искать только среди активных каналов, если |
curl --request GET "https://api.teletype.app/public/api/v1/client/dialog" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --get \ --data-urlencode 'clientId=example_clientId'
{- "success": true,
- "data": {
- "id": "dialog_1",
- "sessionId": "session_1",
}, - "errors": [ ],
- "errorsType": null
}Возвращает подробную информацию о клиенте
Лимит: 2 запроса в секунду на владельца проекта. С опцией ×2 - 4, с ×5 - 10 в секунду. Общий для методов client/details, client/dialog.
Подробнее об ограничениях запросов.
| clientId обязательно | string Идентификатор клиента |
curl --request GET "https://api.teletype.app/public/api/v1/client/details/example_clientId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": {
- "id": "client_1",
- "isOnline": false,
- "lastOnlineAt": null,
- "phoneIsLocked": true,
- "emailIsLocked": false,
- "banned": false,
- "averageRate": {
- "code": 50,
- "rate": "5",
- "emoji": "😍"
}, - "firstMessageAt": "2026-09-08T09:00:00+00:00",
- "lastMessageAt": "2026-09-08T09:00:00+00:00",
- "name": "Иван",
- "avatar": null,
- "avatarOriginal": null,
- "color": "#51C951",
- "animal": null,
- "phone": "+79990000000",
- "email": null,
- "vk": null,
- "responsibleClient": null,
- "tags": [ ],
- "instagram": null,
- "telegram": null,
- "telegram_bot": null,
- "amo": null,
- "info": {
- "utmSource": null,
- "utmMedium": null,
- "utmCampaign": null,
- "utmTerm": null,
- "utmContent": null,
- "referrerUrl": null,
- "roistatVisit": null,
- "additionalPayload": {
- "source": "website"
}
}, - "crmLinks": [ ],
- "customFields": {
- "city": "Омск",
- "orderCount": "3"
}, - "location": null,
- "language": null,
- "timezone": null,
- "date": null,
- "userAgent": null,
- "userAgentVersion": null,
- "devicePlatform": null,
- "devicePlatformVersion": null,
- "gender": null,
- "device": null,
- "ip": null,
- "notes": [
- {
- "id": "note_1",
- "operator": {
- "id": "operator_1",
- "name": "Анна",
- "isOnline": true,
- "isOperator": true,
}, - "person_id": "client_1",
- "text": "Связаться с клиентом завтра.",
- "created_at": "2026-09-08T09:00:00+00:00"
}
], - "pagesHistory": [ ],
- "appealsHistory": [ ]
}, - "errors": [ ],
- "errorsType": null
}Изменяет переданные name, phone, email и дополнительные данные; возвращает полный профиль клиента. Редактирование телефона запрещено для номерных каналов и при защите номера, электронной почты — для почтовых каналов.
additional_payload передаётся JSON-строкой. По умолчанию значения объединяются с существующими. В текущей реализации force_additional_payload считывается только вместе с хотя бы одним из полей name, phone или email.
| clientId обязательно | string Идентификатор клиента |
| name | string Имя клиента |
| phone | string Телефон клиента |
string E-mail клиента | |
| additional_payload | string JSON-строка с дополнительными данными клиента, например |
| force_additional_payload | integer Допустимые значения: 0 1 Признак необходимости перезаписать имеющиеся в массиве дополнительной информации данные Передавайте |
curl --request POST "https://api.teletype.app/public/api/v1/client/update/example_clientId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --data-urlencode 'name=Иван'
{- "success": true,
- "data": {
- "id": "client_1",
- "isOnline": false,
- "lastOnlineAt": null,
- "phoneIsLocked": true,
- "emailIsLocked": false,
- "banned": false,
- "averageRate": {
- "code": 50,
- "rate": "5",
- "emoji": "😍"
}, - "firstMessageAt": "2026-09-08T09:00:00+00:00",
- "lastMessageAt": "2026-09-08T09:00:00+00:00",
- "name": "Иван",
- "avatar": null,
- "avatarOriginal": null,
- "color": "#51C951",
- "animal": null,
- "phone": "+79990000000",
- "email": null,
- "vk": null,
- "responsibleClient": null,
- "tags": [ ],
- "instagram": null,
- "telegram": null,
- "telegram_bot": null,
- "amo": null,
- "info": {
- "utmSource": null,
- "utmMedium": null,
- "utmCampaign": null,
- "utmTerm": null,
- "utmContent": null,
- "referrerUrl": null,
- "roistatVisit": null,
- "additionalPayload": {
- "source": "website"
}
}, - "crmLinks": [ ],
- "customFields": {
- "city": "Омск",
- "orderCount": "3"
}, - "location": null,
- "language": null,
- "timezone": null,
- "date": null,
- "userAgent": null,
- "userAgentVersion": null,
- "devicePlatform": null,
- "devicePlatformVersion": null,
- "gender": null,
- "device": null,
- "ip": null,
- "notes": [
- {
- "id": "note_1",
- "operator": {
- "id": "operator_1",
- "name": "Анна",
- "isOnline": true,
- "isOperator": true,
}, - "person_id": "client_1",
- "text": "Связаться с клиентом завтра.",
- "created_at": "2026-09-08T09:00:00+00:00"
}
], - "pagesHistory": [ ],
- "appealsHistory": [ ]
}, - "errors": [ ],
- "errorsType": null
}Возвращает значения пользовательских полей по их публичным названиям. Если поля не настроены, возвращает пустой массив [].
| clientId обязательно | string Идентификатор клиента |
curl --request GET "https://api.teletype.app/public/api/v1/client/get-custom-fields/example_clientId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": {
- "city": "Омск"
}, - "errors": [ ],
- "errorsType": null
}Обновляет переданные значения пользовательских полей и возвращает их текущий набор. Ключи values — публичные названия полей из настроек проекта. Неизвестные ключи игнорируются; при пустом или отсутствующем values изменения не выполняются.
Пример поля формы: values[city]=Омск. Для логических значений используйте 1 и 0: строка false при приведении к логическому типу считается истинной.
| clientId обязательно | string Идентификатор клиента |
object Значения по ключам пользовательских полей. Объект сериализуется в PHP-скобочной нотации, например |
values[custom_field_1]=value1&values[custom_field_2]=value2
{- "success": true,
- "data": {
- "city": "Омск"
}, - "errors": [ ],
- "errorsType": null
}Возвращает теги текущего проекта без пагинации, в алфавитном порядке по названию.
curl --request GET "https://api.teletype.app/public/api/v1/tag/list" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": [
- {
- "id": "tag_1",
- "tag": "Постоянный клиент",
- "color": "#51C951",
- "project_id": "project_1",
- "description": null
}
], - "errors": [ ],
- "errorsType": null
}Добавляет тег у клиента. Тег связан с объединённой карточкой, поэтому изменение видно и в связанных профилях клиента в других каналах текущего проекта.
| clientId обязательно | string Идентификатор клиента |
| tag_id обязательно | string Идентификатор тега, который хотим установить |
curl --request POST "https://api.teletype.app/public/api/v1/client/add-tag/example_clientId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --data-urlencode 'tag_id=example_tagId'
{- "success": true,
- "data": true,
- "errors": [ ],
- "errorsType": null
}Удаляет тег у клиента. Тег связан с объединённой карточкой, поэтому изменение видно и в связанных профилях клиента в других каналах текущего проекта.
| clientId обязательно | string Идентификатор клиента |
| tag_id обязательно | string Идентификатор тега, который хотим удалить |
curl --request POST "https://api.teletype.app/public/api/v1/client/remove-tag/example_clientId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --data-urlencode 'tag_id=example_tagId'
{- "success": true,
- "data": true,
- "errors": [ ],
- "errorsType": null
}Возвращает массив заметок о клиенте, от новых к старым, без пагинации. Если заметок нет, data равен [].
| clientId обязательно | string Идентификатор клиента |
curl --request GET "https://api.teletype.app/public/api/v1/client/notes-list/example_clientId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": [
- {
- "id": "note_1",
- "operator": {
- "id": "operator_1",
- "name": "Анна",
- "isOnline": true,
- "isOperator": true,
}, - "person_id": "client_1",
- "text": "Связаться с клиентом завтра.",
- "created_at": "2026-09-08T09:00:00+00:00"
}
], - "errors": [ ],
- "errorsType": null
}Создаёт заметку с обязательным непустым text для клиента и возвращает её id. Заметка связывается с найденным обращением клиента.
| clientId обязательно | string Идентификатор клиента |
| text обязательно | string non-empty Текст заметки |
curl --request POST "https://api.teletype.app/public/api/v1/client/create-note/example_clientId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --data-urlencode 'text=Здравствуйте!'
{- "success": true,
- "data": {
- "id": "note_1"
}, - "errors": [ ],
- "errorsType": null
}Удаляет заметку текущего проекта по noteId и возвращает логический результат удаления.
| noteId обязательно | string Идентификатор заметки |
curl --request GET "https://api.teletype.app/public/api/v1/client/delete-note/example_noteId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": true,
- "errors": [ ],
- "errorsType": null
}Возвращает страницу диалогов проекта, от последних активных к более старым. totalUnanswered — количество неотвеченных диалогов только на возвращённой странице. Фильтры канала, статуса и тегов применяются совместно.
| page | integer По умолчанию: 1 Номер страницы, начиная с 1. Значения меньше 1 приводятся к 1. |
| pageSize | integer По умолчанию: 15 Размер страницы: от 1 до 100. По умолчанию 15; значения вне диапазона заменяются на 15. |
| status | string По умолчанию: "all" Допустимые значения: "all" "open" "close" Пример: status=open Статус диалога |
| channelId | string Идентификатор канала |
| channelType | string Пример: channelType=whatsapp_teletype Тип канала, например |
| tagIds[] | Массив элементов: strings Пример: tagIds[]=yVenn4PjxvQKj15QJ1Vi5xSRfyMxseBHvOxeq4gluZmPdyS4MTltLuKtfVOQj9eL Идентификаторы тегов: |
curl --request GET "https://api.teletype.app/public/api/v1/dialogs" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": {
- "currentPage": 1,
- "totalItems": 1,
- "totalPages": 1,
- "pageSize": 15,
- "items": [
- {
- "id": "dialog_1",
- "lastSessionId": "session_1",
- "client": {
- "id": "client_1",
- "name": "Иван",
- "avatar": null,
- "phone": "+79990000000"
}, - "status": 10,
- "statusName": "open",
- "lastMessage": {
- "id": "message_1",
- "dialogId": "dialog_1",
- "sessionId": "session_1",
- "text": "Здравствуйте!",
- "attachments": [ ],
- "operator": null,
- "client": {
- "id": "client_1",
- "name": "Иван",
- "avatar": null,
- "phone": "+79990000000"
}, - "status": 30,
- "isItClient": true,
- "seen": false,
- "createdAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "sentAt": null,
- "isGroupChat": false,
- "forwarded": false,
- "forwardedFrom": null,
- "type": 10,
- "channel": {
- "id": "channel_1",
- "name": "Поддержка в Telegram",
- "type": "telegram"
}, - "provider": 10,
- "repliedMessage": null
}, - "channel": {
- "id": "channel_1",
- "name": "Поддержка в Telegram",
- "type": "telegram"
}, - "createdAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "isUnanswered": true,
- "seen": false,
- "countNewMessages": 1,
- "lastMessageAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "isGroupChat": false,
- "lastCategoryId": null
}
], - "totalUnanswered": 1
}, - "errors": [ ],
- "errorsType": null
}Возвращает сведения о последнем обращении в указанном диалоге. sessionId — идентификатор этого обращения. Если диалог или последнее обращение не найдены, возвращается прикладная ошибка.
Лимит: 3 запроса в секунду на владельца проекта. С опцией ×2 - 6, с ×5 - 15 в секунду. Общий для методов dialog/details, dialog/sessions, dialog/seen, dialog/group-clients.
Подробнее об ограничениях запросов.
| dialogId обязательно | string Идентификатор диалога |
curl --request GET "https://api.teletype.app/public/api/v1/dialog/details/example_dialogId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": {
- "sessionId": "session_1",
- "client": {
- "id": "client_1",
- "name": "Иван",
- "avatar": null,
- "phone": "+79990000000"
}, - "isOpen": true,
- "isGroupChat": false,
- "isUnanswered": true,
- "seen": false,
- "countNewMessages": 1,
- "channelId": "channel_1",
- "categoryId": null,
- "channelSpecificData": null
}, - "errors": [ ],
- "errorsType": null
}Возвращает страницу обращений внутри диалога, от новых к старым. sessionId идентифицирует обращение. Поле operator отражает текущего оператора диалога, а не исторического оператора обращения.
Лимит: 3 запроса в секунду на владельца проекта. С опцией ×2 - 6, с ×5 - 15 в секунду. Общий для методов dialog/details, dialog/sessions, dialog/seen, dialog/group-clients.
Подробнее об ограничениях запросов.
| dialogId обязательно | string Идентификатор диалога |
| page | integer По умолчанию: 1 Номер страницы, начиная с 1. Значения меньше 1 приводятся к 1. |
| pageSize | integer По умолчанию: 15 Размер страницы: от 1 до 100. По умолчанию 15; значения вне диапазона заменяются на 15. |
curl --request GET "https://api.teletype.app/public/api/v1/dialog/sessions/example_dialogId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": {
- "currentPage": 1,
- "totalItems": 1,
- "totalPages": 1,
- "pageSize": 15,
- "items": [
- {
- "sessionId": "session_1",
- "isOpen": true,
- "channelId": "channel_1",
- "categoryId": null,
- "openedAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "closedAt": null,
- "rate": null
}
]
}, - "errors": [ ],
- "errorsType": null
}Возвращает участников группового диалога. Для синхронизированного группового чата используется актуальный состав; до завершения синхронизации — клиенты, у которых есть сообщения в диалоге. Для обычного диалога возвращается прикладная ошибка.
Лимит: 3 запроса в секунду на владельца проекта. С опцией ×2 - 6, с ×5 - 15 в секунду. Общий для методов dialog/details, dialog/sessions, dialog/seen, dialog/group-clients.
Подробнее об ограничениях запросов.
| dialogId обязательно | string Идентификатор диалога |
curl --request GET "https://api.teletype.app/public/api/v1/dialog/group-clients/example_dialogId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": [
- {
- "id": "client_1",
- "name": "Иван",
- "avatar": null,
- "phone": "+79990000000"
}
], - "errors": [ ],
- "errorsType": null
}Закрывает диалог. При успешном закрытии запускает запрос оценки, если он предусмотрен настройками и каналом. data показывает результат закрытия.
| dialogId обязательно | string Идентификатор диалога |
curl --request POST "https://api.teletype.app/public/api/v1/dialog/close/example_dialogId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": true,
- "errors": [ ],
- "errorsType": null
}Возвращает данные выбранного обращения, включая openedAt, closedAt и rate. Для открытого обращения closedAt равен null. Поле operator отражает текущего оператора диалога.
Лимит: 3 запроса в секунду на владельца проекта. С опцией ×2 - 6, с ×5 - 15 в секунду. Подробнее об ограничениях запросов.
| sessionId обязательно | string Идентификатор обращения |
curl --request GET "https://api.teletype.app/public/api/v1/session/view/example_sessionId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": {
- "sessionId": "session_1",
- "client": {
- "id": "client_1",
- "name": "Иван",
- "avatar": null,
- "phone": "+79990000000"
}, - "isOpen": true,
- "isGroupChat": false,
- "isUnanswered": true,
- "seen": false,
- "countNewMessages": 1,
- "channelId": "channel_1",
- "categoryId": null,
- "channelSpecificData": null,
- "openedAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "closedAt": null,
- "rate": null
}, - "errors": [ ],
- "errorsType": null
}Помечает сообщения прочитанными в обращениях, у которых назначен оператор или которые уже закрыты. Если последнее обращение существует и не имеет оператора, data равен false; если обращений нет, возвращается true.
Лимит: 3 запроса в секунду на владельца проекта. С опцией ×2 - 6, с ×5 - 15 в секунду. Общий для методов dialog/details, dialog/sessions, dialog/seen, dialog/group-clients.
Подробнее об ограничениях запросов.
| dialogId обязательно | string Идентификатор диалога |
curl --request GET "https://api.teletype.app/public/api/v1/dialog/seen/example_dialogId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": true,
- "errors": [ ],
- "errorsType": null
}Назначает оператора на последнее обращение диалога. Пустое или отсутствующее operator_id снимает назначение. При отсутствии последнего обращения возвращается прикладная ошибка.
| dialogId обязательно | string Идентификатор диалога |
| operator_id | string Идентификатор оператора |
curl --request POST "https://api.teletype.app/public/api/v1/dialog/set-operator/example_dialogId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --data-urlencode 'operator_id=example_operator_id'
{- "success": true,
- "data": true,
- "errors": [ ],
- "errorsType": null
}Создаёт или находит диалог в канале. Если обращение открыто, назначает владельца проекта оператором, в том числе для найденного существующего обращения.
Передайте channelId и идентификатор клиента:
clientPhone — для whatsapp_teletype, whatsapp_edna, max, sms_plusofon, kakao;clientEmail — для email;clientPhone или clientUsername — для telegram и vk_direct;clientUsername — для instagram_direct.Начало диалога по инициативе оператора не поддерживают web_widget, telegram-bot, facebook, vk, viber, instagram_comment, instagram_comments_business, instagram_direct_business, avito и max_bot.
Лимит: 2 запроса в секунду на владельца проекта и канал из channelId в POST. С опцией ×2 - 4, с ×5 - 10 в секунду. Общий для методов dialog/create, channel/send-message.
Подробнее об ограничениях запросов.
| channelId обязательно | string Идентификатор канала |
| clientPhone | string Телефон получателя. Обязателен для номерных WhatsApp, WhatsApp Edna, MAX, SMS Plusofon и KakaoTalk; для Telegram и VK через профиль допустим вместо |
| clientEmail | string Email адрес клиента (обязателен для канала email) |
| clientUsername | string Username клиента. Обязателен для |
curl --request POST "https://api.teletype.app/public/api/v1/dialog/create" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --form-string 'channelId=example_channelId' \ --form-string 'clientPhone=+79990000000'
{- "success": true,
- "errors": [ ],
- "errorsType": null
}Устанавливает unanswered: false для незакрытых обращений диалога и помечает сообщения прочитанными в изменённых обращениях. Закрытые обращения не изменяются. Возвращает data: true, в том числе если изменения не потребовались.
| dialogId обязательно | string Идентификатор диалога |
curl --request POST "https://api.teletype.app/public/api/v1/dialog/answered/example_dialogId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": true,
- "errors": [ ],
- "errorsType": null
}Устанавливает unanswered: true для незакрытых обращений диалога. Закрытые обращения не изменяются. Возвращает data: true, в том числе если изменения не потребовались.
| dialogId обязательно | string Идентификатор диалога |
curl --request POST "https://api.teletype.app/public/api/v1/dialog/unanswered/example_dialogId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": true,
- "errors": [ ],
- "errorsType": null
}Запускает фоновый автоматический подбор оператора для последнего обращения диалога и останавливает его ботов. data: true означает, что задача поставлена в очередь, но не гарантирует фактическое назначение оператора. data: false возможен, если последнего обращения нет, оператор уже назначен или задачу не удалось поставить в очередь. Для закрытого или удалённого обращения возвращает ошибку валидации.
| dialogId обязательно | string Внешний идентификатор диалога. |
curl --request POST "https://api.teletype.app/public/api/v1/dialog/auto-assign-operator/example_dialogId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": true,
- "errors": [ ],
- "errorsType": null
}Возвращает категории текущего проекта без пагинации, в алфавитном порядке. Если категорий нет, data равен [].
curl --request GET "https://api.teletype.app/public/api/v1/appeal-categories/list" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": [
- {
- "id": "category_1",
- "category": "Поддержка",
- "projectId": "project_1",
- "description": null
}
], - "errors": [ ],
- "errorsType": null
}Назначает категорию последнему обращению диалога. Пустое или отсутствующее category_appointed_id снимает категорию.
| dialogId обязательно | string Пример: 5yJfWXjEluy3cvaHvF6QMqCgRhkHQV7BbZkWZDdwgSqH_lfLhxp2H1XVcYitXg_O Идентификатор диалога |
| category_appointed_id | string Идентификатор категории |
curl --request POST "https://api.teletype.app/public/api/v1/dialog/set-category/example_dialogId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --form-string 'category_appointed_id=example_categoryId'
{- "success": true,
- "data": true,
- "errors": [ ],
- "errorsType": null
}Возвращает страницу сообщений проекта, от новых к старым. Фильтры dialogId, channelId и clientId применяются совместно. Группировки по диалогам в ответе нет.
Лимит: 2 запроса в секунду на владельца проекта. С опцией ×2 - 4, с ×5 - 10 в секунду. Параметры диалога и канала в URL на лимит не влияют. Подробнее об ограничениях запросов.
| page | integer По умолчанию: 1 Номер страницы, начиная с 1. Значения меньше 1 приводятся к 1. |
| pageSize | integer По умолчанию: 15 Размер страницы: от 1 до 100. По умолчанию 15; значения вне диапазона заменяются на 15. |
| dialogId | string Идентификатор диалога |
| channelId | string Идентификатор канала |
| clientId | string Идентификатор клиента |
| onlyActive | integer По умолчанию: 0 Допустимые значения: 0 1 Только сообщения активных каналов; применяется, если |
curl --request GET "https://api.teletype.app/public/api/v1/messages" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": {
- "currentPage": 1,
- "totalItems": 1,
- "totalPages": 1,
- "pageSize": 15,
- "items": [
- {
- "id": "message_1",
- "dialogId": "dialog_1",
- "sessionId": "session_1",
- "text": "Здравствуйте!",
- "attachments": [ ],
- "operator": null,
- "client": {
- "id": "client_1",
- "name": "Иван",
- "avatar": null,
- "phone": "+79990000000"
}, - "status": 30,
- "isItClient": true,
- "seen": false,
- "createdAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "sentAt": null,
- "isGroupChat": false,
- "forwarded": false,
- "forwardedFrom": null,
- "type": 10,
- "channel": {
- "id": "channel_1",
- "name": "Поддержка в Telegram",
- "type": "telegram"
}, - "provider": 10,
- "repliedMessage": null
}
]
}, - "errors": [ ],
- "errorsType": null
}Отправляет сообщение в существующий диалог. Обязателен dialogId и хотя бы одно из полей: непустой text, файл file или ссылка url. Если загружен file, он имеет приоритет перед url.
Возвращает идентификаторы созданных сообщений в data.ids. Для асинхронных каналов это не подтверждение доставки: отслеживайте событие message status change. В текущей реализации ошибка непосредственно при отправке может быть перехвачена с результатом success: true и пустым data.ids; проверяйте и этот массив.
Лимит: 2 запроса в секунду на владельца проекта и канал диалога из dialogId в POST. Опции ×2 и ×5 не повышают лимит.
Подробнее об ограничениях запросов.
| dialogId обязательно | string Идентификатор диалога |
| text | string Текст сообщения |
| file | string <binary> Вложенный файл |
| url | string Ссылка на вложенный файл. Используется если не передан |
| replied_message_id | string Идентификатор цитируемого сообщения |
curl --request POST "https://api.teletype.app/public/api/v1/message/send" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --form-string 'dialogId=example_dialogId' \ --form-string 'text=Здравствуйте!'
{- "success": true,
- "data": {
- "ids": [
- "example_messageId"
]
}, - "errors": [ ],
- "errorsType": null
}Удаляет исходящее сообщение оператора, для которого уже получен идентификатор от мессенджера. Допустимые типы сообщения: user_new, user_new_update, user_transcribed.
Поддерживаются Avito, WhatsApp (по номеру), Telegram (по номеру), MAX (по номеру), VK (профиль) и VK (группа). Для остальных каналов метод вернёт ошибку.
Ограничения удаления зависят от мессенджера:
Для Telegram (по номеру), MAX (по номеру) и VK (профиль) удаление доступно, пока его разрешает соответствующий мессенджер. В VK (группа) можно удалять только исходящие сообщения сообщества, для которых удаление ещё разрешено VK.
Сообщение должно быть доставлено в мессенджер. Окончательную возможность удаления проверяет сервис соответствующего канала, поэтому его ошибка возвращается как прикладная ошибка API.
Лимит: 2 запроса в секунду на владельца проекта. Опции ×2 и ×5 не повышают лимит. Общий для методов message/delete, message/update. Если в POST передан dialogId и диалог найден в текущем проекте, лимит считается по владельцу проекта и каналу этого диалога.
Подробнее об ограничениях запросов.
| messageId обязательно | string Идентификатор сообщения |
curl --request POST "https://api.teletype.app/public/api/v1/message/delete/example_messageId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": true,
- "errors": [ ],
- "errorsType": null
}Редактирует текст исходящего сообщения оператора, для которого уже получен идентификатор от мессенджера. Допустимые типы сообщения: user_new, user_new_update. Новый text не должен быть пустым.
Поддерживаются WhatsApp (по номеру), Telegram (по номеру), MAX (по номеру), VK (профиль) и VK (группа). Для остальных каналов метод вернёт ошибку.
Ограничения редактирования зависят от мессенджера:
Сообщение должно быть доставлено в мессенджер. Окончательную возможность редактирования проверяет сервис соответствующего канала, поэтому его ошибка возвращается как прикладная ошибка API.
Лимит: 2 запроса в секунду на владельца проекта. Опции ×2 и ×5 не повышают лимит. Общий для методов message/delete, message/update. Если в POST передан dialogId и диалог найден в текущем проекте, лимит считается по владельцу проекта и каналу этого диалога.
Подробнее об ограничениях запросов.
| messageId обязательно | string Идентификатор сообщения |
| text обязательно | string Новый текст сообщения |
curl --request POST "https://api.teletype.app/public/api/v1/message/update/example_messageId" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --form-string 'text=Здравствуйте!'
{- "success": true,
- "data": true,
- "errors": [ ],
- "errorsType": null
}Возвращает доступные шаблоны быстрых ответов: в папках (directories) и без папки (withoutDirectories.templates). Текст шаблона находится в поле message. Набор зависит от оплаченных тарифных опций и доступных папок.
curl --request GET "https://api.teletype.app/public/api/v1/template-message/list" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": {
- "directories": [ ],
- "withoutDirectories": {
- "templates": [
- {
- "id": "template_1",
- "key": "Приветствие",
- "message": "Здравствуйте! Чем можем помочь?",
- "directoryId": null,
- "type": 10,
- "typeName": "teletype_template",
- "forChannel": null,
- "isExtended": false,
- "templateSource": null
}
]
}
}, - "errors": [ ],
- "errorsType": null
}Возвращает доступные папки шаблонов быстрых ответов без самих шаблонов.
curl --request GET "https://api.teletype.app/public/api/v1/template-message/directories" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": [
- {
- "id": "directory_1",
- "name": "Общие ответы",
- "projectId": "project_1",
- "description": "Ответы на частые вопросы"
}
], - "errors": [ ],
- "errorsType": null
}Возвращает список шаблонов интеграции Poster текущего проекта. При нескольких интеграциях выбирается добавленная последней. Если интеграции нет, возвращается NotFoundException.
curl --request GET "https://api.teletype.app/public/api/v1/joinposter/view-templates" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": [
- {
- "id": "template_1",
- "title": "Заказ принят",
- "body": "Ваш заказ принят.",
- "active": true,
- "channel": {
- "id": "channel_1",
- "name": "Поддержка",
- "state": "active"
}, - "createdAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "updatedAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "object": "incoming_order",
- "event": "added"
}
], - "errors": [ ],
- "errorsType": null
}Создаёт шаблон интеграции Poster текущего проекта. При нескольких интеграциях выбирается добавленная последней. Если интеграции нет, возвращается NotFoundException.
| target_channel обязательно | string Внешний идентификатор канала текущего проекта |
| body обязательно | string |
| title | string |
| active | integer Допустимые значения: 0 1 Активен ли шаблон. Передавайте |
| object | string По умолчанию: "incoming_order" |
| event | string По умолчанию: "added" |
curl --request POST "https://api.teletype.app/public/api/v1/joinposter/create-template" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --data-urlencode 'target_channel=example_channelId' \ --data-urlencode 'body=Ваш заказ принят'
{- "success": true,
- "data": {
- "id": "template_1",
- "title": "Заказ принят",
- "body": "Ваш заказ принят.",
- "active": true,
- "channel": {
- "id": "channel_1",
- "name": "Поддержка",
- "state": "active"
}, - "createdAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "updatedAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "object": "incoming_order",
- "event": "added"
}, - "errors": [ ],
- "errorsType": null
}Обновляет переданные поля шаблона интеграции Poster текущего проекта. При нескольких интеграциях выбирается добавленная последней. Если интеграции нет, возвращается NotFoundException.
| id обязательно | string Внешний идентификатор шаблона |
| target_channel | string Внешний идентификатор канала текущего проекта |
| body | string |
| title | string |
| active | integer Допустимые значения: 0 1 Активен ли шаблон. Передавайте |
| object | string По умолчанию: "incoming_order" |
| event | string По умолчанию: "added" |
curl --request POST "https://api.teletype.app/public/api/v1/joinposter/update-template/example_id" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --data-urlencode 'body=Ваш заказ принят'
{- "success": true,
- "data": {
- "id": "template_1",
- "title": "Заказ принят",
- "body": "Ваш заказ принят.",
- "active": true,
- "channel": {
- "id": "channel_1",
- "name": "Поддержка",
- "state": "active"
}, - "createdAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "updatedAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "object": "incoming_order",
- "event": "added"
}, - "errors": [ ],
- "errorsType": null
}Удаляет шаблон интеграции Poster текущего проекта. При нескольких интеграциях выбирается добавленная последней. Если интеграции нет, возвращается NotFoundException.
| id обязательно | string Внешний идентификатор шаблона |
curl --request GET "https://api.teletype.app/public/api/v1/joinposter/delete-template/example_id" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": true,
- "errors": [ ],
- "errorsType": null
}Возвращает список шаблонов интеграции МойСклад текущего проекта. При нескольких интеграциях выбирается добавленная последней. Если интеграции нет, возвращается NotFoundException.
curl --request GET "https://api.teletype.app/public/api/v1/moi-sklad/view-templates" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": [
- {
- "id": "template_1",
- "title": "Заказ принят",
- "body": "Ваш заказ принят.",
- "active": true,
- "channel": {
- "id": "channel_1",
- "name": "Поддержка",
- "state": "active"
}, - "createdAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "updatedAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "status": "Новый"
}
], - "errors": [ ],
- "errorsType": null
}Создаёт шаблон интеграции МойСклад текущего проекта. При нескольких интеграциях выбирается добавленная последней. Если интеграции нет, возвращается NotFoundException.
| target_channel обязательно | string Внешний идентификатор канала текущего проекта |
| body обязательно | string |
| title | string |
| active | integer Допустимые значения: 0 1 Активен ли шаблон. Передавайте |
| status обязательно | string Статус заказа из метаданных подключённого МойСклад; проверяется при сохранении. |
curl --request POST "https://api.teletype.app/public/api/v1/moi-sklad/create-template" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --data-urlencode 'target_channel=example_channelId' \ --data-urlencode 'body=Ваш заказ принят' \ --data-urlencode 'status=example_status'
{- "success": true,
- "data": {
- "id": "template_1",
- "title": "Заказ принят",
- "body": "Ваш заказ принят.",
- "active": true,
- "channel": {
- "id": "channel_1",
- "name": "Поддержка",
- "state": "active"
}, - "createdAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "updatedAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "status": "Новый"
}, - "errors": [ ],
- "errorsType": null
}Обновляет переданные поля шаблона интеграции МойСклад текущего проекта. При нескольких интеграциях выбирается добавленная последней. Если интеграции нет, возвращается NotFoundException.
| id обязательно | string Внешний идентификатор шаблона |
| target_channel | string Внешний идентификатор канала текущего проекта |
| body | string |
| title | string |
| active | integer Допустимые значения: 0 1 Активен ли шаблон. Передавайте |
| status | string Статус заказа из метаданных подключённого МойСклад; проверяется при сохранении. |
curl --request POST "https://api.teletype.app/public/api/v1/moi-sklad/update-template/example_id" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN" \ --data-urlencode 'body=Ваш заказ принят'
{- "success": true,
- "data": {
- "id": "template_1",
- "title": "Заказ принят",
- "body": "Ваш заказ принят.",
- "active": true,
- "channel": {
- "id": "channel_1",
- "name": "Поддержка",
- "state": "active"
}, - "createdAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "updatedAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "status": "Новый"
}, - "errors": [ ],
- "errorsType": null
}Удаляет шаблон интеграции МойСклад текущего проекта. При нескольких интеграциях выбирается добавленная последней. Если интеграции нет, возвращается NotFoundException.
| id обязательно | string Внешний идентификатор шаблона |
curl --request GET "https://api.teletype.app/public/api/v1/moi-sklad/delete-template/example_id" \ --header "X-Auth-Token: $TELETYPE_API_TOKEN"
{- "success": true,
- "data": true,
- "errors": [ ],
- "errorsType": null
}События отправляются POST-запросами на один URL, указанный в настройках проекта. Пути раздела обозначают события и не являются методами Teletype API.
Тело имеет формат application/x-www-form-urlencoded: name — имя события, payload — JSON-строка с данными.
Заголовок X-Signature содержит HMAC-SHA1 от внешнего идентификатора проекта с API-токеном в качестве ключа, в шестнадцатеричном виде. Это подпись идентификатора проекта, а не тела запроса.
Тайм-аут подключения — 4 секунды, всего запроса — 7 секунд. Получатель должен вернуть успешный HTTP-статус 2xx. Тело ответа не проверяется. Любой полученный HTTP-ответ, включая 4xx и 5xx, обнуляет общий счётчик транспортных ошибок и счётчик этого события, хотя статус записывается как ошибка. Повторная доставка из-за HTTP-статуса не выполняется.
Учитываются только тайм-ауты и ошибки DNS Could not resolve host. Для проекта и каждого вида события ведутся отдельные счётчики со сроком жизни один час. Успешный транспортный ответ обнуляет оба счётчика. Если любой из них превысит 25, на 26-й учитываемой ошибке вебхук проекта помечается нерабочим, и отправка всех событий проекта прекращается до реактивации. Не полагайтесь на гарантированную доставку или строгий порядок событий.
Уведомляет о новом или отредактированном входящем сообщении. После декодирования payload сообщение находится в message, признак редактирования — в isUpdate. При редактировании дополнительно может присутствовать updatedMessage.
Тело передаётся как application/x-www-form-urlencoded; payload — JSON-строка. Все события приходят на один URL получателя.
| X-Signature обязательно | string^[a-f0-9]{40}$ HMAC-SHA1 от идентификатора проекта; ключ — API-токен проекта. |
| name обязательно | string Допустимое значение: "new message" new message |
| payload обязательно | string JSON-строка с данными события. Полная структура приведена после события. |
name=new%20message&payload=%7B%22message%22%3A%7B%22id%22%3A%22message_1%22%2C%22dialogId%22%3A%22dialog_1%22%2C%22sessionId%22%3A%22session_1%22%2C%22text%22%3A%22%D0%97%D0%B4%D1%80%D0%B0%D0%B2%D1%81%D1%82%D0%B2%D1%83%D0%B9%D1%82%D0%B5%21%22%2C%22attachments%22%3A%5B%5D%2C%22operator%22%3Anull%2C%22client%22%3A%7B%22id%22%3A%22client_1%22%2C%22name%22%3A%22%D0%98%D0%B2%D0%B0%D0%BD%22%2C%22avatar%22%3Anull%2C%22phone%22%3A%22%2B79990000000%22%7D%2C%22status%22%3A30%2C%22isItClient%22%3Atrue%2C%22seen%22%3Afalse%2C%22createdAt%22%3A%7B%22date%22%3A%222026-09-08T09%3A00%3A00%2B00%3A00%22%2C%22timezone%22%3A%22UTC%22%7D%2C%22sentAt%22%3Anull%2C%22isGroupChat%22%3Afalse%2C%22forwarded%22%3Afalse%2C%22forwardedFrom%22%3Anull%2C%22type%22%3A10%2C%22channel%22%3A%7B%22id%22%3A%22channel_1%22%2C%22name%22%3A%22%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D0%B0%20%D0%B2%20Telegram%22%2C%22type%22%3A%22telegram%22%7D%2C%22provider%22%3A10%2C%22repliedMessage%22%3Anull%7D%2C%22isUpdate%22%3Afalse%7D
обязательно | object (message) |
| isUpdate обязательно | boolean Является ли событие редактированием входящего сообщения. |
object Исходное сообщение при редактировании; присутствует, если оно найдено. |
{- "message": {
- "id": "example_messageId",
- "dialogId": "example_dialogId",
- "sessionId": "example_sessionId",
- "text": "Здравствуйте!",
- "attachments": [ ],
- "operator": null,
- "client": {
- "id": "example_clientId",
- "name": "Иван",
- "avatar": null,
- "phone": null
}, - "status": 30,
- "isItClient": true,
- "seen": false,
- "createdAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "sentAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "isGroupChat": false,
- "forwarded": false,
- "forwardedFrom": null,
- "type": 10,
- "channel": {
- "id": "example_channelId",
- "type": "telegram",
- "name": "Поддержка"
}, - "provider": 30,
- "repliedMessage": null
}, - "isUpdate": true,
- "updatedMessage": {
- "id": "example_messageId",
- "dialogId": "example_dialogId",
- "sessionId": "example_sessionId",
- "text": "Здравствуйте!",
- "attachments": [ ],
- "operator": null,
- "client": {
- "id": "example_clientId",
- "name": "Иван",
- "avatar": null,
- "phone": null
}, - "status": 30,
- "isItClient": true,
- "seen": false,
- "createdAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "sentAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "isGroupChat": false,
- "forwarded": false,
- "forwardedFrom": null,
- "type": 10,
- "channel": {
- "id": "example_channelId",
- "type": "telegram",
- "name": "Поддержка"
}, - "provider": 30,
- "repliedMessage": null
}
}Событие отправляет на указанный в проекте Webhook уведомление об успешной отправке оператором сообщения клиенту.
Параметр payload содержит JSON-объект с идентификаторами отправленного сообщения и диалога, в который оно отправлено
Транспорт: application/x-www-form-urlencoded. Поле payload — JSON-строка; декодируйте её отдельно. Схема содержимого приведена ниже. Путь здесь обозначает событие: все события приходят на один настроенный URL.
| X-Signature обязательно | string^[a-f0-9]{40}$ HMAC-SHA1 от идентификатора проекта; ключ — API-токен проекта. |
| name обязательно | string Допустимое значение: "success send" success send |
| payload обязательно | string JSON-строка с данными события. Полная структура приведена после события. |
name=success%20send&payload=%7B%22messageId%22%3A%22message_1%22%2C%22dialogId%22%3A%22dialog_1%22%2C%22sessionId%22%3A%22session_1%22%2C%22messageStatus%22%3A30%2C%22message%22%3A%7B%22id%22%3A%22message_1%22%2C%22dialogId%22%3A%22dialog_1%22%2C%22sessionId%22%3A%22session_1%22%2C%22text%22%3A%22%D0%97%D0%B4%D1%80%D0%B0%D0%B2%D1%81%D1%82%D0%B2%D1%83%D0%B9%D1%82%D0%B5%21%22%2C%22attachments%22%3A%5B%5D%2C%22operator%22%3A%7B%22id%22%3A%22operator_1%22%2C%22name%22%3A%22%D0%90%D0%BD%D0%BD%D0%B0%22%2C%22avatar%22%3A%22https%3A%2F%2Fexample.com%2Foperator.png%22%7D%2C%22client%22%3Anull%2C%22status%22%3A30%2C%22isItClient%22%3Afalse%2C%22seen%22%3Afalse%2C%22createdAt%22%3A%7B%22date%22%3A%222026-09-08T09%3A00%3A00%2B00%3A00%22%2C%22timezone%22%3A%22UTC%22%7D%2C%22sentAt%22%3A%7B%22date%22%3A%222026-09-08T09%3A00%3A00%2B00%3A00%22%2C%22timezone%22%3A%22UTC%22%7D%2C%22isGroupChat%22%3Afalse%2C%22forwarded%22%3Afalse%2C%22forwardedFrom%22%3Anull%2C%22type%22%3A10%2C%22channel%22%3A%7B%22id%22%3A%22channel_1%22%2C%22name%22%3A%22%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D0%B0%20%D0%B2%20Telegram%22%2C%22type%22%3A%22telegram%22%7D%2C%22provider%22%3A20%2C%22repliedMessage%22%3Anull%7D%7D
| messageId обязательно | string Идентификатор сообщения |
| dialogId обязательно | string Идентификатор диалога |
| sessionId обязательно | string |
| messageStatus обязательно | integer Допустимые значения: 10 20 30 Статус сообщения: |
обязательно | object (message) |
{- "messageId": "string",
- "dialogId": "string",
- "sessionId": "string",
- "messageStatus": 10,
- "message": {
- "id": "example_messageId",
- "dialogId": "example_dialogId",
- "sessionId": "example_sessionId",
- "text": "Здравствуйте!",
- "attachments": [ ],
- "operator": null,
- "client": {
- "id": "example_clientId",
- "name": "Иван",
- "avatar": null,
- "phone": null
}, - "status": 30,
- "isItClient": true,
- "seen": false,
- "createdAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "sentAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "isGroupChat": false,
- "forwarded": false,
- "forwardedFrom": null,
- "type": 10,
- "channel": {
- "id": "example_channelId",
- "type": "telegram",
- "name": "Поддержка"
}, - "provider": 30,
- "repliedMessage": null
}
}Событие отправляет на указанный в проекте Webhook уведомление о статусе отправленного сообщения клиенту.
Параметр payload содержит JSON-объект с идентификаторами отправленного сообщения и диалога, в который оно отправлено
Транспорт: application/x-www-form-urlencoded. Поле payload — JSON-строка; декодируйте её отдельно. Схема содержимого приведена ниже. Путь здесь обозначает событие: все события приходят на один настроенный URL.
| X-Signature обязательно | string^[a-f0-9]{40}$ HMAC-SHA1 от идентификатора проекта; ключ — API-токен проекта. |
| name обязательно | string Допустимое значение: "message status change" message |
| payload обязательно | string JSON-строка с данными события. Полная структура приведена после события. |
name=message%20status%20change&payload=%7B%22messageId%22%3A%22message_1%22%2C%22dialogId%22%3A%22dialog_1%22%2C%22sessionId%22%3A%22session_1%22%2C%22messageStatus%22%3A30%7D
| messageId обязательно | string Идентификатор сообщения |
| dialogId обязательно | string Идентификатор диалога |
| messageStatus обязательно | integer Допустимые значения: 10 20 30 Статус сообщения: |
| sessionId обязательно | string |
| error | string Текст ошибки отправки. Передаётся только при |
{- "messageId": "string",
- "dialogId": "string",
- "sessionId": "string",
- "messageStatus": 20,
- "error": "Failed to send message (Communication error with external channel service)"
}Уведомление об удалении сообщения в диалоге.
В payload передаются идентификаторы и объект сообщения на момент события.
Транспорт: application/x-www-form-urlencoded. Поле payload — JSON-строка; декодируйте её отдельно. Схема содержимого приведена ниже. Путь здесь обозначает событие: все события приходят на один настроенный URL.
| X-Signature обязательно | string^[a-f0-9]{40}$ HMAC-SHA1 от идентификатора проекта; ключ — API-токен проекта. |
| name обязательно | string Допустимое значение: "message deleted" message deleted |
| payload обязательно | string JSON-строка с данными события. Полная структура приведена после события. |
name=message%20deleted&payload=%7B%22messageId%22%3A%22message_1%22%2C%22dialogId%22%3A%22dialog_1%22%2C%22sessionId%22%3A%22session_1%22%2C%22message%22%3A%7B%22id%22%3A%22message_1%22%2C%22dialogId%22%3A%22dialog_1%22%2C%22sessionId%22%3A%22session_1%22%2C%22text%22%3A%22%D0%97%D0%B4%D1%80%D0%B0%D0%B2%D1%81%D1%82%D0%B2%D1%83%D0%B9%D1%82%D0%B5%21%22%2C%22attachments%22%3A%5B%5D%2C%22operator%22%3Anull%2C%22client%22%3A%7B%22id%22%3A%22client_1%22%2C%22name%22%3A%22%D0%98%D0%B2%D0%B0%D0%BD%22%2C%22avatar%22%3Anull%2C%22phone%22%3A%22%2B79990000000%22%7D%2C%22status%22%3A30%2C%22isItClient%22%3Atrue%2C%22seen%22%3Afalse%2C%22createdAt%22%3A%7B%22date%22%3A%222026-09-08T09%3A00%3A00%2B00%3A00%22%2C%22timezone%22%3A%22UTC%22%7D%2C%22sentAt%22%3Anull%2C%22isGroupChat%22%3Afalse%2C%22forwarded%22%3Afalse%2C%22forwardedFrom%22%3Anull%2C%22type%22%3A10%2C%22channel%22%3A%7B%22id%22%3A%22channel_1%22%2C%22name%22%3A%22%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D0%B0%20%D0%B2%20Telegram%22%2C%22type%22%3A%22telegram%22%7D%2C%22provider%22%3A10%2C%22repliedMessage%22%3Anull%7D%7D
| messageId обязательно | string Идентификатор сообщения |
| dialogId обязательно | string Идентификатор диалога |
| sessionId обязательно | string Идентификатор сессии (обращения) |
обязательно | object (message) |
{- "messageId": "string",
- "dialogId": "string",
- "sessionId": "string",
- "message": {
- "id": "example_messageId",
- "dialogId": "example_dialogId",
- "sessionId": "example_sessionId",
- "text": "Здравствуйте!",
- "attachments": [ ],
- "operator": null,
- "client": {
- "id": "example_clientId",
- "name": "Иван",
- "avatar": null,
- "phone": null
}, - "status": 30,
- "isItClient": true,
- "seen": false,
- "createdAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "sentAt": {
- "date": "2026-09-08T09:00:00+00:00",
- "timezone": "UTC"
}, - "isGroupChat": false,
- "forwarded": false,
- "forwardedFrom": null,
- "type": 10,
- "channel": {
- "id": "example_channelId",
- "type": "telegram",
- "name": "Поддержка"
}, - "provider": 30,
- "repliedMessage": null
}
}Событие отправляет на указанный в проекте Webhook уведомление о создании новой заметки в диалоге.
Параметр payload содержит JSON-объект с идентификаторами клиента, диалога, заметки и самим текстом заметки
Транспорт: application/x-www-form-urlencoded. Поле payload — JSON-строка; декодируйте её отдельно. Схема содержимого приведена ниже. Путь здесь обозначает событие: все события приходят на один настроенный URL.
| X-Signature обязательно | string^[a-f0-9]{40}$ HMAC-SHA1 от идентификатора проекта; ключ — API-токен проекта. |
| name обязательно | string Допустимое значение: "new note" new note |
| payload обязательно | string JSON-строка с данными события. Полная структура приведена после события. |
name=new%20note&payload=%7B%22id%22%3A%22note_1%22%2C%22dialogId%22%3A%22dialog_1%22%2C%22clientId%22%3A%22client_1%22%2C%22operatorId%22%3A%22operator_1%22%2C%22text%22%3A%22%D0%A1%D0%B2%D1%8F%D0%B7%D0%B0%D1%82%D1%8C%D1%81%D1%8F%20%D0%B7%D0%B0%D0%B2%D1%82%D1%80%D0%B0.%22%2C%22createdAt%22%3A%7B%22date%22%3A%222026-09-08T09%3A00%3A00%2B00%3A00%22%2C%22timezone%22%3A%22UTC%22%7D%7D
| id обязательно | string Идентификатор заметки |
| dialogId обязательно | string or null Идентификатор диалога |
| clientId обязательно | string Идентификатор клиента |
| operatorId обязательно | string Идентификатор оператора |
| text обязательно | string Текст заметки |
обязательно | object (date) |
{- "id": "string",
- "dialogId": "string",
- "clientId": "string",
- "operatorId": "string",
- "text": "string",
- "createdAt": {
- "date": "2024-07-25T08:43:05+00:00",
- "timezone": "UTC"
}
}Событие отправляет на указанный в проекте Webhook уведомление о закрытии диалога.
Параметр payload содержит JSON-объект с идентификатором диалога, данными клиента, канала, последнего обращения, категории и даты создания диалога
Транспорт: application/x-www-form-urlencoded. Поле payload — JSON-строка; декодируйте её отдельно. Схема содержимого приведена ниже. Путь здесь обозначает событие: все события приходят на один настроенный URL.
| X-Signature обязательно | string^[a-f0-9]{40}$ HMAC-SHA1 от идентификатора проекта; ключ — API-токен проекта. |
| name обязательно | string Допустимое значение: "close dialog" close dialog |
| payload обязательно | string JSON-строка с данными события. Полная структура приведена после события. |
name=close%20dialog&payload=%7B%22id%22%3A%22dialog_1%22%2C%22sessionId%22%3A%22session_1%22%2C%22categoryId%22%3Anull%2C%22client%22%3A%7B%22id%22%3A%22client_1%22%2C%22name%22%3A%22%D0%98%D0%B2%D0%B0%D0%BD%22%2C%22avatar%22%3Anull%2C%22phone%22%3A%22%2B79990000000%22%7D%2C%22channel%22%3A%7B%22id%22%3A%22channel_1%22%2C%22name%22%3A%22%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D0%B0%20%D0%B2%20Telegram%22%2C%22type%22%3A%22telegram%22%7D%2C%22createdAt%22%3A%7B%22date%22%3A%222026-09-08T09%3A00%3A00%2B00%3A00%22%2C%22timezone%22%3A%22UTC%22%7D%7D
| id обязательно | string Идентификатор диалога |
| sessionId обязательно | string or null Идентификатор последнего обращения |
| categoryId обязательно | string or null Идентификатор категории |
обязательно | ClientPreview (object) or (object or null) |
обязательно | object (ChannelPreview) Краткие сведения о канале. |
обязательно | object (date) |
{- "id": "string",
- "sessionId": "string",
- "categoryId": "string",
- "client": {
- "id": "string",
- "name": "string",
- "avatar": "string",
- "phone": "string"
}, - "channel": {
- "id": "string",
- "name": "string",
- "type": "string"
}, - "createdAt": {
- "date": "2024-07-25T08:43:05+00:00",
- "timezone": "UTC"
}
}Событие отправляет на указанный в проекте Webhook уведомление о создании нового диалога.
Параметр payload содержит JSON-объект с идентификатором диалога, данными клиента, канала и даты создания диалога
Транспорт: application/x-www-form-urlencoded. Поле payload — JSON-строка; декодируйте её отдельно. Схема содержимого приведена ниже. Путь здесь обозначает событие: все события приходят на один настроенный URL.
| X-Signature обязательно | string^[a-f0-9]{40}$ HMAC-SHA1 от идентификатора проекта; ключ — API-токен проекта. |
| name обязательно | string Допустимое значение: "new dialog" new dialog |
| payload обязательно | string JSON-строка с данными события. Полная структура приведена после события. |
name=new%20dialog&payload=%7B%22id%22%3A%22dialog_1%22%2C%22client%22%3A%7B%22id%22%3A%22client_1%22%2C%22name%22%3A%22%D0%98%D0%B2%D0%B0%D0%BD%22%2C%22avatar%22%3Anull%2C%22phone%22%3A%22%2B79990000000%22%7D%2C%22channel%22%3A%7B%22id%22%3A%22channel_1%22%2C%22name%22%3A%22%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D0%B0%20%D0%B2%20Telegram%22%2C%22type%22%3A%22telegram%22%7D%2C%22channelSpecificData%22%3Anull%2C%22createdAt%22%3A%7B%22date%22%3A%222026-09-08T09%3A00%3A00%2B00%3A00%22%2C%22timezone%22%3A%22UTC%22%7D%7D
| id обязательно | string Идентификатор диалога |
обязательно | ClientPreview (object) or (object or null) |
обязательно | object (ChannelPreview) Краткие сведения о канале. |
| channelSpecificData обязательно | any |
обязательно | object (date) |
{- "id": "string",
- "client": {
- "id": "string",
- "name": "string",
- "avatar": "string",
- "phone": "string"
}, - "channel": {
- "id": "string",
- "name": "string",
- "type": "string"
}, - "channelSpecificData": null,
- "createdAt": {
- "date": "2024-07-25T08:43:05+00:00",
- "timezone": "UTC"
}
}Событие отправляет на указанный в проекте Webhook уведомление об открытии старого диалога.
Параметр payload содержит JSON-объект с идентификатором диалога, данными клиента, канала и даты создания диалога
Транспорт: application/x-www-form-urlencoded. Поле payload — JSON-строка; декодируйте её отдельно. Схема содержимого приведена ниже. Путь здесь обозначает событие: все события приходят на один настроенный URL.
| X-Signature обязательно | string^[a-f0-9]{40}$ HMAC-SHA1 от идентификатора проекта; ключ — API-токен проекта. |
| name обязательно | string Допустимое значение: "open dialog" open dialog |
| payload обязательно | string JSON-строка с данными события. Полная структура приведена после события. |
name=open%20dialog&payload=%7B%22id%22%3A%22dialog_1%22%2C%22client%22%3A%7B%22id%22%3A%22client_1%22%2C%22name%22%3A%22%D0%98%D0%B2%D0%B0%D0%BD%22%2C%22avatar%22%3Anull%2C%22phone%22%3A%22%2B79990000000%22%7D%2C%22channel%22%3A%7B%22id%22%3A%22channel_1%22%2C%22name%22%3A%22%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D0%B0%20%D0%B2%20Telegram%22%2C%22type%22%3A%22telegram%22%7D%2C%22createdAt%22%3A%7B%22date%22%3A%222026-09-08T09%3A00%3A00%2B00%3A00%22%2C%22timezone%22%3A%22UTC%22%7D%7D
| id обязательно | string Идентификатор диалога |
обязательно | ClientPreview (object) or (object or null) |
обязательно | object (ChannelPreview) Краткие сведения о канале. |
обязательно | object (date) |
{- "id": "string",
- "client": {
- "id": "string",
- "name": "string",
- "avatar": "string",
- "phone": "string"
}, - "channel": {
- "id": "string",
- "name": "string",
- "type": "string"
}, - "createdAt": {
- "date": "2024-07-25T08:43:05+00:00",
- "timezone": "UTC"
}
}Событие отправляет на указанный в проекте Webhook уведомление об изменении данных персоны.
Параметр payload содержит JSON-объект с данными персоны
Транспорт: application/x-www-form-urlencoded. Поле payload — JSON-строка; декодируйте её отдельно. Схема содержимого приведена ниже. Путь здесь обозначает событие: все события приходят на один настроенный URL.
| X-Signature обязательно | string^[a-f0-9]{40}$ HMAC-SHA1 от идентификатора проекта; ключ — API-токен проекта. |
| name обязательно | string Допустимое значение: "person change" person change |
| payload обязательно | string JSON-строка с данными события. Полная структура приведена после события. |
name=person%20change&payload=%7B%22id%22%3A%22client_1%22%2C%22tempName%22%3Anull%2C%22name%22%3A%22%D0%98%D0%B2%D0%B0%D0%BD%22%2C%22email%22%3Anull%2C%22phone%22%3A%22%2B79990000000%22%2C%22customFields%22%3A%7B%22city%22%3A%22%D0%9E%D0%BC%D1%81%D0%BA%22%7D%2C%22tags%22%3A%5B%22tag_1%22%5D%7D
| id обязательно | string Идентификатор персоны |
| tempName обязательно | string or null Имя персоны по умолчанию |
| name обязательно | string or null Имя персоны |
| email обязательно | string or null Email адрес персоны |
| phone обязательно | string or null Телефонный номер персоны |
обязательно | object or Массив элементов: any (CustomFieldValues) Значения по названиям полей, либо пустой массив, если поля не настроены. |
| tags обязательно | Массив элементов: strings Внешние идентификаторы тегов персоны. |
{- "id": "string",
- "tempName": "string",
- "name": "string",
- "email": "string",
- "phone": "string",
- "customFields": { },
- "tags": [
- "string"
]
}Событие отправляет на указанный в проекте Webhook уведомление об оценке диалога персоной.
Параметр payload содержит JSON-объект с идентификаторами диалога, обращения, оператора, клиента и оценки
Транспорт: application/x-www-form-urlencoded. Поле payload — JSON-строка; декодируйте её отдельно. Схема содержимого приведена ниже. Путь здесь обозначает событие: все события приходят на один настроенный URL.
| X-Signature обязательно | string^[a-f0-9]{40}$ HMAC-SHA1 от идентификатора проекта; ключ — API-токен проекта. |
| name обязательно | string Допустимое значение: "appeal rate" appeal rate |
| payload обязательно | string JSON-строка с данными события. Полная структура приведена после события. |
name=appeal%20rate&payload=%7B%22dialogId%22%3A%22dialog_1%22%2C%22sessionId%22%3A%22session_1%22%2C%22operatorId%22%3A%22operator_1%22%2C%22clientId%22%3A%22client_1%22%2C%22rate%22%3A%225%22%7D
| dialogId обязательно | string Идентификатор диалога |
| sessionId обязательно | string Идентификатор обращения |
| operatorId обязательно | string Идентификатор оператора |
| clientId обязательно | string Идентификатор клиента |
| rate обязательно | string Допустимые значения: "1" "2" "3" "4" "5" Оценка обращения строкой от |
{- "dialogId": "string",
- "sessionId": "string",
- "operatorId": "string",
- "clientId": "string",
- "rate": "1"
}Событие отправляет на указанный в проекте Webhook уведомление об обновлении шаблонов сообщений.
Параметр payload содержит пустой массив
Транспорт: application/x-www-form-urlencoded. Поле payload — JSON-строка; декодируйте её отдельно. Схема содержимого приведена ниже. Путь здесь обозначает событие: все события приходят на один настроенный URL.
| X-Signature обязательно | string^[a-f0-9]{40}$ HMAC-SHA1 от идентификатора проекта; ключ — API-токен проекта. |
| name обязательно | string Допустимое значение: "messages templates updated" messages templates updated |
| payload обязательно | string JSON-строка с данными события. Полная структура приведена после события. |
name=messages%20templates%20updated&payload=%5B%5D
[ ]Событие отправляет на указанный в проекте Webhook уведомление об изменении активного оператора по обращению.
Запрос приходит в формате application/x-www-form-urlencoded. Поле payload содержит JSON-объект, сериализованный в строку. Перед чтением полей декодируйте эту строку.
operator равен null, если активный оператор снят с обращения. Ниже доступна полная структура декодированного payload.
Все события приходят на один URL, указанный в настройках проекта. Путь /session-operator-changed используется здесь только как название события.
| X-Signature обязательно | string^[a-f0-9]{40}$ HMAC-SHA1 от идентификатора проекта; ключ — API-токен проекта. |
| name обязательно | string Допустимое значение: "session operator changed" session operator changed |
| payload обязательно | string <json> JSON-строка с данными события. Полная структура приведена после события. |
name=session%20operator%20changed&payload=%7B%22channel%22%3A%7B%22id%22%3A%22channel_1%22%2C%22name%22%3A%22%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D0%B0%20%D0%B2%20Telegram%22%2C%22type%22%3A%22telegram%22%7D%2C%22dialogId%22%3A%22dialog_1%22%2C%22sessionId%22%3A%22session_1%22%2C%22operator%22%3A%7B%22id%22%3A%22operator_1%22%2C%22name%22%3A%22%D0%90%D0%BD%D0%BD%D0%B0%22%2C%22avatar%22%3A%22https%3A%2F%2Fexample.com%2Foperator.png%22%7D%7D
обязательно | object |
| dialogId обязательно | string Идентификатор диалога |
| sessionId обязательно | string Идентификатор обращения |
обязательно | object or null |
{- "channel": {
- "id": "string",
- "name": "string",
- "type": "string"
}, - "dialogId": "string",
- "sessionId": "string",
- "operator": {
- "id": "string",
- "name": "string",
- "avatar": "string"
}
}Событие отправляет на указанный в проекте Webhook уведомление об удалении канала.
Параметр payload содержит JSON-объект с внешним идентификатором канала. Вебхук отправляется только для каналов, для которых завершена настройка.
Транспорт: application/x-www-form-urlencoded. Поле payload — JSON-строка; декодируйте её отдельно. Схема содержимого приведена ниже. Путь здесь обозначает событие: все события приходят на один настроенный URL.
| X-Signature обязательно | string^[a-f0-9]{40}$ HMAC-SHA1 от идентификатора проекта; ключ — API-токен проекта. |
| name обязательно | string Допустимое значение: "channel deleted" channel deleted |
| payload обязательно | string JSON-строка с данными события. Полная структура приведена после события. |
name=channel%20deleted&payload=%7B%22externalId%22%3A%22channel_1%22%7D
| externalId обязательно | string Внешний идентификатор канала |
{- "externalId": "string"
}Событие отправляет на указанный в проекте Webhook уведомление об изменении статуса канала.
Параметр payload содержит JSON-объект с внешним идентификатором канала, новым статусом и именем статуса. Вебхук отправляется только если канал не помечен к удалению.
Транспорт: application/x-www-form-urlencoded. Поле payload — JSON-строка; декодируйте её отдельно. Схема содержимого приведена ниже. Путь здесь обозначает событие: все события приходят на один настроенный URL.
| X-Signature обязательно | string^[a-f0-9]{40}$ HMAC-SHA1 от идентификатора проекта; ключ — API-токен проекта. |
| name обязательно | string Допустимое значение: "channel status updated" channel |
| payload обязательно | string JSON-строка с данными события. Полная структура приведена после события. |
name=channel%20status%20updated&payload=%7B%22externalId%22%3A%22channel_1%22%2C%22status%22%3A20%2C%22statusName%22%3A%22active%22%7D
| externalId обязательно | string Внешний идентификатор канала |
| status обязательно | integer Допустимые значения: 10 20 30 40 50 60 70 80 Код статуса канала; например, |
| statusName обязательно | string Имя статуса канала |
{- "externalId": "string",
- "status": 10,
- "statusName": "string"
}