Как составить чат бот

Как написать простого бота для ВК и Телеграм

Время на прочтение
14 мин

Количество просмотров 37K

Мы уже упоминали, как мы предоставляем бесплатные VPS для студентов, чтобы они учились программировать. Один из наших подопечных Павел сделал простеньких телеграм и ВК ботов для FAQ. Они очень простые, тем не менее, начинающему программисту не помешают комментарии опытных ребят — поэтому публикуем его рассказ — Павел будет рад, если в комментариях ему дадут советы.

Я — студент Новосибирского Государственного Технического Университета, не так давно мы с парочкой моих друзей реализовали площадку для продвижения проектов во всех возможных областях научной деятельности. Мы помогаем «сводить» заинтересованных преподавателей и студентов всех ВУЗов Сибири, чтобы проектная научная деятельность развивалась по территории Сибири и РФ.

Студенты и преподаватели часто обращались ко мне с вопросами и я решил автоматизировать этот процесс, написав ботов для ВК и Телеграм.

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

Я использовал Python версии 3.6  просто потому, что он самый простой для меня. Кодил в PyCharm Community Edition. Весь код опубликован на GitHub. Удачи!

1. Предварительные приготовления для телеграм-бота

1.1 Получение токена от BotFather в телеграмме

Первым делом, нам нужно «зарегистрировать» нашего бота в Telegram.

Для этого, в поисковике телеги ищем BotFather

далее, делаем всё также, как на скриншотах:

После нажимаем на команду /newbot или же прописываем вручную.

Надо придумать уникальное имя для бота, придумываем и получаем соответствующий токен.

1.2 Переходим в любой редактор кода и создаем файл config.py

Перед созданием данного файла, нам нужно выбрать директорию, в которой будет реализован весь функционал бота. Если вы используете PyCharm Community/Professional Edition, то предлагаю просто создать новый проект, и писать там весь функционал бота.

Если Вы используете любой другой редактор, такой как Sublime Text 3, например, то Вам самостоятельно придётся создать директорию, создать виртуальное окружение, и работать из консоли со всеми предварительными тестами. Во избежание трудностей, предлагаю скачать продукт PyCharm Community Edition от компании JetBrains, с помощью данного продукта можно обойти действия, описанные в предыдущем абзаце, так как данный продукт сделает их самостоятельно, от Вас потребуется только указать путь до интерпретатора Python в конфигурациях PyCharm, с помощью которого и будет работать Ваш бот.

В данном файле (config.py) будет храниться только токен, который нам дал BotFather, поэтому пишем:

token = "Здесь хранится Ваш токен".

1.3 Cоздаём главный файл — bot.py

Делаем cледующие импорты и для соответствующих библиотек, в консоли прописываем закоментированные строчки:

import config
import telebot # pip install telebot
from telebot import types # pip install pyTelegramBotAPI

Далее, нам необходимо использовать наш токен:

bot = telebot.TeleBot(config.token)

Этими действиям мы устанавливаем то, что мы будем накручивать функционал именно для того бота, для которого нам и дал токен BotFather.

2. Разворачиваем функционал

Начнём с того, что для того, чтобы пользователю запустить бота, нам необходимо прописать команды для старта они могут быть разными, например, /start или /go и вообще любыми, какие Вы сочтёте нужными.

Для обработки команд нам потребуется message_handler, с помощью которого и будет реализован весь функционал обработки команд для старта и завершения, если Вы сочтёте нужным добавить завершение. Как только придёт команда /go или /start, message_handler с соответствующими командами сравнит, совпадают ли строки и если совпадают, то обработает соответствующей функцией.

Каждая функция, как и в примере сейчас, должна принимать один параметр — сообщение от пользователя, которое будет обработано соответствующей функции «в обёртке» декоратора. А также, каждая функция (или связка функций) должна возвращать соответсвующее сообщение от бота.

Итак:

@bot.message_handler(commands=['go', 'start'])  # Обработка команды для старта
def welcome(message):
    sti = open(path+'stiker.tgs', 'rb')
    bot.send_sticker(message.chat.id, sti)
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)

    item3 = types.KeyboardButton("Приложения")
    item2 = types.KeyboardButton("Мероприятия")
    item1 = types.KeyboardButton('О нас')

    markup.add(item1, item2, item3)

    bot.send_message(message.chat.id,
                     "Добро пожаловать, {0.first_name}!\n\nЯ - <b>{1.first_name}</b>, бот команды Projector в НГТУ, "
                     "создан для того, "
                     "чтобы помочь Вам влиться в нашу команду,"
                     "просто узнать что-то о нас или же просто пообщаться и весело провести время.\n\n"
                     "<i>Have a nice time</i>".format(
                         message.from_user, bot.get_me()),
                     parse_mode='html', reply_markup=markup)

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

Итак, пройдёмся по строчкам:

В строках 20-21: открывается стикер по тому пути к директории, в которой я его сохранил, после чего отправляется.

Строки 22-28: создаем встроенную клавиатуру, добавляя туда три элемента.

Строки 30-37: описано создание и отправка приветственного сообщения

Как вы можете заметить, метод send_message в строке 30, позволяет использовать HTML, для форматирования текста.

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

# RUN
if __name__ == "__main__":
    try:
        bot.polling(none_stop=True)
    except ConnectionError as e:
        print('Ошибка соединения: ', e)
    except Exception as r:
        print("Непридвиденная ошибка: ", r)
    finally:
        print("Здесь всё закончилось")

Сделаем первый запуск! Для этого, в PyCharm-е нажмём зеленую кнопку старт в правом верхнем углу или же, можно запустить из консоли командой: python bot.py

Результат первого запуска:

2.1 Обработка нажатия на кнопки и создание inline keyboard

Так как любое сообщение — это текст, то мы будем обрабатывать именно текстовые сообщения.

Сделаем следующее и аналогично разберём по строчкам:

@bot.message_handler(content_types=["text"])
def go_send_messages(message):
    if message.chat.type == 'private':
        if message.text == 'Приложения':

            keyboard = types.InlineKeyboardMarkup(row_width=1)
            itemboo = types.InlineKeyboardButton(text="Тыщ на кнопку и ты уже в Google", url="<https://www.google.ru>")
            itemboo1 = types.InlineKeyboardButton('Рандомное число', callback_data='good2')
            itemboo2 = types.InlineKeyboardButton("Калькулятор", callback_data='bad2')
            itemboo3 = types.InlineKeyboardButton("Хочу узнать погоду в моем городе/стране", callback_data='good3')
            itemboo4 = types.InlineKeyboardButton("Как твои дела?", callback_data='bad4')

            keyboard.add(itemboo, itemboo1, itemboo2, itemboo3, itemboo4)

            bot.send_message(message.chat.id,
                             "{0.first_name}, окей, смотри, что у нас есть тут:\n".format(message.from_user),
                             reply_markup=keyboard)

        elif message.text == "Мероприятия":
            one_markup = types.InlineKeyboardMarkup(row_width=1)
            ite1 = types.InlineKeyboardButton("Ближайшие мероприятия", callback_data="one")
            ite2 = types.InlineKeyboardButton("Проведенные мероприятия", callback_data="two")
            ite3 = types.InlineKeyboardButton("Волонтерство на мероприятие", callback_data="three")
            ite4 = types.InlineKeyboardButton("Действующие проекты в НГТУ", callback_data="fourth")
            ite5 = types.InlineKeyboardButton("Мероприятия Межвузовского центра", callback_data="five")
            one_markup.add(ite1, ite2, ite3, ite4, ite5)
            bot.send_message(message.chat.id, "{0.first_name}, у нас <u>ежемесячно</u> проводится множество "
                                              "мероприятий,\nмы постарались разбить их на следующие составляющие:".format(
                message.from_user), parse_mode="html", reply_markup=one_markup)

