Документация

FAQ

Нужно ли пользователям что-то устанавливать?

Нет. Пользователи просто вставляют один тег script в свой HTML — никаких npm-пакетов, шагов сборки и зависимостей. Дополнительные функции загружаются автоматически с того же origin.

Не будет ли он конфликтовать с моим CSS?

Нет. Виджет рендерится внутри Shadow DOM, полностью изолируя свои стили от вашей страницы.

Поддерживает ли он одностраничные приложения (React, Vue, Next.js)?

Да. Скрипт загружается один раз и сохраняется при смене маршрутов. Для React/Next.js разместите скрипт в корневом layout.

Next.js App Routertsx
// app/layout.tsx (App Router)
import Script from 'next/script';
import { ReactNode } from 'react';

export default function RootLayout({ children }: { children: ReactNode }) {
  return (
    <html lang="en">
      <body>
        {children}
        <Script id="respondo-init" strategy="afterInteractive">
          {`
            window.Respondo = window.Respondo || {};
            Respondo.init = Respondo.init || function(c) { window.RespondoAIConfig = c; };
            Respondo.q = Respondo.q || [];
            Respondo.identify = Respondo.identify || function(d) { Respondo.q.push(['identify', d]); };
            Respondo.init({
              agentId: 'YOUR_AGENT_ID',
              channelId: 'YOUR_CHANNEL_ID'
            });
          `}
        </Script>
        <Script src="https://api.respondo.ai/widget/widget.js" strategy="afterInteractive" />
      </body>
    </html>
  );
}

Что происходит, когда диалог закрывается?

