Виджет обратной связи не должен требовать регистрации

Product

Доска обратной связи в Kookee живёт на готовом портале, и написать туда можно только с аккаунтом. Я сделал так намеренно. Один аккаунт — один голос, у каждого поста есть автор, которому можно ответить, а ваша команда решает, что остаётся на виду у всех.

А теперь вспомните, кто находит ошибки. Человек выгружает отчёт, и в PDF не хватает последнего графика. Чтобы сообщить вам об этом, ему нужно уйти со страницы, найти ваш портал, создать аккаунт, подтвердить почту и написать пост, который прочитают посторонние люди. Единицы так и сделают. Остальные закроют вкладку или через неделю напишут в поддержку пару слов.

Поэтому у виджета для сайта теперь есть вкладка Отзыв. Посетитель пишет, что случилось, прямо на той странице, где это случилось, и отправляет без аккаунта. Сообщение видит ваша команда и больше никто. В том же релизе я сделал то, что давно откладывал: чат с ИИ, Спросить ИИ, теперь можно выключить.

Вкладка «Отзыв» в виджете: выбрана «Ошибка», сообщение про экспорт в PDF и уже заполненный email посетителя

Вот правила, по которым я её делал.

1. Просить сообщение, а не аккаунт

Форма спрашивает три вещи: о чём сообщение (идея, улучшение, ошибка или что-то другое), само сообщение и email, если посетитель хочет получить ответ. Если ваш сайт уже сообщает виджету, кто вошёл в систему, email подставляется сам. Адрес страницы уходит вместе с сообщением, поэтому «экспорт сломался» приходит с адресом страницы, где он сломался.

Очевидный короткий путь я рассматривал. Kookee уже поддерживает гостевых пользователей, и каждое сообщение могло бы создавать такого гостя. Я от этого отказался. Гостевой аккаунт на каждое сообщение засоряет ваш список пользователей людьми, которые никогда не регистрировались, и обещает то, чего нет: аккаунт, в который никто не войдёт, с постом, который никто больше не найдёт. Сообщение из виджета хранится как сообщение, с теми контактами, которые посетитель захотел оставить.

2. Ничего не становится публичным, пока это не прочитал человек

Открытая форма в интернете собирает три вида сообщений: полезные, сырые и спам. Если отправлять их сразу на публичную доску, доска станет похожа на ваш почтовый ящик.

Поэтому сообщения ждут. На странице Обратная связь в панели управления есть второй вид, Из виджета: там каждое сообщение, его категория, отправитель, если он представился, страница, с которой оно пришло, и время.

Обратная связь → Из виджета: четыре сообщения ждут проверки, у каждого категория, контакт, страница и время, и кнопка «Отклонить выбранные»

В открытом сообщении три действия. Добавить на доску превращает его в пост в первой открытой колонке, с заголовком, который вы зададите. Привязать к существующему посту — для запроса, который у вас уже есть: сообщение присоединяется к этому посту, а не становится его дубликатом. Закрыть удаляет сообщение.

Сообщение из виджета для сайта с email, именем и страницей посетителя и действиями «Добавить на доску», «Привязать к существующему посту» и «Закрыть»

Важнее всего, по-моему, окажется привязка. Десять человек, которые десятью разными словами описывают одну и ту же недостающую функцию, должны превратиться в один пост, за которым стоят десять человек. Пост хранит их сообщения, и тем, кто оставил email, вы сможете написать, когда функция выйдет.

3. Сообщать команде раз в час, а не на каждое сообщение

Уведомление на каждое сообщение работает до первого загруженного дня. После этого оно приучает всех не замечать уведомления.

Поэтому виджет никого не оповещает в реальном времени. Раз в час, если пришли новые сообщения, каждый в команде получает одно уведомление в панели управления и одно письмо о том, что сообщения ждут. Десять сообщений за час — одно письмо. Тихая неделя — ни одного.

4. Открытой форме нужны лимиты, до которых живые люди не дойдут