Строка 339 — обработчик любых текстовых сообщений

Строка 341 предназначена для того, чтобы сказать, что если данное сообщение предназначено боту, то сравни эту строку с теми, что здесь обрабатываются и отправь ответ.

Строки 344 — 351 — создаём инлайновую клавиатуру InlineKeyboardMarkup и помещаем в эту клавиатуру 5 элементов, которые также можно будет обработать по установленной callback_data. Элементы данной клавиатуры будут расположены друг под другом, так как в строке 344, мы установили row_width = 1, что обозначает самую широкую грань одной кнопки, поэтому они и будут расположены друг под другом.

Строки 353-355 — отправляют текст, вместе с нашей Inline Keyboard.

В условиях ниже представлены аналогичные представления обработки сообщений.

Итак, сделаем запуск:

2.2 Обработка InlineKeyboardButton

Как было сказано выше, каждый элемент InlineKeyboardButton имеет параметр callback_data, и именно по этим параметрам будет обрабатываться каждая кнопка. Для этого нам потребуется обработчик инлайновой клавиатуры callback_query_handler.

@bot.callback_query_handler(func=lambda call: call.data in ['one', 'two', 'three', 'fourth', 'five'])  # Мероприятия
def callback_inline_one(call):
    try:
        if call.message:
            if call.data == 'one':  # Ближайшие мероприятия
                bot.send_message(call.message.chat.id,
                                 "Итак,<b>ближайшие мероприятия</b>:\n\n"  # Здесь будут ссылки ещё
                                 "Форум «Байкал»\n"
                                 "Конкурс «Цифровой ветер»\n"
                                 "PRONETI", parse_mode="html")
            elif call.data == 'two':  # Проведённые мероприятия
                bot.send_message(call.message.chat.id, "Вот список <b>проведённых мероприятий</b>:\n\n"
                                                       "МНТК\n"
                                                       "Семинары по проектной деятельности\n"
                                                       "Встреча с представителями предприятий", parse_mode="html")
            elif call.data == 'three':

Итак, разберём построчно:

Строка 269 — объявляем обработчик, который будет обрабатывать каждую из нажатых кнопок с использованием лямбда-функции

Строки 273-278 — В данном блоке if, мы просто обрабатываем сообщение и отправляем сообщение пользователю.

Строки 279-283 — Делают аналогичное действие, что и в предыдущем условном блоке.

и т. д.

Также, в данных блоках можно определить аналогичную инлайновую клавиатуру, только тогда придётся создать ещё один обработчик callback_data, аналогичный обработчику callback_query_handler, показанный на скриншоте выше.

Результат:

Так просто и обрабатываются inline keyboards.

3. Завершаем работу бота

Данная функция будет аналогичной функции обработки команд для старта бота, поэтому Вы сможете легко понять её функционал:

@bot.message_handler(commands=['stop'])  # Обработка команды для выхода
def bye(message):
    bye_Sti = open(path+'byeMorty.tgs', 'rb')

    hideBoard = types.ReplyKeyboardRemove()
    bot.send_message(message.chat.id,
                     "Досвидания, {0.first_name}!\nМы, команда <b>{1.first_name}</b>, надеемся, что ты хорошо провел(а) время \n\n"
                     "Присоединяйся к нашей команде в <a href='<https://vk.com/projector_neti>'>vk</a>\n"
                     "Наш <a href='<https://instagram.com/projector_neti>'>inst</a>\n\n"
                     "Напиши Координатору проектов (<a href='<https://vk.com/nikyats>'>Никите Яцию</a>) и задай интересующие тебя вопросы по <i>проектной деятельности</i>\n\n"
                     "Надеемся, что тебе ответят очень скоро \n\n"
                     "<u>Don't be ill and have a nice day</u> \n\n\n"
                     "P.S.: Если есть какие-то пожелания или вопросы по боту, то напиши <a href='<https://vk.com/setmyaddresspls>'>мне</a>".format(
                         message.from_user, bot.get_me()), parse_mode='html', reply_markup=hideBoard)
    exit()

Здесь происходит следующее:

  1. Отправляется прощальный стикер.
  2. Закрывается встроенная клавиатура (строка 44).
  3. Отправляется прощальное сообщение.

Так как мы используем bot.polling, с параметром none_stop = True, то пользователь может снова вознообновить общение с ботом при помощи команды /start или /go, обработка которых показано в пункте выше.

Результат:

ВК БОТ

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

1. Предварительные подготовления

Установим следующие библиотеки по тем же технологиям:

import vk_api # pip install vk-api
import json   # pip install json
from vk_api.longpoll import VkLongPoll, VkEventType

▍1.1 Получение токена для сообщества Вконтакте.

  1. На главной странице сообщества найти раздел «Управление»
  2. Работа с API
  3. Создать ключ. Выбираете нужные для вас пункты, которые будут доступны боту.

В итоге должно получиться примерно следующее:

Берем ключ и переходим в среду разработки и делаем следующее:

vk = vk_api.VkApi(token=
                  "Ваш_токен")

Далее — следующее:

longpoll = VkLongPoll(vk)

На этом, закончим подготавления.

2. Разворачиваем функционал

Первым делом создадим файл manage.py

Cоздадим прототип встроенной клавиатуры ( всё с помощью документации VkBotAPI ).

main_keyboard = {
    "one_time": False,
    "buttons": [
        [{
            "action": {
                "type": "text",
                "payload": "{\"button\": \"1\"}",
                "label": "О нас"
            },
            "color": "positive"
        }],
        [{
            "action": {
                "type": "text",
                "payload": "{\"button\": \"2\"}",
                "label": "Мероприятия"
            },
            "color": "positive"
        },
            {
                "action": {
                    "type": "text",
                    "payload": "{\"button\": \"3\"}",
                    "label": "Приложения"
                },
                "color": "positive"
            }
        ],
        [{
            "action": {
                "type": "text",
                "payload": "{\"button\": \"4\"}",
                "label": "Контакты"
            },
            "color": "primary"
        }]
    ]
}

Затем переводим её в формат json, как требуется в документации:

main_keyboard = json.dumps(main_keyboard, ensure_ascii=False).encode('utf-8')
main_keyboard = str(main_keyboard.decode('utf-8'))

Пример инлайн клавиатуры:

about_us_keyboard = {
    "inline": True,
    "buttons": [
        [{
            "action": {
                "type": "text",
                "payload": "{\"button\": \"1\"}",
                "label": "Основная информация"
            },
            "color": "positive"
        }],
        [{
            "action": {
                "type": "text",
                "payload": "{\"button\": \"2\"}",
                "label": "Чем мы занимаемся ?"
            },
            "color": "primary"
        },
        {
            "action": {
                "type": "text",
                "payload": "{\"button\": \"3\"}",
                "label": "Где мы находимся ?",
            },
            "color": "positive"
        }],
        [{
            "action": {
                "type": "text",
                "payload": "{\"button\": \"4\"}",
                "label": "Как попасть в команду ?",
            },
            "color": "primary"
        }],
        [{
            "action": {
                "type": "text",
                "payload": "{\"button\": \"5\"}",
                "label": "Контакты",
            },
            "color": "secondary"
        }],
        [{
            "action": {
                "type": "text",
                "payload": "{\"button\": \"6\"}",
                "label": "Задать вопрос руководителю проекта",
            },
            "color": "negative"
        }]
    ],
}

Не забываем все используемые клавиатуры переводить в формат json:

about_us_keyboard = json.dumps(about_us_keyboard, ensure_ascii=False).encode('utf-8')
about_us_keyboard = str(about_us_keyboard.decode('utf-8'))

Создадим функцию write_msg, для того, чтобы не мучиться с постоянной отправкой сообщений от бота:

