Телеграм-боты без страха. От первого бота до своего каталога

- -
- 100%
- +
«Я не вижу действия — бот просто пишет текст». Значит, действия нет. Ответ без действия — половина всех шагов в любом боте.
«Мой список событий получился на сорок строк». Почти наверняка вы записали туда варианты одного события. «Клиент выбрал стрижку», «клиент выбрал окрашивание», «клиент выбрал укладку» — это одно событие «нажата кнопка с услугой» с разным содержимым. Схлопните такие строки в одну; правило простое: если реакция бота отличается только подставленным словом, событие одно.
«Я не знаю, чего хочу от бота». Тогда описывать события рано. Возьмите неделю переписок с клиентами и выпишите вопросы, которые повторились больше трёх раз. Бот начинается оттуда, а не с инструмента.
«Мне кажется, моя задача сложнее и в эту схему не влезет». Возможно. Проверить это можно только одним способом — попробовать разложить. Задачи, которые действительно не раскладываются на события, существуют, и в девятой главе мы разберём признаки, по которым видно, что вы упёрлись в потолок. Но упираются в него позже, чем боятся.
Глава 2. Схема разговора
Половина ботов, которые начинают собирать, не доживает до запуска. Причина почти всегда одна и та же, и она не техническая.
Человек открывает конструктор, видит поле для первого сообщения, пишет приветствие. Добавляет кнопку. Кнопка ведёт на второе сообщение — пишет второе. Оттуда нужны три ветки, он делает три. В каждой ветке ещё по паре шагов. Через час на экране паутина из тридцати прямоугольников, в которой уже не видно, куда что ведёт, а бот всё ещё не умеет главного. Человек закрывает вкладку и решает, что это сложнее, чем казалось.
Сложным было не это. Сложным было придумывать разговор одновременно с его сборкой. Две работы, каждая из которых требует головы целиком.
Поэтому правило, вокруг которого держится вся книга:
Сначала схема, потом инструмент.
Схема рисуется на бумаге, в заметках, в любом приложении для блок-схем — где угодно, кроме конструктора. Собирается за полчаса, переделывается за пять минут. Тот же бот, наполовину собранный в конструкторе, переделывается за час, и на третий раз вы бросите.
Человек, который расписал, что бот отвечает на каждое действие, соберёт его в любом инструменте. Человек, который не расписал, не соберёт нигде — ни в конструкторе, ни на коде, ни с программистом за деньги.
Эта глава — про то, как расписать. Навык из неё вы будете применять до последней страницы книги: в третьей части каждый из двадцати ботов описан именно такой схемой.
Если вы читали книгу «ИИ-агенты без кода», вы узнаете ход мысли. Там задача раскладывалась на шаги, и от качества раскладки зависело всё остальное. Здесь то же самое, только шаги идут не подряд, а ветвятся.
Что такое схемаСхема разговора — это список всех сообщений бота и всех переходов между ними.
Рисуется двумя элементами:
Прямоугольник — сообщение бота. Внутри пишется текст, который увидит человек, и перечисляются кнопки под ним.
Стрелка — действие человека. На стрелке подписывается, что именно он сделал: нажал такую-то кнопку, написал текст, ничего не сделал в течение суток.
Всё. Никаких других фигур не нужно, никакой нотации учить не надо. Кто пробовал рисовать блок-схемы по правилам, знает, сколько времени уходит на выбор фигуры вместо работы. Здесь выбирать не из чего.
Вот кусок нашего сквозного бота записи на услугу, записанный текстом. Рисовать удобнее, но текстом можно передать в книге, а вы перенесёте на бумагу.
[1] «Здравствуйте! Чем помочь?»
Кнопки: Записаться · Мои записи · Как нас найти
→ «Записаться» ведёт в [2]
→ «Мои записи» ведёт в [10]
→ «Как нас найти» ведёт в [11]
→ любой текст ведёт в [90]
[2] «Выберите услугу»
Кнопки: Стрижка · Окрашивание · Укладка · Назад
→ услуга ведёт в [3]
→ «Назад» ведёт в [1]
→ любой текст ведёт в [90]
[3] «На какой день?»
Кнопки: ближайшие свободные дни · Другая дата · Назад
→ день ведёт в [4]
→ «Другая дата» ведёт в [3a]
→ «Назад» ведёт в [2]
[3a] «Напишите дату числом: 25.08»
Кнопки: Назад к ближайшим дням
→ разобранная дата ведёт в [4]
→ неразобранный текст ведёт в [3a] с пояснением
→ «Назад» ведёт в [3]
[4] «Во сколько?»
Кнопки: свободные часы · Назад
→ час ведёт в [5]
→ «Назад» ведёт в [3]
[5] «Записал: стрижка, четверг, 15:00. Всё верно?»
Кнопки: Да, записать · Изменить
→ «Да» ведёт в [6]
→ «Изменить» ведёт в [2]
[6] «Готово. Напомню за день до визита.»
Кнопки: Отменить запись · В начало
Номера в квадратных скобках нужны, чтобы ссылаться на шаги, не переписывая их текст. В конструкторе они превратятся в названия блоков, в коде — в названия состояний. Пока это просто способ не запутаться.
Шаг [3a] с буквой — ответвление от третьего шага, а не самостоятельный этап. Так удобно помечать боковые ветки: видно, откуда человек пришёл и куда вернётся.
Обратите внимание на шаг [90] в конце первых двух блоков. Про него — отдельный раздел ниже, и он важнее половины остальной схемы.
Главное правилоУ каждого сообщения бота должен быть предусмотрен ответ на всё, что человек может нажать или написать.
Правило звучит очевидно ровно до момента, когда вы начнёте проверять по нему свою схему. Тогда выяснится, что необработанных вариантов в ней больше, чем обработанных.
Проверяется каждый прямоугольник по отдельности. Смотрите на сообщение бота и спрашиваете: что человек может сделать прямо сейчас?
Он может нажать любую из показанных кнопок. Для каждой должна быть стрелка — с этим обычно всё в порядке.
Он может написать текст. Любой. «Здравствуйте», «а сколько стоит», «алло», случайную букву, потому что телефон в кармане. Стрелка на этот случай есть?
Он может нажать кнопку под старым сообщением бота, прокрутив переписку вверх. Такое бывает чаще, чем кажется: человек вернулся в чат через два дня, увидел последнее, что помнит, и нажал.
Он может ничего не делать. Открыл, отвлёкся, забыл. Через сутки вспомнил.
Он может прислать картинку, голосовое, файл, стикер.
Он может нажать «старт» посреди разговора.
Полностью закрыть все варианты в первой версии бота не нужно. Нужно знать, какие вы не закрыли, и сознательно решить, что с ними будет. Непредусмотренный вариант не исчезает от того, что вы о нём не подумали, — он просто превращается в молчащего бота на глазах у клиента.
Практический минимум, ниже которого опускаться нельзя, — три вещи из следующих трёх разделов: тупики, ветка «не понял», команда «начать сначала».
ТупикиТупик — это шаг, с которого нет выхода. Человек попал и остался.
Тупики появляются сами собой, никто не рисует их намеренно. Самые частые виды:
Сообщение без кнопок и без обработки текста. «Спасибо за заявку!» — и всё. Что теперь? Написать нельзя, ответа не будет. Нажать нечего. Человек сидит в переписке, где ничего не работает, и делает единственный доступный вывод: бот сломался.
Ветка, которая не возвращается. «Как нас найти» → адрес и карта. Кнопки «В начало» нет, потому что показалось, что и так понятно. Не понятно.
Ссылка вместо кнопки. Ссылка уводит в браузер и обратно не приводит. Как единственный выход со шага она делает шаг тупиком.
Ожидание того, чего человек не даст. Бот просит прислать фотографию, а у человека её нет. Кнопки «пропустить» не предусмотрено. Разговор кончился.
Ошибка в самом конце. Человек прошёл семь шагов, на восьмом что-то не сработало, бот молчит. Формально тупика в схеме нет, а на практике человек в нём стоит.
Ищутся тупики механически, и это лучшая новость этой главы. Пройдите по списку шагов и отметьте каждый, из которого нет ни одной исходящей стрелки. Каждый такой шаг — либо законный конец разговора, либо тупик.
Законных концов у бота, вообще говоря, не бывает. Даже финальное «Готово, ждём вас в четверг» должно нести кнопку «В начало» или «Отменить запись». Разговор с ботом не заканчивается — он возвращается в исходную точку.
Второй способ проверки, который ловит то, что не поймал первый: возьмите список шагов и для каждого спросите, какие стрелки в него входят. Шаг, в который не входит ни одна, — недостижимый: вы его придумали, но попасть туда невозможно. Такое случается после переделок схемы.
Ветка «не понял»Человек напишет текст там, где вы ждали нажатия кнопки. Не иногда — регулярно. Люди пишут «да», «хорошо», «а можно завтра», пишут вопросы, здороваются в середине опроса. Кнопки не отменяют привычки разговаривать.
Значит, у бота должен быть ответ на неопознанный текст. Это и есть ветка «не понял» — шаг [90] из схемы выше.
Устроена она просто. Бот получил сообщение, которое не совпало ни с одним ожидаемым вариантом, отвечает объяснением и возвращает человека туда, где тот стоял.
[90] «Не разобрал сообщение. Выберите вариант кнопкой
или напишите /start, чтобы начать сначала.»
Кнопки: те же, что были на текущем шаге
Три требования к этой ветке, каждое из которых стоит того, чтобы его соблюсти.
Она повторяет кнопки текущего шага. Не отправляет в начало — это наказание за попытку заговорить. Человек стоял на выборе даты, написал «а в выходные?» — он должен снова увидеть дни, а не приветствие.
Она не срабатывает бесконечно. Если один и тот же человек попал в «не понял» три раза подряд, дальше повторять бессмысленно — сценарий не сходится с тем, чего он хочет. На третий раз показывается кнопка «Написать человеку» или контакт. Считать повторы умеет и конструктор, и код; это ровно то самое состояние из первой главы, только хранит оно не шаг, а число.
Она не оправдывается. «Извините, я всего лишь бот и не понимаю сложных фраз» — лишние слова. Короткое «Не разобрал» плюс кнопки работает лучше.
Отдельно про формулировку. Не пишите «Такой команды не существует» и «Ошибка ввода». Человек не вводил команду и не ошибался — он просто написал предложение. Виноват сценарий, который этого не предусмотрел, и незачем сообщать человеку, что он что-то сделал не так.
Команда «начать сначала»Обязательный элемент, без исключений.
У человека должен быть способ выйти из любого места разговора в исходную точку одним действием. Обычно это команда «старт», которую платформа и так показывает в меню бота. Достаточно, чтобы она работала отовсюду, а не только с чистого листа.
Проверка простая: зайдите на середину любого опроса и напишите «старт». Если бот воспринял это как ответ на текущий вопрос и записал слово «старт» в графу «имя» — команда не обработана.
Здесь нужна одна тонкость, о которой почти все забывают. «Начать сначала» должно стирать состояние, а не просто показывать первое сообщение. Иначе человек видит приветствие, нажимает «Записаться», а бот продолжает с той строки анкеты, на которой стоял. Галочка осталась на месте.
Рядом с «начать сначала» стоит кнопка «Назад» — она не обязательна, но сильно улучшает бота. Разница между ними в том, что «Назад» отматывает один шаг и сохраняет всё остальное, а «начать сначала» сбрасывает всё.
Кнопки против свободного текстаПравило: кнопки везде, где можно.
Обоснование чисто практическое. Каждое место, где человек пишет текст, — это место, где он может написать что угодно. Каждый такой ввод нужно проверять, а на неподходящий отвечать. Кнопка не может быть неправильной: нажать можно только то, что показано.
Свободный текст оправдан в трёх случаях.
Данные, которых вы не знаете заранее. Имя. Телефон. Адрес. Кнопками не покажешь.
Список, который слишком длинный для кнопок. Больше десяти вариантов на экране — уже неудобно, больше двадцати — бессмысленно. Здесь либо ввод с поиском, либо разбивка на два шага: сначала категория кнопками, потом варианты внутри неё.
Вопрос, ответ на который заранее не сузить. «Опишите проблему» в поддержке. Ответ уйдёт человеку, а не боту, и разбирать его будет человек. Такой шаг честнее любых кнопок.
Даже здесь ввод стоит сопровождать кнопкой «Пропустить» или «Назад». Иначе шаг превращается в тупик для того, кто не хочет отвечать.
Отдельно: дату и время всегда давайте кнопками. Строчка, которую человек напишет руками, — это «завтра», «14 числа», «в след пн», «в пятницу после обеда». Разбирать такое без нейросети мучительно, а с нейросетью — дорого и всё равно с ошибками. Показать восемь свободных окон кнопками проще для обеих сторон, и заодно вы никогда не получите заявку на день, когда закрыты.
Приём: попросить модель найти дырыСхема, которую вы нарисовали сами, проверяется вами же — и вы проверяете её по той логике, по которой рисовали. Непокрытые ветки остаются невидимыми ровно потому, что вы о них не подумали дважды.
Здесь помогает нейросеть, и это первое место в книге, где она пригодится. Механика запроса разобрана в книге «Нейросети для работы»; здесь достаточно готовой формулировки.
Скопируйте схему текстом — в том виде, в каком она записана выше, с номерами шагов, — и попросите примерно следующее:
Вот схема разговора телеграм-бота. Проверь её по трём пунктам и ответь списком, без вступления.
Шаги, из которых нет выхода.
Шаги, в которые нельзя попасть.
Ситуации, на которые не предусмотрен ответ: человек написал текст вместо нажатия кнопки, нажал кнопку под старым сообщением, вернулся через сутки, прислал файл или голосовое. По каждому пункту укажи номер шага. Если по пункту замечаний нет, так и напиши.
Работает это хорошо по одной причине: задача формальная. Найти шаг без исходящих стрелок — механическая проверка списка, а не творчество. Здесь модель не выдумывает, а считает.
Чего от неё не стоит ждать: она не знает вашего дела. Совет «добавьте оплату онлайн» может быть уместным, а может быть бессмысленным, потому что у вас оплата на месте. Замечания по структуре берите, замечания по существу отбрасывайте.
Второй полезный вариант того же приёма: попросите модель сыграть за клиента, который ведёт себя неудобно.
Ты клиент, который хочет записаться, но плохо читает и пишет вместо нажатия кнопок. Пройди по этой схеме и покажи, где ты застрянешь.
Ответ обычно неприятный и полезный.
Как схема ложится в инструментСхема одинаковая, дальнейшая судьба у неё разная, и полезно понимать это заранее — тогда во второй части книги ничего не придётся переучивать.
В конструкторе прямоугольник становится блоком, стрелка — соединением между блоками. Схема переносится почти буквально: то, что нарисовано на бумаге, вы повторяете мышкой. Именно поэтому перерисовать схему на бумаге дёшево, а перерисовать её в конструкторе — час работы.
В коде прямоугольник становится функцией, которая отправляет сообщение, стрелка — записью «после этого шага перейти в такой-то». Номера шагов из схемы превращаются в названия состояний, и от того, насколько внятно вы их назвали, зависит, разберётесь ли вы в собственном коде через месяц.
Отсюда рекомендация: давайте шагам осмысленные имена сразу. Не «шаг 4», а «выбор времени». Номера удобны, пока схема на одном листе, и перестают быть удобными на тридцати шагах.
УпражнениеВозьмите свою задачу и нарисуйте схему. На бумаге, не в конструкторе.
Порядок, который работает быстрее всего:
Сначала главный путь. Человек пришёл, всё сделал правильно, дошёл до конца. Обычно это пять-семь прямоугольников. Не отвлекайтесь на исключения, пока не дорисовали главный путь до конца.
Потом возвраты. К каждому шагу — «Назад» и «В начало».
Потом отказы. На каждом шаге человек может передумать. Куда он попадает?
Потом непонятое. Ветка «не понял» с возвратом на текущий шаг.
Потом события по времени, если они есть. Напоминание, отмена по истечении срока, повторный вопрос через сутки.
Разбор реальной задачи по этому порядку занимает от получаса до двух часов. Это ровно то время, которое вы иначе потратите на переделки в конструкторе, только здесь оно потрачено с результатом.
Что должно получитьсяСхема вашего бота на бумаге: все сообщения, все переходы, ветка «не понял», возвраты и события по времени.
Прогоните её по девяти пунктам. Каждый — вопрос, на который отвечают «да» или «нет», без «вроде бы».
Есть ли шаги, из которых нет ни одной стрелки?
Есть ли шаги, в которые не входит ни одна стрелка?
С каждого ли шага можно вернуться назад?
Работает ли «начать сначала» из любой точки и стирает ли оно состояние?
Есть ли ветка «не понял», и возвращает ли она на текущий шаг?
Что происходит, если человек нажал кнопку под старым сообщением?
Что происходит, если человек пропал на сутки посреди опроса?
Есть ли способ дозваться живого человека?
Указано ли для каждого шага, что бот делает внутри — записывает, уведомляет, ставит напоминание?
Схема, прошедшая эти девять пунктов, собирается в конструкторе за вечер. Дальше — третья глава, где мы заводим бота и получаем от него первое сообщение.
Если не получилось«Схема разрослась до сотни шагов». Скорее всего, вы нарисовали отдельную ветку для каждого варианта выбора: своя цепочка для стрижки, своя для окрашивания, своя для укладки. Это одна цепочка, в которой запомнена выбранная услуга. Правило то же, что в первой главе: если шаги отличаются только подставленным словом, шаг один.
«Не понимаю, где заканчивается один шаг и начинается другой». Шаг — это одно сообщение бота и ожидание ответа. Если бот отправил три сообщения подряд и ничего не ждёт — это один шаг с длинным текстом.
«Кнопок на шаге получилось пятнадцать». Разбейте на два шага: категория, потом вариант. Заодно на экране перестанет быть тесно.
«Не могу решить, кнопки или текст». Спросите, сколько вариантов ответа существует. Конечное число, которое влезает на экран, — кнопки. Бесконечное — текст с проверкой.
«Схема есть, но кажется, что бот получается тупой». Обычно так и есть, и обычно это правильно. Первый бот должен уметь одно дело целиком, а не пять дел наполовину. Всё лишнее из схемы вычёркивается до сборки, а не после.
«Клиент всё равно напишет что-то, чего я не предусмотрел». Напишет. Задача схемы не в том, чтобы предугадать всё, а в том, чтобы непредусмотренное не ломало разговор. Ветка «не понял» и выход к живому человеку закрывают этот случай целиком.
Глава 3. Регистрация бота и первый запуск
Задача этой главы — получить от собственного бота первое сообщение. Не собрать сценарий, не подключить таблицу, а просто написать боту «старт» и увидеть ответ, который вы сами придумали.
Занимает это около получаса, из которых двадцать минут уходит на придумывание имени.
Важно понимать, что в этой главе делается, а что нет. Здесь бот заводится — получает имя, адрес и ключ доступа. Ума ему это не добавляет: он умеет ровно одно сообщение. Сценарий из схемы, нарисованной во второй главе, мы будем собирать в четвёртой. Но заводится бот один раз и потом живёт годами, а сценарий внутри него можно переделывать сколько угодно.
Что вообще происходит при регистрацииБот регистрируется у самой платформы, а не у конструктора. Это первое, что стоит понять, потому что из этого следует всё остальное.
Внутри мессенджера есть служебный бот, через который создаются все остальные боты. Он один на всех. Вы пишете ему, он заводит вам нового бота и выдаёт токен — длинную строку из цифр и букв.
Токен — это ключ. Всё, что потом происходит с ботом, происходит через него: конструктор с этим токеном управляет ботом, ваш код с этим токеном управляет ботом. Сам бот живёт на серверах платформы; конструктор и код лишь говорят ему, что отвечать.
Отсюда практическое следствие, которое избавляет от главного страха переезда: бот не привязан к конструктору. Надоел сервис, вырос тариф, пришло время своего кода — вы забираете токен и вставляете в другое место. Имя бота, адрес, подписчики остаются. Люди даже не заметят, что внутри что-то поменялось.
Именно поэтому во второй части книги мы не будем заводить нового бота. Возьмём того же самого.
Заводим ботаПорядок действий, без описания того, где что нарисовано на экране.
Находите служебного бота платформы. Он называется BotFather — ищется через обычный поиск по имени. Отличается синей галочкой; ботов с похожими именами много, и все они не те. Проверьте галочку, прежде чем что-то ему писать.
Начинаете разговор обычной командой «старт». В ответ приходит список команд — их там много, но нужна одна.
Даёте команду создания нового бота. Она называется /newbot.
Отвечаете на два вопроса. Первый — как бота зовут. Второй — какой у него адрес.
Дальше про эти два вопроса подробнее, потому что второй меняется тяжело, а первый — легко.
ИмяИмя — то, что человек видит вверху переписки. Русские буквы, пробелы, эмодзи — всё разрешено. Меняется в любой момент, без последствий.
Пишите то, что понятно вашему клиенту: «Запись — салон "Марта"», а не «Marta bot v2».
АдресАдрес — то, что начинается с собаки: @marta_zapis_bot. По нему бота находят в поиске и по нему дают ссылку.
Требования: только латинские буквы, цифры и подчёркивание, обязательное окончание на bot или _bot, длина от пяти до тридцати двух символов.
Адрес меняется, но со сложностями: старая ссылка перестаёт работать. Если вы уже раздали её клиентам, напечатали на визитке или поставили в шапку канала — переезд обойдётся дорого. Поэтому думайте над адресом дольше, чем над именем.
Три совета, которые экономят время:
Короче — лучше. Адрес диктуют по телефону.
Без года и без версии. salon_2026_bot через год выглядит заброшенным.
Занятые адреса не освобождаются. Хороший короткий адрес почти наверняка занят, и это нормально: добавьте название города или дела, а не цифру в конец.
ТокенПосле второго ответа приходит сообщение с токеном. Выглядит он как число, двоеточие и длинная строка символов.
Что с ним сделать прямо сейчас: скопировать и сохранить туда, где вы его найдёте через месяц и куда не залезут посторонние. Менеджер паролей, если он у вас есть. Заметка на устройстве — хуже, но приемлемо.
Чего с ним не делать никогда: не пересылать в переписке, не выкладывать на скриншотах, не вставлять в публичный код, не отправлять тому, кто предлагает «помочь настроить».
Если токен утёк — тот, кто его получил, управляет вашим ботом полностью: читает все переписки, пишет от его имени вашим клиентам, меняет настройки. Не «может причинить неудобство», а именно управляет.
Что делать, если утёк: у служебного бота есть команда перевыпуска токена. Старый мгновенно перестаёт работать, вы получаете новый и подставляете его в конструктор. Бот, подписчики, имя, адрес — всё остаётся. Потеря — несколько минут, пока бот не отвечает.



