/whatsapp-bot

Whatsapp bot running in docker container.

Primary LanguagePython

Yowsup Whatsapp Bot

Этот бот не идеален, и есть некоторые недочеты. Если есть какие-либо предложения или дополнения, с удовольствием обсужу.

Дисклеймер:

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

Основные файлы скрипта

Название файла Содержание файла
tables_in_DB.sql SQL-скрипт для создания таблицы AuthorizedUsers
run.py Основной запускаемый файл
config.ini Конфигурационный файл модуля
ru.ini Словарь с ответами бота на русском языке
en.ini Словарь с ответами бота на английском языке

Таблицы в БД:

  1. AutorizedUsers - таблица с ID авторизованных пользователей, у которых есть право на взаимодействие с ним.

Содержит столбцы:

	"id" (primary key),
	"user_id" (номер телефона пользователя),
	"language" (язык пользователя).

Структура проекта:

├── config.ini  - основной конфигурационный файл
├── en.ini      - сообщения для пользователя на английском
├── ru.ini      - сообщения для пользователя на русском языке
├── run.py      - основной запускаемый файл
└── objects
    ├── __init__.py
    ├── basic.py        - файл  в котором содержатся небольшие функции
    ├── database.py     - объект базы данных со вссеми возможными манипуляциями с данными
    ├── db.py           - клон предыдущего файла нужен для  нормальной работы user_language.py
    ├── main_layer.py   - основная логика бота
    ├── user_language.py        - объект, выбирающий на каком языке общаться с пользователем
    └── wa_downloader.py        - загрузчик файлов присланных через интерфейс whatsapp

Запуск и установка:

  • Клонировать репозиторий
  • Настройка сети для докер контейнера, предоставит ему доступ в интернет
  • Выбать где будут сохраняться логи и присланные файлы, по умолчанию в Linux системе это папка /whatsapp_bot
    • /whatsapp_bot/users - папка, где будут храниться конфигурационные файлы config.json и .db - они нужны для корректной работы библиотеки Yowsup
    • /whatsapp_bot/files - папка, где будут хранится документы пользователей
    • /whatsapp_bot/logs - логи
  • Выбрать базу данных с которой будем взаимодействовать в проекте используется библиотека mysql-connector-python, лучше использовать MySQL
  • С помощью файла tables_in_DB.sql создать таблицу AuthorizedUsers
  • В файле config.ini прописать доступ к созданной БД
  • В файле docker-compose указать переменные:
    • phone_number - номер телефона в формате 7xxxxxxxxxx
    • operator_code - код оператора
    • answer_type - тип ответа: sms (придет смс с кодом валидации) или voice (звонок, в котором, на английском продиктуют код валидации)
  • Если ранее не взаимодествовали с библиотекой Yowsup, то сначала зарегистрировать симку.
  • После того как настройка прошла корректно - docker-compose up

Принцип работы:

В файле run.py, YowsupEchoStack собирает бот из модуля main_layer.py в котором находится вся исполняемая логика создает пулл потоков и на каждое входящее сообщение создается отдельный поток. Есть два вида обработчиков входящих сообщений текстовые и мультимедиа:

  • Текстовый

    отвечает на сообщения пользователя

  • Мультимедиа

    Скачивает файлы в папку пользователя \

Процесс регистрации нового номера

Для регистрации нового номера телефона надо:

  • Установить симку в телефон

  • Зарегистрироваться в Whatsapp на телефоне и отослать несколько сообщений кому-то в чатик и получить ответы.

  • Потом пройти регистрацию в программе yowsup(если первые 2 шага пропустить, yowsup не сможет зарегистрировать симку, или сервера Whatsapp забанят номер телефона!)

  • В файле docker-compose записать переменные:

    • phone_number - номер телефона
    • operator_code - код оператора
      • 01 — МТС
      • 02 — мегафон
      • 20 — теле2
      • 99 — билайн
    • в ответ будет выслан код подтверждения можно выбрать каким образом либо смс, либо автоматизированный звонок от Whatsapp
    • answer_type - Подтверждение номера телефона по смс(sms) или звонок (voice)
  • Запустить контейнер командой:

    • docker build -t wabot_work . && docker-compose run --rm wabot_work -r
    • Консоль будет дожидаться внесения кода в формате xxx-xxx
    • При успешной регистрации выведется подобный ответ:
      {
          "__version__": 1,
          "cc": "91",
          "client_static_keypair": "4LwtAptoy3o7RvZKi4/8**************+8O/1YzTqcWU78M/DK1cDap104G243EkySxN7eQ==",
          "expid": "qsufBg*******GpQV8zNTFg==",
          "fdid": "6a92d996-0c31-****-8bc1-6c8e12990dc8",
          "id": "Sow6yYuOVyGQ******vjVhwiMds=",
          "login": "7**********",
          "mcc": "250",
          "mnc": "01",
          "phone": "7**********",
          "sim_mcc": "000",
          "sim_mnc": "000"
      }
    • проверить папку ~/.config/yowsup/ в ней должна быть папка с зарегистрированным номером телефона
    • После этого можно запускать постоянный контейнер командой docker-compose up
    • Так же можно установить Yowsup библиотеку на комп и вести разработку в ней вот руководство по ручной настройке и установке, но я рекомендовал бы делать это через контейнер, и не засорять систему

Вы всегда можете поддержать автора, разработавшего библиотеку Yowsup ссылка