def write_msg(user_id, message, key):
    vk.method('messages.send',
              {'user_id': user_id,
               'message': message,
               'keyboard': key,
               'random_id': random.randint(0, 2048)})

После создания всех прототипов, мы можем перейти к следующему шагу. ( к этому файлу мы позже вернёмся и доработаем обработку общения пользователя и нашего vk-бота )

▍2.1 Основной функционал (создаем файл vk_bot.py)

Мы не будем разрабатывать методы, которые будут выполнять, например, функцию парсинга времени или погоды, назовем их второстепенными. Я покажу лишь основной метод, который будет обращаться к этим второстепенным методам, для обработки тех или иных сообщений от пользователя. В конце статьи я выложу ссылку на свой GitHub, где Вы сможете самостоятельно просмотреть интересующий Вас функционал любого из метода. Итак:

Конструктор класса:

class VkBot:

    def __init__(self, user_id):
        self.USER_ID = user_id
        self._USERNAME = self._get_user_name_from_vk_id(user_id)
        self.my_str = ""
        self._COMMANDS = ["привет", "погода", "время", "пока"]

        self._inputMes = {"основная информация": answers.about_us1,
                          "чем мы занимаемся ?": answers.about_us2,
                          "где мы находимся ?": answers.about_us3,
                          "ближайшие мероприятия": answers.events1,
                          "проведённые мероприятия": answers.events2,
                          "волонтёрство на мероприятие": answers.events3,
                          "действующие проекты в нгту": answers.events4,
                          "мероприятия межвузовского центра": answers.events5
                          }

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

(Пример кода из файла answers.py)

events1 = "Итак,ближайшие мероприятия:\n\n" \
          "Форум «Байкал»\n"\
          "Конкурс «Цифровой ветер»\n"\
          "PRONETI"

events2 = "Вот список проведенных мероприятий:\n"\
        "МНТК\n"\
        "Семинары по проектной деятельности\n"\
        "Встреча с представителями предприятий\n"\

events3 = "По поводу этого критерия напиши Илье (<https://vk.com/ki1337ki>)\n"\
        "А также, ты можешь заполнить анкету, благодаря которой,\n"\
        "с тобой лично свяжется один из руководителей направления\n"\
        "или координатор проекта (<https://vk.com/nikyats>)"

Итак, основной метод класса — это new_message, который принимает один параметр — message, который обрабатывается соответствующим условным блоком и возвращает какое -то значение обратно туда, откуда был вызван.

def _get_user_name_from_vk_id(self, user_id):
    request = requests.get("<https://vk.com/id>" + str(user_id))

    bs = bs4.BeautifulSoup(request.text, "html.parser")

    user_name = self._clean_all_tag_from_str(bs.findAll("title")[0])

    return user_name.split()[0]

def new_message(self, message):
    # self.my_str = " ".join(re.findall('[0-9]{2}', message))

    if message.lower() == self._COMMANDS[0]:
        return f"Привет, {self._USERNAME}!"

    elif message.lower() == self._COMMANDS[1] or message.lower() == "узнать погоду ":
        return self._get_weather()

    elif message.lower() == self._COMMANDS[2] or message.lower() == "узнать точное время ":
        return self._get_time()

    elif message.lower() == self._COMMANDS[3]:
        return f"До скорой встречи, {self._USERNAME}!"

    else:
        for key, value in self._inputMes.items():
            if message.lower() == key:
                return value
        return "Не понимаю тебя "

3. Возвращаемся в manage.py и дописываем функционал

Теперь в первых строках нам необходимо проимпортить файл vk_bot. А также нам потребуется библиотека random.

import random # pip install random
from vk_bot import VkBot

После того, как мы объявили longpoll, дописываем основной функционал.

longpoll = VkLongPoll(vk)

try:
    for event in longpoll.listen():
        if event.type == VkEventType.MESSAGE_NEW:
            if event.to_me:
                bot = VkBot(event.user_id)

                if event.text.lower() == "о нас":
                    write_msg(event.user_id, "Немного о нашем проекте", about_us_keyboard)
                elif event.text.lower() == "мероприятия":
                    write_msg(event.user_id, "Что ты хочешь узнать?", events_keyboard)
                elif event.text.lower() == "приложения":
                    write_msg(event.user_id, "Посмотри, что есть здесь!", app_keyboard)
                elif event.text.lower() == "контакты":
                    write_msg(event.user_id, "По любым вопросам можешь обращаться к:", contacts_keyboard)
                elif event.text.lower() == "задать вопрос руководителю проекта":
                    write_msg(event.user_id, "У тебя есть возможность написать сообщение нашему Руководителю проекта",
                              go_answer)
                elif event.text.lower() == "калькулятор":
                    write_msg(event.user_id, "В разработке...", calc_keyboard)
                # elif event.text == " ".join(re.findall('\d{2}', event.text)):
                #     write_msg(event.user_id, "Отлично, мы здесь", calc_keyboard)
                elif event.text.lower() == "как попасть в команду ?":
                    write_msg(event.user_id, "Напиши координатору проекта - Никите\n"
                                             "или перейди на сайт проектной деятельности,\n"
                                             "найди проект номер 612 и подай заявку", in_team)
                else:
                    write_msg(event.user_id, bot.new_message(event.text), main_keyboard)

except Exception as e:
    print(e)

Как можете заметить, в условных блоках if и elif — присутствует обработка тех сообщений, которые подразумевают под собой вывод инлайн или встроенной клавиатуры (в данном примере — выводятся только инлайн клавиатуры). Сюда также можно добавить более сложные обработки сообщений, после которых обработка будет метаться туда сюда по блокам if и elif. Таким образом бот будет работать, пока не «упадёт с ошибкой».

Другое дело обстоит с блоком else, здесь мы обращаемся как раз ко классу нашего Бота, после чего он аналогичным способом находит обработку сообщения и выводит результат. Это можно назвать вложенной обработкой, а так как вложенностей лучше избегать, то лучше использовать тот метод программирования бота, который как раз-таки реализован в телеграмм боте.

Заключение

Надеюсь, что после прочтения данной статьи, Вы как минимум поняли основной принцип создания своего Telegram или Vk бота, а как максимум — легко сможете написать своего бота.

Как вы можете видеть, создать его функционал очень просто, особенно, если вы знаете основы языка Python.

Весь код опубликован в моём профиле GitHub:

  • Телеграм Бот
  • Бот Вконтакте

Уровень: начинающий

Материал рассчитан на тех, кто в жизни не написал ни строчки кода. Если вы уже в курсе основ программирования, прочитайте лучше о чистых функциях.

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

Иногда такое общение выглядит как общение с человеком. Может даже показаться, что там работает искусственный интеллект — и иногда так действительно бывает. Но часто всё проще: это алгоритм, который умеет распознавать некоторые ваши слова и давать ответы по заранее заготовленным шаблонам. Чем алгоритм более разветвлённый, тем естественнее и полезнее бот.

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

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

Мы будем решать задачу на языке JavaScript — это язык программирования, который встроен в ваш браузер и на котором написать код можно прямо сейчас, ничего не устанавливая.

Чтобы сделать что-то на JavaScript, нужно открыть консоль. Почти во всех современных браузерах это делается сочетанием клавиш Shift + Ctrl + J или Cmd + Alt + J. Справа или снизу появится дополнительное окно, в котором уже будет что-то происходить:

Чат-бот будет создан через консоль

Если у вас не открылась консоль, зайдите в верхнее меню и поищите слово «Консоль». Обычно этот пункт прячется в разделе «Инструменты разработчика».

