Пользователь хочет отменить подписку. Он вводит в поиск вашего центра помощи «хватит списывать деньги».
Ваша лучшая статья называется Управление подпиской. В ней нет слова «списывать». Нет слова «хватит». Поиск по ключевым словам ничего не находит, и пользователь открывает обращение в поддержку, которое могла бы закрыть ваша документация.
Так центры помощи обычно и ломаются, и дело не в контенте. Статью вы написали. Поиск просто не смог её найти.
Авторы и пользователи называют вещи по-разному
Статьи справки пишут люди, которые знают продукт. Они пользуются словами продукта: подписка, место, рабочее пространство, права. Запросы пишут люди, которые продукт ещё не знают. У них свои слова: тариф, пользователь, аккаунт, доступ.
Поиску по ключевым словам нужно, чтобы эти два словаря пересекались. Часто они не пересекаются, и сильнее всего разрыв как раз у тех, кому помощь нужнее всего, — у новых пользователей.
Семантический поиск закрывает разрыв
Поиск по центру помощи в Kookee семантический. Статьи переводятся в векторы, запрос — тем же способом, и совпадение ищется по смыслу, а не по общим буквам:
const results = await kookee.help.search({ query: 'хватит списывать деньги', limit: 5 });
results.forEach((result) => {
result.title; // 'Управление подпиской'
result.matchedChunk; // фрагмент, который совпал с запросом
result.category; // { name, slug }
});
Из всего этого мне на практике полезнее всего matchedChunk. Вы получаете не только статью, но и фрагмент, который ответил на запрос. Поэтому страница результатов может сразу показать ответ, а не список синих ссылок, которые нужно просматривать.
А потом уберите поле поиска совсем
Поиск всё равно остаётся интерфейсом, где работу делает пользователь. Он формулирует запрос, просматривает результаты, открывает статью и снова ищет глазами абзац, который относится к нему.
С чат-виджетом этих шагов нет. Он отвечает обычным языком, опирается на опубликованные статьи центра помощи и ссылается на источники, которые использовал:
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 вместе со счётчиками просмотров статей показывают, какие статьи действительно несут нагрузку.
Пишите под вопрос, а не под функцию
Из всего этого следуют две вещи, и обе про то, как писать.
Семантический поиск ищет по смыслу, поэтому статью, которая начинается с проблемы пользователя, пересказанной его словами, найдут. Статью, которая начинается со слов «В этой статье описан интерфейс управления подпиской», не найдут, как бы хорошо ни была написана остальная часть.
А цифры показывают, где вы ошиблись. Если у статьи большой трафик, а в поддержку всё равно приходит один и тот же вопрос, значит, дело не в том, что статьи нет. Статья неправильная: люди её находят, а она не помогает. Из всего, что показывает центр помощи, по этому сигналу яснее всего, что делать.