Кирилл Золотавин
19.02.2019
963

Использование библиотеки Yowsup 2 для отправки сообщений пользователю WhatsApp в связке с Asterisk

Yowsup 2 – это библиотека Python, которая позволяет авторизовываться в системе и использовать службу WhatsApp как официальный клиент WhatsApp с возможностью отправки сообщений пользователям. WARNING библиотека Yowsup 2 стабильно работает с Python 2.7 и Python 3. Инструкция: 1. Выполним подключение по SSH к серверу IP АТС Asterisk для выполнения дальнейшей настройки. В зависимости от используемой […]

Yowsup 2 – это библиотека Python, которая позволяет авторизовываться в системе и использовать службу WhatsApp как официальный клиент WhatsApp с возможностью отправки сообщений пользователям.

Все описанные действия в статье необходимо выполнять от имени суперпользователя (root). Установка и настройка производилась на предустановленной системе CentOS 6.8 + Asterisk 13 + FreePBX 13.

WARNING библиотека Yowsup 2 стабильно работает с Python 2.7 и Python 3.

Инструкция:

1. Выполним подключение по SSH к серверу IP АТС Asterisk для выполнения дальнейшей настройки. В зависимости от используемой системы(Windows, Linux, MacOS), подключение по SSH можно выполнить с использованием различного дополнительного программного обеспечения(Putty), либо системного терминала.

Подключение по SSH через Putty
Авторизация на сервере
Внимание, при авторизации на сервере, пароль в консоли не отображается.
SSH консоль подключения

2. Выполним проверку активности Selinux, в случае если активен, то выполним отключение:

# sestatus
# sed -i 's/\(^SELINUX=\).*/\SELINUX=disabled/' /etc/selinux/config
SELinux (Security Enhanced Linux) – это система безопасности основанная на моделях мандатного и ролевого доступа. SELinux реализована как компонент ядра Linux начиная с версии ядра 2.6.
Отключение Selinux

3. В консоли управления для подключения репозиториев выполним ряд команд вида:

 # rpm -ivh http://dl.iuscommunity.org/pub/ius/stable/Redhat/6/x86_64/epel-release-6-5.noarch.rpm
 # rpm -ivh http://dl.iuscommunity.org/pub/ius/stable/Redhat/6/x86_64/ius-release-1.0-14.ius.el6.noarch.rpm
Подключение репозиториев

4. Выполним установку ряда пакетов необходимых для работы с библиотекой Yowsup, для этого в консоли выполним ряд команд вида:

# yum install python27 python34 python27-dateutil python27-argparse python27-devel python27-pip python27-imaging
Установка пакетов Python
# pip2.7 install --upgrade pip
Обновление системы управления пакетами pip
# yum install libtiff-devel libjpeg-devel libzip-devel freetype-devel lcms2-devel libwebp-devel tcl-devel tk-devel zlib-devel protobuf pycrypto git
Установка системных зависимостей
# yum install gcc
Установка компилятора GCC(GNU Compiler Collection)

5. Так же для работы библиотеки Yowsup нам потребуется установить пакет python-axolotl, который необходим для корректной работы обмена сообщениями и пакет python-six версии 1.10

# cd /usr/src/
 # git clone https://github.com/tgalal/python-axolotl.git
 # cd python-axolotl/
 # python2.7 setup.py install
Установка Python-axolotl
# pip2.7 install six==1.10
Установка Python-six версии 1.10

6. После успешной установки всего необходимого ряда зависимостей, перейдем к установке непосредственно библиотеки Yowsup для работы с WhatsApp, для этого выполним в консоли ряд команд вида:

# cd /usr/src/
# git clone git://github.com/tgalal/yowsup.git
# cd yowsup
Скачивание библиотеки Yowsup из репозитория

Для корректной работы библиотеки необходимо получить текущую версию официального WhastApp клиента и ClassesDex

# wget https://raw.githubusercontent.com/mgp25/classesMD5-64/master/dexMD5.py
# wget https://www.cdn.whatsapp.net/android/2.18.379/WhatsApp.apk
# python3 dexMD5.py WhatsApp.apk
Уточнение актуальной версии клиента WhatsApp и получение значения ClassesDex
Ссылку на актуальную версию apk файла приложения можно получить на официально сайте WhatsApp https://www.whatsapp.com/android/

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