Когда вы открываете консоль, она сразу готова выполнять ваши команды. Если в неё вставить программу, написанную на JavaScript, и нажать Enter, ваш браузер её реализует. Если в коде есть ошибки, консоль сама подсветит их. Можно отправлять в неё программу кусками или даже построчно: браузер будет помнить всё, что происходило в вашей программе, пока вы не перезагрузите страницу.

Первая строка

В консоли можно не только писать код, но и выводить туда результаты. Давайте для начала сделаем самую простую программу, которая отобразит в консоли слово «Привет!». Для этого используем команду console.log('Привет!');

Вставим её в консоль и нажмём Enter:

Чат-бот: пишем первую строку кода

Поздравляем, вы только что написали свою первую программу для компьютера! Она очень простая: компьютер всего лишь говорит «Привет!». Но оцените момент: это вы его научили так говорить. Попробуйте научить его и другим словам.

Если написать несколько команд, получим сообщение из нескольких строк:

console.log('Привет!');
console.log('Я — ваш компьютер.');

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

Переменные

Переменная — это ячейка в памяти компьютера, где можно что-то хранить и менять. Дело в том, что компьютеру для вычислений нужно сказать: «Вот тут данные у нас меняться не будут, а вот тут будут, выдели память». И система выделит достаточно памяти, чтобы хранить всё, что будет лежать внутри переменной. В последнюю можно записать новое значение, а можно узнать, что уже лежит внутри неё.

Чтобы дать понять компьютеру, что у нас сейчас будет переменная, нужно сказать ему слово var, после которого вписать название переменной — так нам проще к ней обращаться. Например, следующая строка создаст переменную name и положит в неё слово «Код»:

var name = 'Код';

Название тут может быть практически любым, главное, чтобы оно начиналось с буквы. По-русски переменные называть нельзя, только буквами латинского алфавита. Можно было бы использовать вариант imya или zovut, но программисты считают, что чем проще название переменной, тем лучше.

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

console.log(name);

Можно посмотреть, какое сегодня число. Это внутренняя системная переменная. Строго говоря, это не совсем переменная, но для начала давайте считать так:

console.log(Date());

Но это мы всё смотрим во внутренности компьютера. А нам нужно спросить что-то у пользователя. Чтобы мы могли ввести новые данные в нашу программу, используем команду prompt()

var name = prompt('Как вас зовут?');

Вставьте в консоль команду var name = prompt('Как вас зовут?'); и посмотрите, что произойдёт. Компьютер выведет окно и будет ждать, пока вы внесёте туда своё имя. Интерфейс выглядит красиво: давайте в диалоге общаться с компьютером не через консоль, а через такие появляющиеся окошки. Для этого напишем новые команды:

alert('Привет! Я — ваш компьютер.');
var name = prompt('Как вас зовут?');

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

alert('Привет, ' + name + ', приятно познакомиться!');

Чтобы вывести осмысленную фразу, мы взяли начало ‘Привет, ‘, затем с помощью плюсика соединили со значением переменной name, которая хранит наше имя, а потом ещё одним плюсиком добавили к фразе концовку. Чтобы компьютер знал, что мы хотим вывести на экран текст, а не числа, используются кавычки. Компьютер воспринимает как текст то, что внутри кавычек. И выводит точно в том виде, в котором написано.

Расчёт дня рождения

Давайте соединим все наши команды в одну программу и допишем несколько новых фраз:

alert('Привет! Я — ваш компьютер.');
var name = prompt('Как вас зовут?');
alert('Отлично, ' + name + ', приятно познакомиться!');
var hobby = prompt('Скажите, ' + name + ', а какое у вас хобби?');
alert('Действительно, ' + hobby + ' — интересное занятие! А я больше всего люблю вычисления и алгоритмы.');
var d = prompt(name + ', у меня для вас сюрприз! Напишите свой день рождения в формате месяц-день (например, 05-23)');
//Началась магия, где мы берём текущую дату и сравниваем с тем, что вы ввели.
//Кстати, это — комментарий, он не влияет на ход программы. 🙂
var current_date = new Date();
var my_date = new Date((d + '-' + (current_date.getFullYear() + 1)));
var dayZ = Math.abs(((Date.parse(my_date) - Date.parse(current_date)) / (1000 * 3600 * 24)) % 365);
var result = dayZ.toFixed(0);
//Магия закончилась, в переменной result у нас теперь хранится количество дней.
alert('Знаете, сколько дней осталось до вашего дня рождения? ' + result + '!');
alert('Спасибо за общение, ' + name + ', ещё увидимся!');

Обратите внимание: у нас появился новый вопрос и новая переменная hobby, в которой хранится информация об увлечении. А ещё — комментарии, которых можно добавлять сколько угодно. JavaScript не обращает внимания на то, что написано после двух косых черт:

//это комментарий

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

Что ещё посмотреть

Вот кое-что, что может вам пригодиться при создании первого чат-бота.

performance.now() — эта команда возвращает время в миллисекундах с момента открытия текущей страницы. Можно поделить на 1 000, и вы узнаете, сколько секунд вы сидите на какой-то странице. Если поделить на 60 000 — сколько минут.

setTimeout() — позволяет выполнить любой код через определённое время. Например, вы можете задать вопрос и предоставить ровно минуту на размышление, после чего появится окно для ответа.

setInterval() —  то же самое, что и предыдущее, но выполнение кода повторяется с равномерным интервалом, например раз в 5 минут. Если вы хотите научить чат-бота, чтобы он раз в час напоминал попить воды, эта команда — то, что нужно.

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

Чат-боты помогают принимать заказы, записывать клиентов на услуги, отвечать на частые вопросы и собирать обратную связь. Это экономит время предпринимателя и сотрудников, которые работают с покупателями.

Чтобы создать виртуального помощника, не нужно знать языки программирования. Специалист по чат-ботам Сергей Титов делится инструкцией, как написать программу в Telegram за шесть шагов.

Я пишу ботов уже 6 лет, а для Telegram — последние 3 года. Среди моих клиентов — интернет-магазины, фитнес-центры, салоны красоты, агентства недвижимости, турагентства, отели и автосервисы.

В среднем 30 % клиентов у компаний, с которыми я работаю, начинают пользоваться ботами. Например, записываются на консультации удалённо. А выручка бизнеса растёт на 20–30 % в течение года после запуска виртуального помощника.

Сергей Титов

Делает ботов в мессенджерах

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

Всех ботов для мессенджеров можно разделить на две группы:

  1. Для внешнего общения — с клиентами, партнёрами и другими людьми, которые не работают в компании. Сюда входят продающие и обучающие боты. Первые помогают клиенту выбрать и купить нужный товар, а вторые отвечают на вопросы или предлагают полезную информацию о компании.
  2. Для внутреннего общения — между сотрудниками или разными отделами. С их помощью чаще всего заполняют отчёты или проверяют, как работники выполняют задачи.

Бота можно написать для любого мессенджера, но в Telegram функций больше всего. Например, там можно создать мини-сайт или канал на основе вашего бота, поэтому он способен заменить даже странички в соцсетях. Допустим, у вас салон красоты — через бота легко делиться советами по уходу за окрашенными волосами или отправлять клиентам подборки средств для домашнего использования.

В этой статье — простая инструкция, как сделать чат-бота в Telegram, который поможет салону красоты записывать клиентов на стрижку и маникюр.

Шаг 1. Выберите платформу для создания ботов

Вот несколько бесплатных сервисов с платными опциями, где можно сделать бота самостоятельно.

MenuBuilderBot — конструктор, который работает прямо в мессенджере. Это удобно, потому что написать простого бота можно со смартфона. В сервисе можно сделать чат-бота в Telegram бесплатно с помощью базовых функций, например текстовых блоков или форм «Вопрос-ответ». За дополнительные нужно платить — к таким относятся рассылки или реферальные программы.

Так выглядит главный экран MenuBuilderBot и меню с добавлением бота

