Карточка клиента — переменные
Для админов

Карточка клиента — переменные

Карточка клиента в обращении может показывать данные из вашего API. В запросы к нему подставляются данные контакта.

Настраивается в «Настройки → Работа операторов → Карточка клиента» (владелец и администраторы). В «Источниках данных» задаются запросы к вашему API: URL, HTTP-метод, заголовки и тело (JSON, форма, произвольный текст или без тела). В «Блоках карточки» — что показать оператору: «Отображение данных», «Список», «Кнопка действия» или VPN-карточку. Каждый источник запрашивается один раз, когда открывается карточка; ответа ждут до 10 секунд.

Переменные контакта

Подставляются в URL, заголовки и тело запроса источника и кнопки действия:

ПеременнаяЗначение
{contact_id}ID контакта в SupportHub (UUID)
{internal_id}ID посетителя виджета; у анонимного посетителя вида vs_…
{user_id}то же, что {internal_id}
{external_id}внешний ID контакта, например из вашей CRM (задаётся через API контактов)
{telegram_id}Telegram ID
{vk_id}VK ID
{whatsapp_id}WhatsApp ID (вида 15551234567@s.whatsapp.net)
{phone}номер из WhatsApp ID без @s.whatsapp.net
{email}email контакта
  • В кнопках действий есть ещё {input.<id>} — значения полей ввода, которые заполняет оператор, а в действиях для элемента списка — {item.<поле>}, поля выбранного элемента.
  • ID из подписанного токена посетителя в переменные не попадает. Для таких клиентов опирайтесь на {telegram_id}, {email} или {external_id}.

Синтаксис

ЗаписьЧто делает
{field}значение поля; пустая строка, если его нет
{a|b|c}первое непустое значение из перечисленных
{?field}…{/?}блок остаётся, только если поле непустое
{?!field}…{/?}блок остаётся, только если поле пустое
{?a|b}…{/?}блок остаётся, если непустое хотя бы одно из полей

Условные блоки можно вкладывать друг в друга. Если тип тела — JSON, после подстановки оно должно остаться корректным JSON, иначе запрос не выполнится.

Пример 1 — условный JSON с несколькими идентификаторами

Запрос передаёт тот идентификатор, который есть у контакта. Условные блоки гарантируют, что в JSON попадёт только одно поле.

{
  "method": "user.get",
  "params": {
    {?external_id}"user_id": "{external_id}"{/?}{?!external_id}{?telegram_id}"telegram_id": {telegram_id}{/?}{?!telegram_id}{?vk_id}"vk_id": {vk_id}{/?}{?!vk_id}{?email}"email": "{email}"{/?}{/?}{/?}{/?}
  }
}
Порядок проверки: external_id → telegram_id → vk_id → email. Как только найдено первое непустое значение, остальные блоки пропускаются.

Пример 2 — первый непустой идентификатор

Запись {a|b|c} подставляет первое непустое значение. Удобно, когда API принимает любой идентификатор в одном поле.

{
  "query": "{telegram_id|vk_id|email|internal_id}",
  "source": "supporthub"
}
Если ни одно из полей не заполнено, подставится пустая строка, и запрос всё равно уйдёт. Верните на такой запрос ошибку (например, 404) и задайте в источнике «Обработку ошибок» по HTTP-коду или полю JSON — оператор увидит понятное сообщение вместо пустой карточки.

Кнопки-ссылки

В URL-шаблоне кнопок-ссылок подставляются значения из ответа вашего API: {field.path} — путь к полю через точку. Модификатор :b64 кодирует значение в URL-safe base64 без паддинга — например, для deep-link в Telegram. Если какого-то значения в ответе нет, кнопка не показывается.

Режим стримера

Заранее неизвестно, какие поля вашей карточки — личные данные, поэтому у каждого блока с данными («Отображение данных», «Список», VPN-карточка) есть раздел «Режим стримера». Он решает, что размывается у оператора, который включил режим стримера:

  • «Скрыть весь блок» размывает все значения блока, что бы в них ни было. Подписи полей остаются видны.
  • Для каждого поля — «Авто», «Скрывать» или «Показывать». «Авто» скрывает поле, если его ключ или название похожи на личные данные: почта, телефон, Telegram, VK, WhatsApp, ID и «внутренний», баланс, IP, адрес, карта, кошелёк, токен, пароль, паспорт, ИНН, СНИЛС, имя, фамилия, дата рождения, ссылка. Что выберет «Авто», видно сразу: «Авто: скрывается» или «Авто: видно».
  • Выбор привязан к пути поля (user.email), а не к подписи: переименование подписи его не сбрасывает, а если поменять путь, выбор переезжает вместе с полем. У списка путь считается внутри элемента, поэтому name в списке configs — название конфига, а не имя человека.
  • Блок без списка полей показывает ответ API целиком: его ключи скрываются по правилам «Авто», а ключ, за который нужно решить явно, добавляется вручную.
  • У VPN-карточки перечислены её собственные поля: имя, Telegram, ID, email, баланс, суммы платежей и выводов, реквизиты, подписки, статистика и другие.
Кнопки-ссылки блоков в режиме стримера не показывают свой адрес при наведении — в нём часто есть ID клиента (…?start=get_u_{user.id}). По клику ссылка открывается как обычно.
Была ли страница полезной?