Traffic Cardinal Traffic Cardinal написал 18.05.2022

Как создать чат-бота с нуля: пошаговая инструкция

Traffic Cardinal Traffic Cardinal написал 18.05.2022
17 мин
4
3295
Содержание
Чат-бот — это виртуальный собеседник, способный отвечать по заданному шаблону. Проще говоря — это программа для коммуникации с пользователем/клиентом/лидом. Многие ошибочно считают, что разработка чат-бота своими руками — это слишком сложно, долго и вообще для этого нужно быть чуть ли не Илоном Маском.

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

(Спойлер — на создание бота по инструкции ниже у вас уйдет 5-10 минут).

Зачем нужны чат-боты в арбитраже трафика?

Основные цели создания чат-ботов следующие:

  • Вовлечение аудитории.
  • Прогрев потенциальных лидов.
  • Автоматизация движения по воронке.
  • Сбор данных для аналитики.

Как работают чат-боты?

Абсолютно любой чат-бот состоит из трех элементов:

  • Хостинг-сервера — компьютера или другого «железа», на котором он запущен.
  • Логики — программных алгоритмов, обеспечивающих его работу.
  • Базы данных — места, где хранятся шаблоны ответов, а также полученная от пользователей информация для последующего анализа.
Кроме того, если мы говорим об использовании бота в мессенджерах или социальных сетях, то есть еще один элемент — API. Если в двух словах, API — это «прокладка» между алгоритмами бота и алгоритмами той платформы, внутри которой он используется.

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

Сервер

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

Так как мы с вами только учимся создавать чат-ботов и не хотим тратиться на эксперименты — выбираем бесплатный. Физический сервер или выделенный — значения не имеет. Лишь бы мощности сервера хватило под ваши потребности.

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

Логика бота

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

Для большинства арбитражных задач достаточно понимать, что есть три типа алгоритмов:

  • Последовательные — когда после первого действия идет второе, затем третье и т. д.
  • Разветвляющиеся — когда в зависимости от заданных условий выбирается то или иное действие.
  • Цикличные — когда то или иное действие выполняется многократно, до тех пор, пока не будет выполнено условие выхода из цикла.
Зачем нам это знать? Затем, что мы не программисты, но в будущем нам нужно будет уметь составить логику бота, вне зависимости от того, насколько сложной будет задача. В целом, просто поймите, что любой сложный алгоритм — это лишь множество простых алгоритмов. Если это осознать — разбираться в «программистских темах» будет проще.

Пример возможной логики чат-бота

База данных

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

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

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

Как создать бота с нуля пошагово

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

Пример интерфейса API в Telegram

От API также зависит и то, какой язык программирования удобнее всего использовать. А следовательно, и какой хостинг выбрать. Например, в API Telegram есть множество готовых инструментов для Python — значит, нам вполне подойдет сервер, поддерживающий Python. А вот в API VK официальные инструменты есть лишь под Java и PHP, поэтому придется либо создавать их на Python с нуля, либо использовать чужие (а это риски с точки зрения безопасности).

Пример интерфейса API в VK

2. Создание логики. Нужно максимально подробно сформулировать задачу, которую будет делать бот. При этом четкая формулировка задач вовсе не означает, что возможности бота будут ограничены ею — это же наш бот, и мы всегда сможем «улучшить» его. А вот если бы он был сторонним — то нам бы пришлось либо довольствоваться тем, что есть, либо снова платить разработчикам.

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

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

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

Итак, задача сформулирована — идем дальше.

3. Выбор сервера. Исходя из нашей задачи сделать бота для Телеграма бесплатно с указанным выше функционалом, мы будем использовать сервис pythonanywhere — это облачная платформа, предназначенная для запуска приложений, созданных на Python. Но помните, бесплатный сервер — для изучения и тестов. При большой нагрузке он не справится.
4. Создание и запуск бота. Собственно, это мы сейчас будем делать ниже.
5. Улучшение бота — это мы тоже сделаем дальше.

Создаем простого чат-бота для Telegram

1. Создаем аккаунт на pythonanywhere.

2. Открываем консоль Bash и ждем завершения инициализации.


3. Устанавливаем модуль для работы с API Telegram с помощью Python — pyTelegramBotAPI. (Здесь предполагается, что мы уже ознакомились с API Telegram и нашли его там в разделе Python). Для этого вводим:

pip3.9 install --user pyTelegramBotAPI

*Обратите внимание, 3.9 — это актуальная на момент написания статьи версия Python, поддерживаемая и сервером, и Телегой. Попробуйте ради интереса написать 1.2 вместо 3.9 — ничего не получится. Суть в том, что если версия языка программирования не поддерживается и платформой, и сервером — ничего не выйдет.


Официальный модуль для работы с API Telegram с помощью Python установлен на ваш сервер. Вы можете использовать любой — но официальные, обычно, безопаснее.

4. Получаем токен для работы бота. В Телеге это делается с помощью официального бота @BotFather — просто пишете ему и следуете инструкции. От вас требует лишь придумать боту имя — оно не должно нарушать правила Телеги, и в конце имени должно быть _bot.

*в других платформах получение токена для работы с API будет отличаться. Но сам этап «получение токена» всегда будет одинаковым.


Как только вы укажете подходящее имя — @BotFather пришлет вам сообщение с токеном.

5. Переключаем консоль в режим интерпретатора Python (несмотря на название, сервис pythonanywhere поддерживает не только Python). Для этого вводим:

python3.9