Botmaker — конструктор, с которым можно работать на компьютере. Для начала хватит бесплатного тарифа — воспользоваться ботом сможет до 500 человек. Стоимость PRO-версии начинается от 1 250 ₽ в месяц и зависит от тарифа. С ней сможете работать через бот больше чем с 500 клиентами, а ещё смотреть статистику их поведения: куда они нажимают в боте, в какой момент решают из него уйти.

Это конструктор в Botmaker

Первое время я работал в Botmaker, но потом понял, что у сервиса есть недостатки, которые мне мешают. В этом сервисе нельзя тонко настроить крупные блоки под задачи клиентов. Например, добавить реферальную систему или накопление баллов. Поэтому я перешёл на PuzzleBot.

Сергей Титов

Делает ботов в мессенджерах

PuzzleBot — веб-конструктор с простым интерфейсом и широкими возможностями. У сервиса есть бесплатный тариф, на котором доступно 15 команд и условий для бота. А ещё есть ограничение по количеству пользователей — не больше 150 человек. Стоимость платных тарифов начинается от 690 ₽ в месяц и зависит от функций. Например, в бесплатной версии будет реклама сервиса — её увидят все пользователи в самом первом сообщении. А в платных это можно отключить.

Так выглядит конструктор PuzzleBot с готовым списком команд, чтобы вы сразу могли оценить полезные функции

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

Сергей Титов

Делает ботов в мессенджерах

Представим, что у вас небольшой салон красоты и вы хотите, чтобы клиентам было проще записываться на процедуры. Давайте разберёмся, как создать бота самому в PuzzleBot.

Шаг 2. Зарегистрируйтесь в PuzzleBot

Это можно сделать через электронную почту или Telegram. Весь процесс занимает пару минут.

Откройте сайт и нажмите кнопку «Начать пользоваться бесплатно». После этого вы попадёте на страницу регистрации.

Нажмите «Войти через Telegram» на странице регистрации. Можно ввести свою электронную почту и придумать пароль, но регистрация через Telegram быстрее. Браузер автоматически перекинет вас в мессенджер. А если переадресация не сработает, можете перейти в Telegram по QR-коду, который появится в сервисе PuzzleBot.

Запустите бота PuzzleBot в Telegram. Он автоматически создаст ваш аккаунт на сервисе. Нажмите кнопку «Перейти в личный кабинет».

Так выглядит PuzzleBot в Telegram и сообщение о том, что аккаунт готов к работе

Согласитесь с условиями использования и политикой конфиденциальности. Дальше сервис предложит заполнить основную информацию о себе, например добавить адрес электронной почты. Но этот шаг можно пропустить и сразу перейти в личный кабинет.

В личном кабинете сервис сразу предложит добавить бота по уникальному ключу — Telegram API-токену. В следующем шаге расскажем, где его взять.

Шаг 3. Создайте заготовку бота в BotFather

BotFather — это бот, который поможет быстро зарегистрировать нового бота в Telegram и получить API-токен для привязки к конструктору.

API-токен — уникальный идентификатор, который подтверждает, что программа принадлежит вам. С его помощью можно привязать бота к разным конструкторам и управлять им.

Запустите BotFather и выберите команду /newbot из списка. Сервис создаст нового бота, и вам нужно будет придумать:

  • Название — будет отображаться в диалогах пользователей и может быть любым.
  • Имя — поможет найти среди других похожих сервисов, должно быть уникальным, написанным латиницей и содержать слово bot. Минимальная длина — 5 символов, а максимальная — 32.

Когда зададите название, нужно придумать имя — это сложнее. Например, чтобы создать бота для записи на стрижку, пришлось перебрать несколько вариантов, и подошёл только последний. Остальные были заняты

Скопируйте API-токен, который сгенерировал BotFather. Это нужно, чтобы привязать бота к сервису PuzzleBot и начать работать в конструкторе. Лучше никому не пересылать токен, чтобы посторонние не смогли им воспользоваться.

Так выглядит API-токен

Добавьте API-токен в PuzzleBot. Нужно подождать, пока сервис примет бота. Затем он появится в личном кабинете.

В поле нужно вставить скопированный API-токен, и бот появится в личном кабинете PuzzleBot

Шаг 4. Создайте бота с помощью конструктора

Нажмите на бота в личном кабинете и перейдите на страницу со статистикой. В левом меню выберите вкладку «Конструктор». В PuzzleBot уже будет несколько команд для примера — их нужно удалить. После этого останется только стартовая, с которой вы начнёте настройку.

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

Создайте стартовую команду — обычно это приветствие и короткое описание функций. Для этого нажмите на /start и добавьте блоки в правой части экрана.

Для начала достаточно освоить два блока: «Текст» и «Изображение». В первом случае бот отправит пользователю только сообщение, а во втором — ещё и картинку. Можно поставить красивое фото салона, чтобы клиент сразу увидел, как у вас уютно.

Для примера заполним блок «Изображение». Нажмите на него, загрузите картинку с компьютера и напишите приветствие.

Блок «Изображение» вы найдёте в меню справа. Сначала загрузите картинку, а потом напишите текст

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

  1. Обычная — кнопки появляются там, где у пользователя обычно находится клавиатура на смартфоне.
  2. Инлайн — кнопки появляются прямо под сообщением.

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

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

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

Кнопка «Обычная клавиатура» находится в блоке с изображением. Придумайте названия, чтобы пользователю было понятно, зачем туда нажимать

Когда добавите все нужные кнопки, кликните в любом свободном месте, и меню справа свернётся. Новые команды для кнопок появятся автоматически. Чтобы сохранить, нажмите «Применить изменения» в левой части экрана. Эту кнопку можно нажимать после каждого действия или в самом конце, когда закончите создавать бота.

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

Форма для инлайн-клавиатуры не отличается от обычной, но подсвечена розовым, чтобы вы не запутались

После этого конструктор автоматически создаст новые команды «Стрижка» и «Маникюр».

Добавьте календарь к команде «Выбрать день». Тогда клиент сможет сразу отметить, когда ему удобно прийти в салон красоты.

Создайте текстовый блок и предложите записаться на определённую дату. Добавьте форму ввода, чтобы пользователь мог ответить на вопрос. В поле «Тип ввода» нажмите «Календарь».

Добавьте форму ввода к вопросу для клиента. Выберите, в каком формате пользователь будет отвечать на вопрос. В нашем случае — увидит календарь и сможет выбрать нужный день

Календарь можно настроить так, чтобы клиенту было проще записаться. Например, задать ограничение по дням недели или не показывать прошедшие даты, чтобы не было ошибок.

Чтобы задать ограничение, нажмите «Запрет на выбор дат» и выберите «Даты из прошлого». А чтобы обозначить, когда вы принимаете клиентов, кликните «Запрет на выбор дня» и отметьте галочками, когда вы закрыты

К форме ввода можно добавить ответ — его пользователь получит, когда выберет подходящий вариант. Например, поблагодарите за выбор даты и напишите, что делать дальше: просто прийти в салон или подождать подтверждения. Для этого кликните «Дополнительные настройки» после блока «Инлайн-клавиатура» и нажмите «Добавить реакцию на ответ».

Если добавить реакцию на ответ, пользователь получит сообщение, и диалог с ботом выйдет живее

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

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

Добавьте новую команду «Заявка» — на неё клиенты попадут из команд «Стрижка» или «Маникюр» и смогут оставить свои контакты для менеджера.

Кнопка «Добавить» находится в левой верхней части экрана. Выберите «Обычная команда» в выпадающем меню

Оформите команды с услугами с помощью текстовых блоков и инлайн-клавиатуры. Для этого нажмите на команду и добавьте блок «Текст» с предложением заполнить заявку. Затем прикрутите инлайн-клавиатуру, которая будет переводить клиента на форму заявки.