Всё, что посетитель может отправить без аккаунта, может отправить и скрипт. Лимиты стоят намного выше того, что делает человек, и намного ниже того, что делает скрипт: 30 сообщений в час с одного адреса, 120 в час на весь проект и не больше 1000 в очереди на проверку. Когда очередь заполнена, виджет не принимает новые сообщения, пока кто-нибудь не разберёт хотя бы несколько, а панель управления объясняет почему.

Из той же логики выросли ещё два решения. Сообщение, которое никто не добавил на доску и не привязал к посту, удаляется через 90 дней, поэтому очередь не растёт бесконечно. А отправленное сообщение не расходует месячную квоту API. Форма обратной связи не должна ничего вам стоить, когда ею кто-то пользуется.

5. Чат-бот тоже должен быть необязательным

До этой недели чат был единственной вкладкой, которую нельзя было выключить. Вкладки «Главная», «Помощь» и «Отзыв» были дополнениями к нему. Я так решил в самом начале, когда виджет был только чатом, и это решение пережило свою причину.

Одни команды пока не хотят, чтобы их клиентам отвечал ИИ. У других десяток статей в центре помощи, и они знают, что ассистент чаще всего будет говорить, что не уверен. Третьим нужно только место для документации, журнала изменений и формы обратной связи. Виджет, который навязывает чат-бот, такие команды не ставят.

Теперь Спросить ИИ — такая же вкладка, как остальные. Снимите с неё галочку, и чата в виджете не останется нигде: с Главной пропадёт поле для вопроса, из статей — кнопка Спросить об этой статье, и даже вызов KookeeChat.sendMessage() из вашего кода ничего не сделает, так что ответ, который некому читать, не генерируется.

Виджет для сайта без «Спросить ИИ»: Главная с объявлением, ссылками и новостями и только три вкладки — «Главная», «Помощь» и «Отзыв»

Одна деталь потребовала больше внимания, чем кажется. Раньше виджет открывался на чате и переключался на сохранённые вкладки, когда они через мгновение приходили с сервера. Теперь чат может быть выключен, и в это мгновение посетитель увидел бы чат-бот, который владелец отключил, а самый быстрый успел бы начать в нём печатать. Поэтому панель, которая открывается вместе со страницей, теперь ждёт свои настройки, но не дольше пяти секунд. Если запрос завис, посетитель получает чат, а не спиннер, а настоящие вкладки сменяют его, когда придут.

В панели управления есть своя защита: с последней включённой вкладки галочку не снять, поэтому виджет всегда что-то показывает.

Карточка «Вкладки» в разделе «Виджет для сайта → Настроить»: «Главная», «Помощь» и «Обратная связь» включены, «Спросить ИИ» выключена, и подсказка, что порядок вкладок меняется перетаскиванием

Чего я делать не стал

Ответы. В виджете нет ни входящих, ни переписки. Если хотите кому-то ответить, напишите на email, который он оставил. Переписка — это инструмент поддержки, а форма обратной связи, которая пытается им стать, в итоге хуже справляется и с тем, и с другим.

Голоса. Голосовать из виджета нельзя. Голосование остаётся на портале, где один аккаунт — один голос.

Доверие к тому, что передаёт страница. Имя, id и email, которые сайт передаёт виджету, показываются в сообщении с пометкой «Не проверено». Это подписи, а не удостоверение личности.

Как подключить

Тег script подхватывает всё это сам, на сайте ничего менять не нужно. Если вы ставите виджет из npm, для вкладки «Отзыв» нужен @kookee/react 1.13, а чтобы выключить «Спросить ИИ» — 1.14. Затем откройте Виджет для сайта → Настроить, отметьте Обратная связь и снимите галочку со Спросить ИИ, если нужен виджет без чата.

Чтобы открывать форму из своей ссылки вроде «Сообщить о проблеме»:

js
KookeeChat.open('feedback');

Подробно всё описано в статье Собирайте обратную связь через виджет для сайта, а про остальные вкладки — в статье Добавьте в виджет вкладки «Главная» и «Помощь».