*В вашем случае версия также может отличаться.

6. Загружаем модуль telebot, входящий в состав ранее установленного модуля pyTelegramBotAPI. Затем авторизируемся с помощью токена и подключаем логику бота. Для этого вводим:

import telebot
bot = telebot.TeleBot('ВАШ ТОКЕН')
@bot.message_handler(func=lambda m: True)
def echo_all(message):
bot.reply to(message, ‘go to google.com’)

bot.polling()


*ВАШ токен — это набор символов из ответа @BotFather

7. Проверяем результат. Наш бот получает сообщение пользователя и в ответ шлет ему ссылку на google.com.


Получилось? Поздравляем! Но такой бот слишком палевный и много трафика не даст. Давайте сделаем что-то более практичное.

Создаем бота-говорилку со словарем для Telegram

Для начала удаляем весь «мусор», оставшийся после наших тестов. Для этого:

1. Удаляем использованную консоль.


2. Удаляем ненужные файлы.


Затем переходим к созданию нового бота — говорилки со словарем вопросов/ответов:

1. Открываем консоль Bash.


2. Устанавливаем модуль для работы с API Telegram с помощью Python — pyTelegramBotAPI. Для этого вводим:

pip3.9 install --user pyTelegramBotAPI


3. Устанавливаем модуль для подбора ответов по словарю — Fuzzy Wuzzy. Для этого вводим:

pip3.9 install fuzzywuzzy


4. Устанавливаем модуль метрики Левенштейна, необходимый для корректной работы модуля Fuzzy Wuzzy. Для этого вводим:

pip3.9 install python-Levenshtein


5. Создаем скрипт с логикой бота. Для этого открываем блокнот, копируем в него содержимое:

import telebot
import os
from fuzzywuzzy import fuzz
bot = telebot.TeleBot('ВАШ ТОКЕН')
mas=[]
if os.path.exists('slovar.txt'):
f=open('slovar.txt', 'r', encoding='UTF-8')
for x in f:
if(len(x.strip()) > 2):
mas.append(x.strip().lower())
f.close()
def answer(text):
try:
text=text.lower().strip()
if os.path.exists('slovar.txt'):
a = 0
n = 0
nn = 0
for q in mas:
if('u: ' in q):
aa=(fuzz.token_sort_ratio(q.replace('u: ',''), text))
if(aa > a and aa!= a):
a = aa
nn = n
n = n + 1
s = mas[nn + 1]
return s
else:
return 'Ошибка'
except:
return 'Ошибка'
@bot.message_handler(commands=["start"])
def start(m, res=False):
bot.send_message(m.chat.id, 'Я на связи. Напиши мне Привет )')
@bot.message_handler(content_types=["text"])
def handle_text(message):
f=open('log.txt', 'a', encoding='UTF-8')
s=answer(message.text)
f.write('u: ' + message.text + '\n' + s +'\n')
f.close()
bot.send_message(message.chat.id, s)
bot.polling(none_stop=True, interval=0)

Находим «bot = telebot.TeleBot('ВАШ ТОКЕН')» — вставляем токен из ответа @BotFather (см. предыдущий раздел).

Сохраняем файл как «bot.py».

6. Создаем словарь (примитивная база данных). Для этого открываем блокнот, создаем в нем следующую структуру:

u: Вопрос пользователя
Ответ бота

Например:

u: как зовут
Маша меня зовут!
u: сколько тебе лет
Мне уже 18, честно-честно!
u: где живешь
Я из интернета:)
u: Парень есть?
Неа=Р Мне тут неудобно общаться. Заходи на google.com

Можете дополнить его по своему усмотрению, но придерживайтесь структуры, иначе бот будет работать некорректно. Сохраняем его как «slovar.txt»

7. Создаем файл-логов (примитивная база данных). Для этого открываем блокнот и сохраняем пустой файл как log.txt. Лог-файл нам понадобится для того, чтобы мы могли видеть, какие вопросы задают пользователи, и «обучать» бота в дальнейшем.

8. Загружаем все три файла на сервер.


9. Запускаем бота.


10. Проверяем результат. Наш бот имитирует общение по словарю. Кроме того, он записывает в log.txt все сообщения от пользователей и свои ответы на них. Благодаря этому словарь можно довести до ума, чтобы бот выглядел реалистичнее.


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

Где брать код/модули/скрипты для ботов?

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

В случае с чат-ботами, лучше всего начать с GitHub:

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

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

Возможные риски

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

Наиболее значимые риски:
  • Хакеры. Использование чужих модулей — то же самое, что использование чужой программы. Буквально. Если вы не понимаете, что в ней, злоумышленники смогут это использовать в своих целях. Учтите это и старайтесь не просто «соединять модули», а понимать, что именно вы делаете.
  • Юридические тонкости. Чат-боты — легальны. Но если вы будете использовать их для продвижения чернухи или нелегальных тем — вас привлекут к ответственности. Сослаться на то, что «это же бот, а не я» — не получится. Это же относится ко взломам, куки-стафингу и аналогичным темам.
  • Нагрузка на железо. Постарайтесь узнать, какой именно язык программирования и какая серверная архитектура оптимальны для решения ваших задач. Да, все может работать и без глубокого понимания таких тонкостей, но тогда вам придется переплачивать за более мощное железо. И переплата будет прямо пропорциональна популярности вашего бота.

ПОДВОДЯ ИТОГИ

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

Здравствуйте! У вас включен блокировщик рекламы, часть сайта не будет работать!