Это готовые команды для перехода в форму заявки из услуг «Стрижка» и «Маникюр»

Оформите команду «Заявка». Допустим, вы планируете собирать через неё контакты клиентов, чтобы потом перезвонить и назначить удобную дату. Для этого добавьте новый блок с формой ввода и напишите вопросы. В первом — «Как вас зовут?», а во втором — «По какому номеру с вами связаться?».

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

Это формы ввода с масками «Текст» и «Телефон». Если использовать маски, клиент не сможет оставить неверные данные

Все заявки будут приходить в вашего бота — вы получите уведомление, когда новый пользователь выберет дату или поделится контактами. Клиенты этих сообщений не увидят. А ещё действия будут отображаться в блоке «Уведомления» в личном кабинете на сайте PuzzleBot.

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

Готовый бот в конструкторе будет выглядеть так:

Чтобы увидеть все команды и связки между ними, покрутите колёсико мыши и отдалите проект

Шаг 5. Оформите бота в BotFather

Чтобы ваш бот выглядел в Telegram аккуратно и завершённо, нужно добавить ему аватарку, описание в профиле и на главном экране.

Зайдите в BotFather, нажмите «Меню» и выберите команду /mybots. Сервис предложит выбрать одного из ваших ботов. Кликните на него — и увидите меню. Выберите Edit bot.

Добавьте описание профиля и бота, аватарку. Когда нажмёте на Edit bot, появится меню, где можно выбрать, что именно вы хотите исправить.

About — описание бота в профиле. Description — сообщение на первом экране. Botpic — аватарка

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

После оформления бот будет выглядеть аккуратнее

Шаг 6. Проверьте, правильно ли работает бот

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

Вот что нужно проверить во время теста:

  • Верная ли информация отображается в описании и сообщении на пустом экране.
  • Работает ли тег /start для начала работы с ботом.
  • Появляются ли основные кнопки в первом сообщении.
  • На какие услуги ведут кнопки, связаны ли они друг с другом и нет ли ошибок.
  • Правильно ли отображается календарь, действуют ли запреты на выбор дат.
  • Как бот реагирует на ввод данных пользователей, присылает ли ответы.
  • Приходят ли уведомления, что пользователь оставил свои контактные данные.

Проверим бота для салона красоты по всем этим критериям.

В боте правильно отображаются аватарка, описание и основные кнопки. Он реагирует на ответы пользователя и отвечает так, как вы задумали. Заявка с контактными данными появляется в боте после того, как пользователь поделится именем и номером телефона

Что запомнить

  1. Чат-боты полезны для бизнеса — им можно поручить простые консультации, запись клиентов на удобный день или подбор товаров по запросу. Это разгрузит менеджеров, они будут меньше заниматься рутиной.
  2. Бота можно создать в любом мессенджере, но Telegram — самый удобный. Тут бот может работать как мини-сайт или канал — подойдёт, если нужен дополнительный профиль, как в соцсетях.
  3. У многих специальных сервисов по созданию ботов есть бесплатные версии. Если вы пишете программу первый раз, платить необязательно — основных функций будет достаточно для теста.
  4. Для создания чат-бота не нужны навыки программирования. Достаточно немного усидчивости, внимания и нескольких часов свободного времени.

Привет! Меня зовут Илья Осипов, я методист курса программирования на Python «Девман» и больше 5 лет пишу код на этом языке. Сегодня расскажу, как новичку сделать полезного чат-бота.

Python — классный язык программирования. Но многие новички учат его неправильно: почти все онлайн-курсы, тренажёры, книги и видео предлагают начинать учить Python с нуля с каких-то странных задач, вроде: «Давайте решим вот эту математическую задачку» или «Давайте напишем рекурсивный поиск чисел Фибоначчи». Вы уже тоже зеваете от скуки?

Нет, удовольствие от программирования совсем не в этом, а в том, чтобы решать реальные проблемы. Например, я втянулся в программирование, когда писал чат-бота для своего вуза. Расписание на сайте было очень неудобно смотреть. Я решил потратить время и написать чат-бота, который будет присылать мне расписание занятий в более удобном виде. Оказалось, что другим студентам тоже было неудобно, и спустя год в чат-боте накопилось 4 тысячи пользователей.

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

Если вы тоже обнаружили себя в этой «яме», то этот туториал для вас. Дайте себе ещё один шанс.

Шаг 1. Зайдите в Repl.it

Создайте песочницу для языка Python. Ничего устанавливать не нужно. Просто откройте эту ссылку в соседней вкладке.

Придётся зарегистрироваться, но, думаю, вы разберётесь. 🙂

А вы уже нажали кнопку? Нет? Идите жмите!
А вы уже нажали кнопку? Нет? Идите жмите!

Шаг 2. Пройдите шаг 1

Эй, хватит читать! Так дела не делаются! Чтобы научиться программировать на Python — нужно писать код своими руками, а не смотреть, как кто-то делает это за вас 🙂

Вы же не думаете, что можно стать альпинистом, просматривая видео, как другие люди лезут в горы? А уж инструктором вас без реального опыта и подавно никто не наймёт. С программированием то же самое.

Шаг 3. Установите библиотеку для написания ботов

Многие советуют пользоваться более сложными библиотеками для чат-ботов. Например aiogram. Она крутая и популярная, но это библиотека для асинхронного кода. Это совсем другой зверь, которого не стоит касаться новичкам. Воспринимайте асинхронные библиотеки как другой язык программирования, хотя бы на старте.

Вместо этого будем работать с куда более простой библиотекой — python-telegram-bot. Откройте меню для установки библиотек слева-снизу:
Нужна кнопка Packages
Нужна кнопка Packages.

И в появившемся окошке вбейте её название. Нажмите на «+» напротив названия и подождите загрузки. В конце появится вот такая зелёная плашка об успехе:
Название библиотеки можно скопировать прямо из статьи, не обязательно печатать :)
Название библиотеки можно скопировать прямо из статьи, не обязательно печатать. 🙂

Теперь сложноватый и неприятный момент, но такова разработка, за это нам и платят деньги. Нужно будет поменять версию библиотеки на более дружелюбную для новичков. Для этого нужно зайти в очень недружелюбный файл и подправить число на 13.15. В общем-то больше ничего делать и не нужно, думаю, вы справитесь:
Очень страшно, ничего не понятно, но надо только поменять одно число.
Очень страшно, ничего не понятно, но надо только поменять одно число.

Шаг 4. Запустите пример из документации

В документации к библиотеке есть готовые примеры кода. Давайте запустим пример эхобота.

Эхобот — это бот, который просто повторяет за вами. Отвечает вам тем же, что вы написали ему. Вот пример в документации. Я почистил его от всякого ненужного, поэтому можете взять сразу мой, он должен быть не таким страшным. Копируйте этот код в файл main.py и жмите кнопку > Run наверху. Ничего не получится, но так и нужно, об этом ниже:

from telegram import Update, ForceReply
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters

def start(update, context):
    user = update.effective_user
    update.message.reply_text('Привет!')

def echo(update, context):
    update.message.reply_text(update.message.text)

if __name__ == '__main__':
    updater = Updater("TOKEN")
    dispatcher = updater.dispatcher

    dispatcher.add_handler(CommandHandler("start", start))
    dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, echo))

    updater.start_polling()
    updater.idle()

Шаг 5. Переживите шок от первой ошибки

Смотрите, у меня в коде ошибка. Значит, всё, не суждено стать программистом?
Смотрите, у меня в коде ошибка. Значит, всё, не суждено стать программистом?

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

Поэтому обычно в курсах, книгах и видео ошибки от вас прячут: делают вид, что их не бывает. А вот в жизни всё совсем иначе, у программистов постоянно ошибка на ошибке, и бОльшую часть времени они тратят на то, чтобы разобраться, чего же этот Python от них хочет.

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