# nano yowsup/env/env_android.py
Для сохранения внесенных изменений в редакторе Nano используем сочетаний клавиш Ctrl+O (сохранить изменения) и Ctrl+X(выйти из редактора

где ключевыми параметрами для изменения являются:
_MD5_CLASSES — полученное ранее значение  ClassesDex
_VERSION — текущая актуальная версия клиента WhatsApp

Редактирование env_android.py
# nano yowsup/env/env.py
Для сохранения внесенных изменений в редакторе Nano используем сочетаний клавиш Ctrl+O (сохранить изменения) и Ctrl+X(выйти из редактора

где ключевыми параметрами для изменения являются:
DEFAULT – клиентская платформа которая будет использоваться по умолчанию(android или s40)

Редактирование env.py

7. Выполнив редактирование всех необходимых конфигурационных файлов приступим к сборке и установке библиотеки Yowsup

# python2.7 setup.py build
# python2.7 setup.py install
Сборка библиотеки Yowsup
Установка библиотеки Yowsup
Успешное завершение установки

8. Если в процессе выполнения п.7 данной статьи было получено сообщение «Finished processing dependencies for yowsup2==2.5.7» сообщающее о успешности установки, то можно переходить к процедуре регистрации и подтверждения клиентского приложения WhatsApp, для этого в консоли выполним ряд команд вида:

# python2.7 yowsup-cli registration -E android --requestcode sms --phone 79611111111 --cc 7 --mcc 250 --mnc 99

где ключевыми параметрами для изменения являются:
phone – номер телефона на который регистрируется клиентское приложение
cc – код страны(Россия — 7)
mcc – код страны мобильного оператора связи(Россия — 250)
mnc – код сети мобильного оператора связи(01 – МТС, 02 – мегафон, 20 – теле2, 99 — билайн).

Полную таблицу код по операторам связи и странам можно получить перейдя по ссылке: https://en.wikipedia.org/wiki/Mobile_country_code
Регистрация клиентского приложения WhatsApp

Выполним подтверждение регистрации клиентского приложения:

# python2.7 yowsup-cli registration -E android --register 421-117 --phone 79611111111 --cc 7

где ключевыми параметрами для изменения являются:
 register – код подтверждения регистрации полученный по SMS
phone – номер телефона на который регистрируется клиентское приложение
cc – код страны(Россия — 7)

Использование одного и того же номера телефона используемого для регистрации, на нескольких устройствах невозможна.
Подтверждение регистрации клиентского приложения WhatsApp

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

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

# python2.7 yowsup-cli demos -l 79611111111:Mbkr3EJkakFPLFsvZ0MFDOBaoDs= -y -E s40

где ключевыми параметрами для изменения являются:
 79611111111 – номер телефона на который проводилась регистрация клиентского приложения
Mbkr3EJkakFPLFsvZ0MFDOBaoDs=  – пароль для авторизации полученный в ходе выполнения подтверждения регистрации клиентского приложения

После появления CLI консоли «Yowsup Cli client» необходимо ввести “/L” и нажать “Enter”, в результате чего произойдет подключение к серверу WhatsApp и будет сгенерирован ключ доступа

Первичная авторизация и генерация ключа доступа
Из CLI консоли «Yowsup Cli client» можно выйти сочетанием клавишь «Ctrl+Z»

10. Последующую проверку возможности отправки сообщений пользователям WhatsApp , можно выполнить командой:

#  python2.7 yowsup-cli demos -l 79611111111:Mbkr3EJkakFPLFsvZ0MFDOBaoDs= -E s40 -s 79001111111 "Test"

где ключевыми параметрами для изменения являются:
 79611111111 – номер телефона на который проводилась регистрация клиентского приложения
Mbkr3EJkakFPLFsvZ0MFDOBaoDs=  – пароль для авторизации полученный в ходе выполнения подтверждения регистрации клиентского приложения
 79001111111 – номер телефона кому требуется отправить сообщение
“Test” — текст отправляемого сообщения

Выполнение команды отправки сообщения из SSH консоли
Получение сообщения в официальном приложении WhatsApp

11. Убедившись в корректности работы отправки сообщений из консоли, можем перейти к подключению возможности отправки сообщений из диалплана Asterisk. Предварительно необходимо разрешить выполнение yowsup-cli от имени пользователя asterisk с правами root пользователя, для этого выполним правки в файле sudoers:

# nano /etc/sudoers
Для сохранения внесенных изменений в редакторе Nano используем сочетаний клавиш Ctrl+O (сохранить изменения) и Ctrl+X(выйти из редактора

И добавим в самый конец файла две строки вида:

asterisk        ALL=(root)NOPASSWD:/usr/bin/python2.7
asterisk        ALL=(root)NOPASSWD:/usr/bin/yowsup-cli
Разрешение выполнения yowsup-cli от имени asterisk с правами root

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

# nano /etc/asterisk/extensions_override_freepbx.conf
Для сохранения внесенных изменений в редакторе Nano используем сочетаний клавиш Ctrl+O (сохранить изменения) и Ctrl+X(выйти из редактора

И добавим контекст вида:

[ext-queues]
 exten => h,1,(Test send message to client WhatsApp)
 same => n,ExecIf($[$[ "${NODEST}" != "" ] & $[ "${FORWARD_CONTEXT}" != "from-internal" ]]?(yowsup=${SHELL(sudo -u root /usr/bin/yowsup-cli demos -l 79611111111:Mbkr3EJkakFPLFsvZ0MFDOBaoDs= -E s40 -s 79001111111 "Пропущен вызов в очереди ${NODEST}. Номер абонента: ${CALLERID(num)}.")})))
 same => n,Macro(hangupcall,)

где ключевыми параметрами для изменения являются:
 79611111111 – номер телефона на который проводилась регистрация клиентского приложения
Mbkr3EJkakFPLFsvZ0MFDOBaoDs=  – пароль для авторизации полученный в ходе выполнения подтверждения регистрации клиентского приложения
 79001111111 – номер телефона кому требуется отправить сообщение

Редактирование диалплана Asterisk для информирования о пропущенных вызовах в очереди на WhatsApp
Получение сообщения о пропущенном вызове в официальном клиенте WhatsApp

Траблшутинг:

  1. Сообщение «old_version» – это возможная проблема, которая может возникнуть при выполнение регистрации клиентского приложения, описанная в п.8 данной статьи.
Ошибка «old_version»

Данная ошибка сообщает о не корректно прописанных двух параметрах «_MD5_CLASSES» и «_VERSION»  в файле «yowsup/env/env_android.py». Для решения данной проблемы еще раз стоит убедится в корректно прописанных параметрах, получение которых описано в п.6 данной статьи посредством скрипта dexMD5.py.

В корректности прописываемой версии можно убедится перейдя в интернет обозревателе(Opera, Google Chrome, Yandex Browser…..) по ссылки на официальный сайт разработчика приложения.

Версия официального приложения WhatsApp

2. Сообщение «Disconnected: Connection Closed» – это возможная проблема, которая может возникнуть при выполнении первичной авторизации и генерации ключа описанного в п.9 данной статьи.

Ошибка «Disconnected: Connection Closed»

Данная ошибка сообщает о невозможности выполнения действий от имени платформы Android, для решения данной проблемы необходимо убедиться в наличии использования ключа «-E s40» в команде первичного входа:

# python2.7 yowsup-cli demos -l 79611111111:Mbkr3EJkakFPLFsvZ0MFDOBaoDs= -y -E s40
 
avatar
  Подписаться  
Уведомление о

Остались вопросы?

Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

Why Choose HUGE?

Unlimited pre-designed elements

Each and every design element is designed for retina ready display on all kind of devices

User friendly interface and design

Each and every design element is designed for retina ready display on all kind of devices

100% editable layered PSD files

Each and every design element is designed for retina ready display on all kind of devices

Created using shape layers

Each and every design element is designed for retina ready display on all kind of devices