Настройка шаблонов для разных каналов
Вступление-утверждение
Организация службы поддержки в Telegram‑CRM предполагает работу с несколькими каналами входящих обращений: личные сообщения боту, топик‑группы, формы обратной связи на сайте, интегрированные через webhook. Каждый канал накладывает свои ограничения на формат и содержание ответа. Настройка шаблонов (canned responses) должна учитывать эти различия, иначе даже идеально составленный скрипт может не сработать или привести к некорректной передаче данных. В этом материале разберём типовые проблемы, возникающие при настройке шаблонов для разных каналов, и предложим пошаговые решения.
Проблема 1. Шаблон не отправляется в топик‑группу
Топик‑группы Telegram имеют особую структуру: каждое обращение создаётся как отдельная тема (топик). Шаблон ответа, настроенный для личных сообщений, может не сработать в топике, если в нём используются переменные, не поддерживаемые в контексте темы.
Причина: В шаблоне указана переменная `{user_id}` или `{username}`, которая не передаётся в топик‑группу, так как обращение приходит от имени группы, а не конкретного пользователя.
Решение:
- Проверьте, какие переменные доступны в вашей CRM для топик‑групп. Обычно это `{ticket_id}`, `{topic_title}`, `{agent_name}`.
- Замените переменные, связанные с личными данными пользователя, на общие идентификаторы обращения.
- Если требуется указать имя клиента, используйте поле «Имя отправителя» из первого сообщения в теме — оно часто передаётся как `{sender_name}`.
Проблема 2. Шаблон с HTML‑разметкой отображается некорректно
Telegram поддерживает ограниченный набор HTML‑тегов: `<b>`, `<i>`, `<a>`, `<code>`, `<pre>`. Если в шаблоне используется сложная вёрстка (таблицы, списки, вложенные теги), сообщение может не отправиться или отобразиться как обычный текст без форматирования.
Причина: CRM не экранирует некорректные теги перед отправкой, и Telegram Bot API возвращает ошибку `Bad Request: can't parse entities`.
Решение:
- Используйте только разрешённые теги. Избегайте вложенности тегов (например, `<b><i>текст</i></b>` — допустимо, но `<b><a href="...">текст</a></b>` может вызвать ошибку).
- Если шаблон содержит URL, оборачивайте их в тег `<a>` с атрибутом `href`.
- Проверьте шаблон через тестовую отправку в режиме «без форматирования» — если сообщение уходит, проблема именно в разметке.
Проблема 3. Шаблон для webhook‑канала не подставляет данные из внешней системы
При интеграции через webhook данные могут приходить в нестандартном формате (JSON, XML). Шаблон, настроенный на стандартные поля Telegram‑CRM, не сможет извлечь нужные значения.
Причина: Поле `{custom_field}` не сопоставлено с ключом в JSON‑запросе от внешней системы.
Решение:
- Откройте логи входящих webhook‑запросов в CRM и определите структуру данных. Например, если внешняя система присылает `{"order_id": "12345", "client_name": "Иван"}`, то в шаблоне нужно использовать переменную `{order_id}`, а не `{ticket_id}`.
- Создайте кастомное поле в CRM (например, «Номер заказа») и привяжите его к соответствующему ключу в настройках webhook.
- В шаблоне укажите `{Номер заказа}`. Убедитесь, что регистр переменной совпадает с названием поля.
Проблема 4. Один и тот же шаблон выглядит по‑разному на разных устройствах
Telegram на десктопе и мобильных устройствах по‑разному обрабатывает переносы строк, длинные ссылки и эмодзи. Шаблон, который идеально выглядит в веб‑версии, может «съехать» на смартфоне.
Причина: Разная ширина экрана и поддержка Unicode‑символов.
Решение:
- Ограничьте длину строки в шаблоне 50–60 символами. Используйте принудительные переносы строк через `\n`.
- Избегайте длинных URL без сокращения — используйте сервисы сокращения ссылок или тег `<a>` с коротким текстом.
- Проверьте шаблон на мобильном устройстве перед массовым использованием. Особое внимание уделите эмодзи: некоторые символы могут отображаться как квадраты на старых версиях Telegram.
Проблема 5. Шаблон не применяется при автоматическом распределении обращений
В Telegram‑CRM часто настраиваются триггеры автоматизации: при создании обращения из определённого канала отправляется приветственный шаблон. Если шаблон не срабатывает, причина может быть в неверной настройке триггера.
Причина: Триггер привязан к каналу «Личные сообщения», а обращение пришло через топик‑группу.
Решение:
- Проверьте в настройках триггера поле «Канал». Убедитесь, что выбран нужный источник (например, «Топик‑группа» или «Webhook»).
- Если триггер должен срабатывать для всех каналов, выберите опцию «Любой канал».
- Убедитесь, что шаблон не содержит переменных, отсутствующих в контексте выбранного канала (см. проблему 1).
Проблема 6. Шаблон содержит персональные данные, которые не должны отображаться в общем чате
В топик‑группах все участники видят сообщения в рамках своей темы. Если шаблон подставляет номер телефона или email клиента, это может нарушить политику конфиденциальности.
Причина: Шаблон использует переменную `{phone}` или `{email}`, которая доступна в CRM, но не предназначена для публичного отображения.
Решение:
- Создайте отдельный шаблон для внутреннего использования (например, для заметок агента) и отдельный — для клиента.
- В шаблоне для клиента используйте только обезличенные переменные: `{ticket_id}`, `{order_status}`.
- Если необходимо передать контактные данные, отправляйте их в личное сообщение через бота, а не в топик.
Заключение-резюме
Настройка шаблонов для разных каналов в Telegram‑CRM — задача, требующая учёта технических ограничений каждого канала и особенностей форматирования сообщений. Основные проблемы связаны с несовместимостью переменных, ошибками HTML‑разметки и неправильной привязкой триггеров. Большинство из них решается проверкой настроек и адаптацией шаблонов под конкретный канал. Если проблема носит системный характер (например, не поддерживается нужный формат данных), без участия разработчика или администратора CRM не обойтись. Рекомендуется вести журнал тестовых отправок для каждого канала и регулярно обновлять шаблоны при изменении API Telegram или структуры входящих данных. Общие принципы автоматизации ответов описаны в статье Шаблоны и автоматизация ответов в Telegram‑CRM.