Если не обращать внимание на цвет текста, то не так уж и страшно
Если не обращать внимание на цвет текста, то не так уж и страшно.

Ошибка говорит, что что-то не то с токеном от Telegram. Ну и правда, вы же никаких ботов в Telegram ещё не заводили. Для запуска кода вам понадобится токен бота. Получить его можно прямо в Telegram, у официального бота @BotFather. Только не забудьте просить его с уважением!

Не переживайте, что я показываю свой токен. После публикации статьи я его удалил :)
Не переживайте, что я показываю свой токен. После публикации статьи я его удалил. 🙂

Осталось вставить полученный токен в код и запустить его снова:

Не накосячьте с кавычками.&nbsp;

Не накосячьте с кавычками.

Заходите в Telegram, открывайте переписку с вашим ботом, и получайте удовольствие от беседы с цифровым другом:

Он всё ещё за мной повторяет :(
Он всё ещё за мной повторяет. 🙁

Шаг 6. Начните менять код

В скопированном коде много всего страшного. Давайте коротко расскажу, как это всё работает.

Начинается исполнение кода отсюда:

if __name__ == '__main__':
    updater = Updater("5646004689:AAECTkuGjWo1Imwr-_6UrN-nzbo89sd3WSM")
    dispatcher = updater.dispatcher

    dispatcher.add_handler(CommandHandler("start", start))
    dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, echo))

    updater.start_polling()
    updater.idle()

Почти весь этот код можно воспринимать просто как волшебство. Это штуки, которые запускают бота. Я сам толком не уверен, что там происходит внутри. Их просто не нужно менять, почти никогда.

Единственное, что пригодится — это строчки, начинающиеся с dispatcher.add_handler. Это «интеллект» вашего бота. По ним он определяет, как ему реагировать на ваше сообщение. Вот как эти строчки расшифровываются:

Чуть ниже будет о том, как научиться читать такие заклинания. Это всё есть в документации библиотеки python-telegram-bot
Чуть ниже будет о том, как научиться читать такие заклинания. Это всё есть в документации библиотеки python-telegram-bot.

А вот что внутри функции echo:

def echo(update, context):
    update.message.reply_text(update.message.text)

Если просто перевести код на русский, становится понятнее:

Шаг 7. Веселитесь!

В документации python-telegram-bot есть масса примеров использования библиотеки. Там же можно подсмотреть как отправить фотку в Telegram или как создать отложенную задачу.

Остаётся только придумать, что будет делать ваш бот, разбить задачу на части и понемногу кодить его, добавляя и слегка переписывая примеры из документации.

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

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

По данным ассоциации GSMA, 56% пользователей предпочтут мессенджер звонку на горячую линию, а 51% ожидают моментального ответа в любое время суток. Учесть такие пожелания помогают чат-боты — виртуальные собеседники, которые отвечают на типовые вопросы. По прогнозам CNBC, к 2022 году они будут обрабатывать более 80% запросов.

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

Что такое чат-бот

Чат-бот — виртуальный помощник для общения с пользователями в мессенджерах, на сайтах и в социальных сетях. Это программа, которая умеет решать типовые задачи: напоминать об акциях, принимать заявки, классифицировать лидов и отправлять данные в CRM. Человек может задать чат-боту вопрос и тот ответит на него, если ответ был запрограммирован заранее. С типовыми вопросами справляется на «отлично», а нестандартные могут вызывать затруднения.

Чат-бот отвечает на вопросыЧат-бот отвечает на вопросы

Не стоит путать чат-ботов с рассылками и информационными каналами. Чат-боты «общаются» с пользователями и отвечают на их вопросы, в то время как рассылки просто дают информацию и никак не реагируют на запросы.

Чат-боты используют в самых разных сферах: от здравоохранения до HR. Например, у банка «Тинькофф» есть голосовой помощник Олег. Он обладает искусственным интеллектом и способен распознавать и интерпретировать запросы; выполнять денежные переводы; бронировать столики в ресторанах; консультировать по банковским вопросам и акциям и болтать на отвлечённые темы.

Ежедневные советы от диджитал-наставника Checkroi прямо в твоем телеграме!

Подписывайся на канал

Подписаться

Для чего нужны чат-боты

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

Задачи, которые решают чат-боты, можно разделить на две большие группы:

  • Конверсия и продажи. Чат-боты общаются с потенциальными и текущими клиентами, мотивируют их совершить целевое действие – оформить заказ, купить товар.
  • Снижение нагрузки на службу поддержки и сокращение затрат. Чат-боты обрабатывают запросы, консультируют по типовым вопросам, помогают пользователям оперативно получить ответы.

Чат-боты особенно актуальны для компаний, которые работают с клиентами — когда часто нужна дополнительная информация о товаре или услуге.

Функции чат-ботов в разных сферах:

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

Виртуальный помощник «Альфа-Банка»Виртуальный помощник «Альфа-Банка»

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

Виртуальный помощник «Мегафон-ТВ»Виртуальный помощник «Мегафон-ТВ»

Страхование — помогают заполнять формы и заявки, консультируют по программам страхования.

Виртуальный помощник «Уралсиб Страхование»

Виртуальный помощник «Уралсиб Страхование»

Онлайн-торговля — напоминают об акциях, принимают заказы, консультируют по доставке и адресам точек выдачи.

Чат-бот SephoraЧат-бот Sephora

Здравоохранение — проводят первичную консультацию, собирают анамнез и в зависимости от жалоб человека переводят его на конкретного врача.

Виртуальный помощник для записи к стоматологуВиртуальный помощник для записи к стоматологу

Туризм — собирают выгодные предложения, рассылают горящие туры, помогают с бронированием билетов и отелей.

Виртуальный помощник OneTwoTripВиртуальный помощник OneTwoTrip

Образование — делают рассылки учебных материалов, приглашают на вебинары и отправляют их запись, предлагают скидки и промокоды на покупку курсов.

Чат-бот с тренингамиЧат-бот с тренингами

Государственные услуги — собирают жалобы, соединяют с нужными специалистами, дают доступ к публичным данным.

Чат бот Mos.ruЧат бот Mos.ru

HR — подбирают подходящие резюме, отправляют приветственные сообщения кандидатам, автоматизируют задачи внутри компании.

HR-бот для заказчиков и исполнителейHR-бот для заказчиков и исполнителей

По словам директора платформы для разработки голосовых и текстовых роботов Ziax Романа Милованова, чат-боты стоят на первой линии поддержки и могут брать на себя около 50% обращений. Однако виртуальные помощники не способны полностью заменить операторов. Они работают только с типовыми обращениями, где не требуется индивидуальный подход к клиенту. Их миссия — избавить сотрудников компании от решения рутинных задач, снизить затраты и косвенные издержки.

Способы создания чат-ботов

Есть два способа создания чат-бота: заказать разработку или воспользоваться сервисом-конструктором.

Разработка на заказ

Готовое решение на сервисе-конструкторе

Стоимость Зависит от функций, а также стоимости часа конкретного агентства или фрилансера Есть бесплатный базовый доступ. Платные тарифы – $10-50 в месяц
Время создания От месяца до полугода От 1-2 дней до месяца
Возможность внешних интеграций Есть Есть
Функции Ограничивается только возможностям площадки – сайта, социальной сети или мессенджера. Можно использовать структурированные и неструктурированные диалоги, админ-панель, пользовательский интерфейс.

Можно интегрировать с любыми внешними сервисами

Ограничивается возможностями конструктора и площадки.

Можно использовать структурированные и неструктурированные диалоги, но неструктурированные иногда работают некорректно.