Новое сообщение после закрытия автоматически открывает диалог-продолжение, связанный с предыдущим (в инбоксе показывается как «Continued from #N»). Контекст, например язык и предыдущая переписка, переносится, а посетитель видит один непрерывный чат. Если закрытым диалогом занимался оператор, продолжение возвращается вашей команде, а не ИИ; иначе его подхватывает ИИ.

Как загружается виджет?

Виджет загружается асинхронно (async), поэтому никогда не блокирует отрисовку страницы. Основной бандл — ~180KB (~50KB в gzip); дополнительные функции (кампании, продуктовые туры) загружаются отдельными ленивыми чанками после монтирования виджета, поэтому первичная отрисовка страницы никогда не блокируется.

Как работает эскалация?

Пользователи могут нажать кнопку «Позвать оператора», написать фразу с просьбой позвать человека, либо ИИ сам передаёт диалог, когда не может ответить по вашей базе знаний. После эскалации ИИ перестаёт отвечать, и все последующие сообщения пересылаются вашей команде поддержки. Подробности — в разделе «Эскалация и передача».

Могут ли пользователи продолжить общение с ИИ после эскалации?

Да. Виджет показывает кнопку «Продолжить с ИИ», которая позволяет пользователю отменить эскалацию и вернуться к диалогу с ИИ.

База знаний и сканирование сайта#

Почему сканирование моего сайта заблокировано?

«Заблокировано» означает, что сайт — или его защита (Cloudflare, WAF, антибот-плагин) — отказал нашему сканеру: стартовая страница или robots.txt при каждой попытке отвечали ошибкой доступа либо проверкой «проверяем ваш браузер», или robots.txt прямо запрещает наш сканер. Ранее импортированные страницы остаются целы, а повторная синхронизация будет падать так же, пока сайт нас не пустит. Попросите владельца сайта разрешить User-Agent RespondoAI-Crawler (полная строка: Mozilla/5.0 (compatible; RespondoAI-Crawler/1.0; +https://respondo.ai/bot)) в настройках защиты — в Cloudflare это Security → WAF → Custom rules — и, если причина в robots.txt, добавить разрешающее правило для User-agent: RespondoAI-Crawler. Respondo не публикует фиксированный IP-адрес сканера — разрешайте по User-Agent; если в ошибке на источнике указан IP, разрешите и его. Если сайт изменить нельзя, добавьте те же материалы файлами или вставленным текстом.

Сканирование завершилось, но нашло лишь несколько страниц

Мы находим страницы через sitemap сайта (строка Sitemap: в robots.txt или типовые адреса вроде /sitemap.xml) и переходя по ссылкам со стартового URL — до 10 переходов в глубину и до 5 000 страниц на источник. Импортируются только страницы того же сайта и внутри пути стартового URL: сканирование, начатое с https://example.com/help, пропустит /blog, поэтому начинайте с корня или добавьте включаемые пути. Страницы, на которые не ведёт ни одна ссылка или sitemap, страницы, запрещённые в robots.txt, и страницы за логином не будут найдены. Почти одинаковые страницы (версии для печати, варианты с параметрами отслеживания) объединяются в одну. Страницы, содержимое которых целиком рисуется JavaScript, распознаются и рендерятся резервным браузерным механизмом, так что малое число страниц обычно означает проблему с областью сканирования или sitemap, а не с рендерингом.

Как ограничить сканирование одним разделом сайта?

Раскройте Advanced в диалоге добавления сайта и заполните Only crawl paths starting with («сканировать только пути, начинающиеся с») и/или Skip paths starting with («пропускать пути, начинающиеся с») — по одному пути на строку, до 50 в каждом поле. Сопоставление идёт по целым сегментам пути: /docs совпадает с /docs и /docs/getting-started, но не с /docs-archive; хвостовой слеш игнорируется, можно вставить полный URL — возьмётся только его путь. Правила пропуска сильнее правил включения. Те же правила применяются к sitemap и к каждой последующей повторной синхронизации этого источника.

Как часто Respondo пересканирует мой сайт?

У каждого источника-сайта есть расписание Auto-refresh на панели его страниц: Off (выключено), Daily (каждые 24 часа) или Weekly (каждые 7 дней). Плановое сканирование инкрементальное: страницы, у которых lastmod в sitemap старше предыдущего сканирования, пропускаются, неизменившиеся страницы не переиндексируются, изменившиеся переиндексируются, а исчезнувшие удаляются. Чтобы обновить сразу, используйте Re-sync в меню источника или Re-sync all на странице Knowledge.

«Не получилось прочитать сайт в этот раз» — что произошло?

Это общий сбой: сайт не ответил вовремя, домен не разрешился, сервер вернул ошибку, на стартовой странице не было читаемого текста или адрес не найден. Подробность показана на источнике. Проверьте, что URL открывается в приватном окне браузера, что в домене нет опечатки и что стартовая страница — настоящая страница с содержимым, а не экран входа. Социальные сети и мессенджеры (Facebook, Instagram, LinkedIn, X, YouTube и подобные) импортировать нельзя вовсе — они отклоняются ещё до запуска сканирования. Существующие страницы сохраняются; источник с расписанием повторит попытку в следующий запуск, иначе запустите повторную синхронизацию, когда сайт снова будет доступен.

Что означают «наш поисковый индекс заполнен» и «не получилось проиндексировать этот источник»?

Оба сообщения появляются после того, как содержимое успешно прочитано. Индекс заполнен означает, что в поисковом индексе, куда копируется этот источник, на стороне Respondo нет места — это ограничение Respondo, а не проблема с вашим контентом. Страницы сохранены, всё уже проиндексированное продолжает отвечать, наша команда уведомлена автоматически, и источник будет проиндексирован, как только появится место; повторная синхронизация раньше упадёт так же. Не получилось проиндексировать этот источник означает, что построение поискового индекса в этот раз не удалось — временная ошибка на нашей стороне; прежние данные целы, задача повторяется автоматически. Если любое из сообщений не проходит, нажмите «Спросить Copilot» на ошибке.

Длинные страницы отвечают только своим началом?

Нет. Каждая отсканированная страница режется на перекрывающиеся фрагменты примерно по 1 600 символов, каждый индексируется отдельно с приложенным заголовком страницы, поэтому ответ может прийти из любой части длинной статьи. В ссылках на источники по-прежнему показывается одна ссылка на страницу. Страницы, импортированные до этого изменения, перенарезаются при последующих повторных синхронизациях.

Как получить помощь с ошибкой сканирования?

У каждой ошибки сканирования или индексации на странице Knowledge есть кнопка Спросить Copilot. Она открывает Copilot с приложенной ошибкой, и Copilot отвечает по собственной документации Respondo конкретными шагами для вашего случая. Эта помощь бесплатна — она не расходует ваши AI-запросы. Если шаги не помогли, так и напишите — достаточно «не помогло». Copilot сам предложит карточку передачи вопроса команде Respondo: в карточке перечислено, что именно уйдёт, ничего не отправится, пока вы не подтвердите, а ответ команды придёт в тот же тред Copilot. А если передать вопрос отсюда нельзя, Copilot скажет об этом прямо, а не промолчит.

Когда сообщение не дошло до клиента#

Под ответом написано «Not delivered» — что это значит и с чего начать?

У каждого исходящего сообщения в инбоксе есть индикатор доставки: Queued («в очереди» — ответы, написанные подряд, склеиваются и уходят одним письмом в течение минуты), Sending…, Sent, Delivered — или красная пометка о сбое. Сбоев три вида: Not delivered — канал отказался принять сообщение; Bounced с подтипом возврата рядом — почтовый сервер получателя отклонил письмо; Marked as spam — получатель пожаловался на спам. Наведите курсор на пометку или кликните по ней: в подсказке — дословный ответ провайдера, для возврата письма это ещё и сырая SMTP-диагностика. Рядом стоят до двух действий: Retry / Send again — это реальная переотправка, и Ask Copilot — открывает Copilot с приложенной ошибкой. Если кнопки повтора нет вовсе, адрес заблокирован и повторная отправка упадёт так же. Чистая пометка Sent или Delivered, рядом с которой стоит N files not delivered, означает, что текст дошёл, а вложение — нет: канал не смог унести файл.

Почему письмо не дошло до клиента?

Причин четыре, и пометка их различает. Постоянный возврат значит, что адреса не существует или он не принимает почту — кнопки повтора нет, а адрес попадает в suppression-лист. Временный возврат — переполненный ящик или проходящий сбой на принимающем сервере; предлагается Send again, и позже он обычно срабатывает. Возврат, в диагностике которого встречаются SPF, DKIM, DMARC или 5.7.515, — случай особый: почтовая система получателя отвергла письмо, потому что ваш домен отправки не прошёл проверку подлинности. Новый ответ отскочит ровно так же, пока домен не починят, — отвечайте пока в другом канале и приведите в порядок DNS-записи почтового канала в разделе Settings → Channels. Наконец, Marked as spam значит, что получатель нажал «пожаловаться на спам»: адрес заблокирован, и мы перестаём на него писать. В отчёте кампании дополнительно встречаются «Почтовый провайдер отклонил это письмо» — окончательный отказ ещё до отправки, чаще всего неподтверждённый домен отправки или неверный адрес, — и «Почтовый провайдер не принял наши учётные данные»: это проблема настройки воркспейса, а не конкретного контакта.

Что такое suppression-лист и как из него выйти?

Это список email-адресов вашего воркспейса, на которые Respondo отказывается отправлять. Адрес попадает туда, когда письмо даёт hard bounce (окончательный отказ), когда кто-то жалуется на ваше письмо как на спам, или когда его блокируют вручную. Временные возвраты адрес не блокируют. Пока блокировка активна, доставки кампаний пропускаются с причиной «Этот адрес заблокирован после прежнего возврата письма или жалобы», а ответ в инбоксе отклоняется ещё до отправки. Блокируется только настоящий получатель письма — уведомление о возврате не может заблокировать произвольный адрес. Экрана для этого списка в дашборде нет: владелец или админ может прочитать его запросом GET https://api.respondo.ai/api/v1/integrations/email/suppressions и снять блокировку запросом DELETE https://api.respondo.ai/api/v1/integrations/email/suppressions/<email> — либо попросить об этом поддержку Respondo. Снимайте блокировку после hard bounce только тогда, когда точно знаете, что ящик починили: повторная отправка на мёртвый адрес бьёт по репутации вашего домена.

WhatsApp не принимает ответ — 24-часовое окно

WhatsApp разрешает бизнесу писать свободным текстом только в течение 24 часов после последнего сообщения клиента; всё, что позже, Meta отклоняет ошибкой 131047. Respondo отслеживает это окно по каждому человеку и, когда знает, что оно истекло, останавливает ответ до отправки. Если отметки об окне у нас нет вовсе — контакт из импорта или номер, который вам ни разу не писал, — блокировки не будет: сообщение уйдёт в Meta, и решение за ней. Выхода ровно два. Дождаться, пока клиент напишет снова: его сообщение открывает окно ещё на 24 часа, и тогда ваш ответ уходит. Или отправить утверждённый Meta шаблон. Из композера беседы шаблоны не отправляются. Управлять ими нужно в разделе Outbound → WhatsApp templates: Sync подтягивает то, что уже зарегистрировано на вашем номере, New template отправляет новый на проверку Meta, которая занимает сутки и больше. Затем отправьте утверждённый шаблон исходящей кампанией на этот контакт. Шаблон доходит и внутри окна, и вне его — но только пока у него статус approved.

«Этот канал отключён» / «Этот канал не подключён»

Отключён означает, что интеграция есть, но она больше не активна: токен доступа отозвали, он истёк, или канал кто-то отключил. Не подключён означает, что за адресом контакта вообще нет интеграции. И то и другое чинится в разделе Settings → Channels: отключённые каналы собраны там под собственным заголовком, и на каждой карточке есть кнопка Reconnect. Переподключите канал и повторите отправку. Рядом два похожих, но других случая: почтовый канал с неподтверждённым доменом отправки нельзя перевести в Live, и он не отправит ничего, пока не подтверждены DKIM и SPF; а канал «только на приём» отказывает исходящим по своей природе, и Retry там не сработает никогда.

«Нет канала, по которому можно связаться» / «У контакта нет адреса»

Обе причины появляются в отчёте кампании, а не в инбоксе. Первая означает, что ни один адрес контакта не совпал с каналами, по которым идёт кампания; если единственный его адрес живёт в канале «только на приём», это отмечается отдельно — как осознанный пропуск. Вторая означает, что кампания шлёт письма, а адреса у контакта нет. У Telegram свой вариант: если человек ни разу не писал вашему боту, писать некуда — Bot API запрещает боту начинать диалог первым, первое сообщение всегда за человеком. Чинится добавлением недостающего адреса в карточку контакта, расширением списка каналов кампании или включением запасной отправки письмом.

Контакт отписался — что можно отправлять?

«Этот человек уже отписался от рассылок» означает, что у контакта стоит глобальный отказ: он перешёл по ссылке отписки в вашем письме, отказ приехал с импортом или его поставил коллега. Кампании и серии пропускают такие контакты во всех каналах, а не только в почте, и доставка записывается как пропуск, а не как сбой. Личный ответ сотрудника в беседе этот отказ намеренно не блокирует: отписка — про рассылки, а ответить человеку, который сам написал, — решение живого человека. Состояние видно в карточке контакта как Outbound: Subscribed / Unsubscribed, по нему можно фильтровать список контактов, а кнопка Re-subscribe на карточке возвращает подписку — нажимайте её только по просьбе самого человека.

Сколько раз вы повторяете отправку и безопасно ли жать Retry?

Ответ из инбокса уходит в очередь, которая делает до пяти попыток с паузами примерно 3, 10, 30 и 30 минут. Повторяются только временные сбои: таймауты, оборванные соединения, лимиты частоты, серверные ошибки самого провайдера. Окончательный отказ — несуществующий адрес, неподтверждённый домен отправки, отклонённые учётные данные — помечается как сбой сразу, потому что повтор вернёт тот же ответ. Доставки кампаний идут в своей очереди: до шести попыток и более короткие паузы — 5 секунд, 30 секунд, 2 минуты, 10 минут; когда они кончаются, доставка закрывается причиной «Доставка срывалась раз за разом и была остановлена после нескольких попыток», а не висит в «очереди» вечно. Нажимать Retry вручную безопасно. Кнопка работает только с сообщением, которое действительно в состоянии сбоя, а для почты сначала спрашивает провайдера, что стало с исходным письмом: если оно всё-таки ушло, строка переводится в «доставлено» вместо отправки второй копии, а настоящая переотправка уходит с новым ключом идемпотентности. Там, где вторая копия была бы ошибкой — hard bounce, жалоба на спам, ещё не завершённая отправка, — кнопки нет либо повтор отклоняется с объяснением причины.

Причина всё равно непонятна — как позвать на помощь?

У каждого несостоявшегося сообщения рядом есть кнопка Ask Copilot. Она открывает Copilot с приложенной ошибкой, каналом и беседой, и Copilot отвечает по собственной справке Respondo конкретными шагами именно для этого сбоя. Эта помощь бесплатна — она не расходует ваши AI-запросы. Если шаги не помогли, так и напишите — достаточно «не помогло». Copilot сам предложит карточку передачи вопроса команде Respondo: в карточке перечислено, что именно уйдёт, ничего не отправится, пока вы не подтвердите, а ответ команды придёт в тот же тред Copilot. А если передать вопрос отсюда нельзя, Copilot скажет об этом прямо, а не промолчит.