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

Использование библиотеки 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 оборудование

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

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

10 доводов в пользу Asterisk

Распространяется бесплатно.

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

Безопасен в использовании.

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

Надежен в эксплуатации.

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

Гибкий в настройке.

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

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

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

Повышает управляемость бизнеса.

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

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.