Можно интегрировать с онлайн-чатами на сайте, внешними сервисами

Поддержка, внесение изменений Проектная группа реагирует на проблемы, но смена внешнего разработчика может критически повлиять на работоспособность чат-бота Поддержка в онлайн-чате и по email.

Возможно смена платформы – есть функция экспорта и импорта

Безопасность хранения данных Соответствует внутренним требованиям компании-заказчика Соответствует политике конфиденциальности сервиса

Чтобы понять, какой способ подойдёт вам, нужно смоделировать решение.

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

Пример простого чат-бота — чат-бот такси «Максим» в телеграме

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

Пример – голосовой помощник Олег банка «Тинькофф», Siri

Как создать чат-бота в конструкторе

Создание чат-бота включает семь этапов.

Этап 1: описание ЦА

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

Предположим, что вы – владелец кофейни и создаёте чат-бота для своего заведения. ЦА – парни и девушки 18-25 лет, учащиеся в вузах неподалёку. Для более детального анализа целевой аудитории вводят термин портрет клиента — образ реального посетителя вашей кофейни. Вы определяете наиболее типичные характеристики клиентов, их проблемы, потребности и интересы. Портрет клиента: студент, 22 года. Доход до 20 000 рублей в месяц. Часто не успевает позавтракать и опаздывает на пары, потому что просыпает. Мотивация к покупке – взбодриться, утолить чувство голода

Этап 2: выбор платформы

Вы изучили портрет клиента, теперь выберите платформу, на которой будет работать чат-бот — мессенджер или диалоговое окно на сайте.

Кофейня из примера ориентируется на прогрессивную молодёжь, которая много времени проводит в сети. Поэтому ваш выбор – телеграм. Его аудитория ближе всего по доходу, возрасту, интересам и роду деятельности

Этап 3: выбор подходящего конструктора

На рынке как англоязычные, так и русскоязычные сервисы, предлагающие готовые решения:

  • Netrox SC, Onicon – онлайн-консультанты с большим набором инстурментов от автоматических реакций на сообщения до интеграций с формами сайта;
  • LiveChat, Streamwood, Webim — популярные чат-боты для интернет-магазинов, предпринимателей и агенств;
  • Chaport, Chatra — чат-боты с интеграцией с CRM-системами для автоматизации продаж и поддержки;
  • Jivo, Mango Chat, ManyChat, RedHelper — для общения в мессенджерах и мобильных приложениях.

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

Чат-бот из примера про кофейню будет работать в телеграме, поэтому подойдёт ManyChat

Перейдите на страницу конструктора и нажмите «Создать бота»Перейдите на страницу конструктора и нажмите «Создать бота»

Откройте Manybot в телеграмеОткройте Manybot в телеграме

Этап 4: создание персонажа бота

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

Manybot перенаправит вас на BotFather. Следуйте инструкциям и введите /newbotManybot перенаправит вас на BotFather. Следуйте инструкциям и введите /newbot

Придумайте название чат-бота, скопируйте API и вставьте его в ManybotПридумайте название чат-бота, скопируйте API и вставьте его в Manybot 2Придумайте название чат-бота, скопируйте API и вставьте его в Manybot

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

Этап 5: определение функций чат-бота

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

Опишите, что будет делать ваш ботОпишите, что будет делать ваш бот 2Опишите, что будет делать ваш бот

Задача Кофикса – принимать заказы, но при этом он должен делить пользователей на две категории:

  • тех, кто впервые пользуется ботом: Кофикс рассказывает им, для чего создан и как работает;
  • тех, кто делает заказ второй и последующий разы: Кофикс уже не объясняет, кто он, а сразу предлагает выбрать напиток

Этап 6: создание сценария использования

Определите логику алгоритма и последовательность действий. На основе этого настройте чат-бота, используя подсказки ManyChat.

Настройте чат-бота, используя подсказки конструктораНастройте чат-бота, используя подсказки конструктора 2Настройте чат-бота, используя подсказки конструктора

Примеры, как может выглядеть меню КофиксаПримеры, как может выглядеть меню Кофикса 2Примеры, как может выглядеть меню Кофикса

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

Чат-бот — инструмент, который позволяет разработать конкретный сценарий на каждом этапе автоворонки. Если хотите научиться создавать эффективные воронки продаж, выбирайте курсы обучения авторононкам из подборки

Этап 7: корректировка работы чат-бота

Когда чат-бот проработает три-четыре недели, попробуйте улучшить его. Проанализируйте, как клиенты используют его, и какие вопросы задают. Подумайте, как адаптировать виртуального помощника под их запросы.

Дополнительно соберите фразы и слова, которые чат-бот не смог распознать — обычно алгоритмы хранят эти данные. Если какая-то фраза встречается очень часто, внесите её в диалог.

Частые ошибки при создании чат-ботов

Недостаточно просто создать чат-бота, важно постоянно следить за его работой и при необходимости корректировать её. Иначе вы можете не заметить ошибок, которые приведут к оттоку клиентов.

Поговорим о наиболее частых ошибках при создании чат-ботов и расскажем, как их исправить.

Ошибка №1: отсутствие переадресации на оператора. Чат-боты берут на себя решение рутинных задач и справляются с ними гораздо быстрее человека, но они не могут полностью заменить менеджеров и операторов. Как бы хорошо вы не продумали сценарии использования, у клиента может возникнуть вопрос, который не был запрограммирован ранее.

Решение: добавьте настройки переадресации, чтобы консультант мог подключиться к чату в нужный момент

Ошибка №2: отсутствие пользы. Не каждому бизнесу нужен виртуальный помощник. Если ваши пользователи не сидят в социальных сетях и не общаются в мессенджерах, предпочитают «живое» общение по телефону, не стоит внедрять чат-бота. Скорее всего, популярный инструмент вызовет раздражение и оттолкнёт клиентов.

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

Ошибка №3: чат-бот выдаёт себя за реального человека. При общении с виртуальным помощником у пользователя должно возникать ощущение, будто он разговаривает с «живым» человеком, но только благодаря правильному подбору тона чат-бота. Нельзя выдавать виртуальных помощников за настоящих.

Решение: добавьте приветственное сообщение, в котором чат-бот будет представляться, рассказывать, кто он и для чего создан

Ошибка №4: лишние вопросы. Если сценарии использования чат-бота проработаны слабо, он не сможет улавливать контекст и запоминать информацию, которую ранее предоставлял клиент. В результате несколько раз спрашивает одно и то же, от чего пользователь раздражается, а вы теряете возможные заказы.

Решение: чётко определите, какие задачи должен решать чат-бот, пропишите алгоритм и последовательность действий. Проведите тестирование чат-бота на фокус-группе и соберите обратную связь – что работает хорошо, а что стоит изменить. Доработайте виртуального помощника

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

Решение: ограничивайте спектр задач, которые будет решать чат-бот. Лучше создать виртуального помощника, который хорошо справится с одной задачей, чем плохо с десятью

Коротко о главном

Чат-боты позволяют бизнесу сократить затраты на персонал, оперативно реагировать на запросы клиентов и оставаться на связи 24/7. За счёт скорости и эффективности чат-боты повышают лояльность клиентов и помогают увеличить продаж. При этом они постоянно развиваются, лучше обучаются и справляются со всё более сложными задачами.

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

Чат-бот — важный, но не единственный инструмент улучшения пользовательского опыта. Читайте статью «Как построить клиентоориентированный бизнес»из неё вы узнаете, как понимать «боли» своей аудитории и настраивать клиентский сервис

Понравилась статья? Поделить с друзьями:
  • Как найти площадь ромба через окружность
  • Gta 5 фризит на мощном пк как исправить
  • Как найти культиста в месаре
  • Как можно найти людей по номеру телефона
  • Dns probe started как исправить windows 10