Центр помощи должен отвечать на вопросы, а не выдавать список статей

Help Center

Пользователь хочет отменить подписку. Он вводит в поиск вашего центра помощи «хватит списывать деньги».

Ваша лучшая статья называется Управление подпиской. В ней нет слова «списывать». Нет слова «хватит». Поиск по ключевым словам ничего не находит, и пользователь открывает обращение в поддержку, которое могла бы закрыть ваша документация.

Так центры помощи обычно и ломаются, и дело не в контенте. Статью вы написали. Поиск просто не смог её найти.

Авторы и пользователи называют вещи по-разному

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

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

Семантический поиск закрывает разрыв

Поиск по центру помощи в Kookee семантический. Статьи переводятся в векторы, запрос — тем же способом, и совпадение ищется по смыслу, а не по общим буквам:

TypeScript
const results = await kookee.help.search({ query: 'хватит списывать деньги', limit: 5 });

results.forEach((result) => {
  result.title;        // 'Управление подпиской'
  result.matchedChunk; // фрагмент, который совпал с запросом
  result.category;     // { name, slug }
});

Из всего этого мне на практике полезнее всего matchedChunk. Вы получаете не только статью, но и фрагмент, который ответил на запрос. Поэтому страница результатов может сразу показать ответ, а не список синих ссылок, которые нужно просматривать.

А потом уберите поле поиска совсем

Поиск всё равно остаётся интерфейсом, где работу делает пользователь. Он формулирует запрос, просматривает результаты, открывает статью и снова ищет глазами абзац, который относится к нему.

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

tsx
import { KookeeChatWidget } from '@kookee/react/chat';
import '@kookee/react/chat.css';

<KookeeChatWidget
  clientOptions={{ apiKey: 'your-api-key' }}
  title="Помощь"
  greeting="Здравствуйте! Чем могу помочь?"
  suggestions={['С чего начать?', 'Какие есть тарифы?']}
  onSourceClick={(source) => window.open(`/help/${source.slug}`, '_blank')}
/>

Вот и вся интеграция. Это плавающая кнопка чата на любой странице, у неё есть темы light, dark и auto, и она принимает primaryColor, чтобы не выглядеть чужим продуктом, прикрученным к вашему.

Здесь важно, на что опираются ответы. Виджет отвечает по вашим статьям и ссылается на них. Если он чего-то не знает, значит, в документации пробел. А onSourceClick вместе со счётчиками просмотров статей показывают, какие статьи действительно несут нагрузку.

Пишите под вопрос, а не под функцию

Из всего этого следуют две вещи, и обе про то, как писать.

Семантический поиск ищет по смыслу, поэтому статью, которая начинается с проблемы пользователя, пересказанной его словами, найдут. Статью, которая начинается со слов «В этой статье описан интерфейс управления подпиской», не найдут, как бы хорошо ни была написана остальная часть.

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