Я поставил защиту от ботов в чат-агенте — и она замолчала прямо перед живым покупателем
Но у автоответчика есть слабое место, о котором почти не думаешь, пока оно не сработает: что если с тобой переписывается не человек, а чужой бот? На Авито это бывает — конкуренты гоняют по объявлениям парсеры, которые долбят вопросами ради сбора цен, или просто кто-то тестирует свою автоматику на живых карточках. Без защиты два бота могут зациклиться друг на друге: один спрашивает, второй отвечает, оба не устают, и переписка превращается в бессмысленную дуэль на сотни сообщений.
Поэтому у агента стоит предохранитель от петель. Логика на вид разумная: если разговор выглядит «не по-человечески» — слишком похожие сообщения, слишком много отправок подряд — агент замолкает и присылает мне карточку «похоже на переписку с ботом, разберись сам».
20 сентября сработало на живом покупателе.
Человек листал объявления одного продавца и сравнивал семь машин подряд — цену, год, пробег, по каждой пара уточняющих вопросов. Обычная механика выбора: не тратить время на просмотры, а сначала обзвонить варианты текстом. Агент отвечал за 3 секунды на каждое сообщение — для него это нормальная скорость, он же не печатает руками. Покупатель писал быстро, агент отвечал быстро, разговор шёл ровно и по делу.
На пятнадцатой отправке сработал предохранитель. Причём ровно на реплике «Записаться на завтра?» — то есть в момент, когда человек уже был готов доехать и посмотреть машину вживую. Агент замолчал. Мне ушла карточка «похоже на бота».
Дальше в логах — и это то, что зацепило меня больше всего: покупатель написал «ау», потом «вы тут», потом двенадцать минут тишины. Человек ждал ответа от продавца, а получил обрыв связи ровно на моменте, где мы должны были дожать сделку. В итоге переписку подхватил я сам, руками, случайно заметив карточку раньше, чем клиент окончательно решил, что тут никто не отвечает.
Стал разбираться, почему предохранитель сработал именно тут. Оказалось, что он считал «похожестью на бота» количество быстрых отправок подряд без разбора, что внутри этих отправок происходит. А быстрый покупатель, который целенаправленно перебирает варианты, статистически ведёт себя почти как бот — короткие сообщения, высокий темп, без пауз на раздумья. Мы наказывали именно то поведение, которое должны были поощрять: решительного клиента, готового покупать сегодня.
Нашлась и вторая причина, которая подлила масла: тот же покупатель трижды написал одну и ту же фразу — «зикр 9 икс» (так у него распозналась марка и комплектация одной из машин) — потому что агент один раз не понял вопрос и не переспросил по-человечески, а покупатель решил, что дело в опечатке, и повторил. Три одинаковых сообщения подряд для эвристики выглядели точь-в-точь как зацикленный бот.
Чинил я не темп ответов агента — их трогать нельзя, скорость это наше преимущество. Чинил то, на что предохранитель вообще смотрит. Вместо счётчика «сколько отправок подряд» теперь считается медиана интервала между входящими сообщениями покупателя. У реального человека, даже быстрого, между сообщениями проходит около 25 секунд — он читает ответ, соображает, печатает следующий вопрос. У настоящего бота-парсера интервал меньше 8 секунд почти всегда: следующий запрос уходит сразу после получения предыдущего ответа, без паузы на «подумать». Повтор одинакового текста больше не считается сам по себе признаком — только в связке с темпом. Жёсткий потолок на всякий случай оставил: 40 отправок за 10 минут всё равно обрывает диалог, это уже точно не человек, сколько бы машин он ни сравнивал.
Что меня зацепило в этой истории — не сама ошибка, а то, откуда она взялась. Предохранитель писал не я в спешке, а спокойно, заранее, чтобы защититься от гипотетической проблемы. И именно такие предохранители, поставленные «на всякий случай» по косвенному признаку, потом бьют по самому ценному клиенту — тому, кто уже решил купить и просто хочет побыстрее. Проверять эвристику стоило не на ботах, а на живых быстрых покупателях: как раз тот сценарий, который выглядит подозрительно похоже, но на самом деле — лучший клиент из возможных.