Скрипт для WhatsApp-сообщений в 20 строках кода Python

Скрипты для uKit990323593.png

WhatsApp, пожалуй, самый популярный мессенджер в России, среди общего количества пользователей. Для многих не секрет, что в uKit вышло новое обновление и теперь в виджете «Соц. Сети» можно указать ссылку на WhatsApp по номеру телефона. Но мы решили дать возможность пользователям написать сообщение прямо с вашего сайта.

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

Настройки данного виджета: https://ukit.top/screen/76.png.

  1. Укажите свой номер в WhatsApp
  2. Задержка появления формы в миллисекундах
  3. Текст приветствия, при открытии формы WhatsApp

Код

                                                                       

Здравствуйте! Напишите нам сообщение в WhatsApp

                                               

Во вкладке «Настройки» в разделе «Выводить код» отметьте пункт «В конец

Установить сторонний код на ваш сайт, вы можете на тарифе «Про». Ознакомиться с тарифом вы можете на следующей странице: blog-ru.ukit.com/updates/tariffs. Также отмечу, что вы можете обратиться в службу поддержки uKit за помощью в установке кода на тарифах «Премиум» и выше, через раздел «Помощь» (скриншот). Демо страницаНаписать автору статьиПохожие материалы:

–>Всего комментариев–>: 9
<label>Порядок вывода комментариев:</label>

–> Автор оригинала: Kartik Nighania

  • Перевод

Автор материала, перевод которого мы сегодня публикуем, говорит, что современные люди, жизнь которых переполнена работой, часто забывают писать сообщения своим родным и близким. Он, глядя на то, как его родители каждое утро шлют ему в WhatsApp вдохновляющие цитаты и полезные советы о здоровье, решил, что пришло время ответить им взаимностью. В этом руководстве мы напишем простой Python-скрипт, предназначенный для отправки WhatsApp-сообщений. В ходе работы будем пользоваться Python-пакетом Twilio. Для организации ежедневного запуска скрипта в заданное время разместим код в облаке.a_70fblkos4swj4j61aziurh0vw.jpeg Одним из подходов к решению этой задачи является использование Python-пакета Selenium и веб-версии WhatsApp вместо сервиса Twilio, на который, после исчерпания возможностей бесплатного предложения, нужно оформлять платную подписку. Но так как работа с веб-версией WhatsApp требует периодического сканирования QR-кода с помощью мобильного телефона, автоматизировать отправку сообщений при таком подходе не получится. Работа над проектом будет состоять из трёх шагов:

  1. Настройка Twilio.
  2. Изучение и модификация кода.
  3. Развёртывание проекта в облаке и настройка триггера.

Шаг 1. Настройка Twilio

Создадим бесплатную учётную запись на сайте Twilio, подтвердим адрес электронной почты и номер телефона.

Регистрация учётной записи Twilio

Кроме того, в рамках бесплатного предложения Twilio необходимо использовать WhatsApp-песочницу (WhatsApp Sandbox). Это означает, что вы не сможете пользоваться собственным номером телефона, и то, что вам придётся пройти через процедуру выдачи разрешения на получение WhatsApp-сообщений. Собственным номером для работы с сообщениями можно пользоваться после того, как WhatsApp разрешит Twilio использовать ваш номер. Для того чтобы получить разрешение, нужно заполнить форму. Из материалов техподдержки Twilio можно узнать о том, что, хотя Twilio и работает напрямую с WhatsApp, на получение разрешения может понадобиться некоторое время. К тому же, там говорится об ограниченных масштабах выдачи разрешений. В результате многим приходится пользоваться WhatsApp-песочницей Twilio. Всё это особой радости не вызывает, но то, что доступно нам в рамках бесплатного предложения Twilio, позволяет решить нашу задачу. Кроме того, получается, что WhatsApp-песочница — это пока единственный широкодоступный вариант. Теперь нужно подключить телефон получателя сообщений к песочнице, после чего на этот телефон можно будет отправлять сообщения. Для того чтобы узнать о том, как это сделать, вам нужно перейти в раздел консоли Twilio, который посвящён WhatsApp. В частности, тут предлагается отправить WhatsApp-сообщение с указанным текстом на определённый номер. 

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

Запрос на подключение, отправленный с телефона

Сохраните выданный вам WhatsApp-номер в контактах. Ему можно назначить любое имя. Я, чтобы не усложнять себе жизнь, назвал этот контакт Twilio Sandbox, а потом отправил на него сообщение с телефона отца (это можно видеть на предыдущем рисунке). Эта процедура выполняется лишь один раз. Теперь нужно перейти в консоль Twilio и получить SID и токен аутентификации для своей учётной записи. Эти данные помогут Twilio узнать вас при программной работе с сервисом.

Шаг 2. Изучение и модификация кода

Загрузите этот GitHub-репозиторий и распакуйте архив.

Содержимое zip-файла

Здесь вы найдёте файл с исходным кодом (whatsapp_messaging.py) и пакет для развёртывания проекта (aws_lambda_deploy.zip). Вот код скрипта:

from twilio.rest import Client  def msg_mom_and_dad(event=None, context=None):      # тут нужно использовать SID и токен аутентификации, которые вы получили на Twilio     twilio_sid = 'AC84c9f1602d7fb6af4eda5b0c39a03b37'     auth_token = '4a2021b28f1aa606d9c6945d3c248ebd'      whatsapp_client = Client(twilio_sid, auth_token)      # в этот словарь можно добавлять контактные сведения тех,     # кому вы хотите отправлять сообщения     contact_directory = {'daddy':'+919624666836'}      for key, value in contact_directory.items():         msg_loved_ones = whatsapp_client.messages.create(                 body = 'good morning {} !'.format(key),                 from_= 'whatsapp:+14155238886',                 to='whatsapp:' + value,              )          print(msg_loved_ones.sid)

Сейчас мы разберём этот код. Вот, для удобства, скриншот с пронумерованными строками.

Код файла whatsapp_messaging.py с пронумерованными строками

  • Строка 1. Импорт клиента для работы с REST-API Twilio.
  • Строка 3. Создание функции msg_mom_and_dad. Эту функцию мы передадим AWS. Она будет вызываться ежедневно в заданное время.
  • Строки 6-7. Здесь вам нужно заменить существующие в коде sid и auth_token на собственные (об их получении мы говорили в конце предыдущего раздела).
  • Строка 9. Создание объекта клиента Twilio с использованием учётных данных.
  • Строка 13. Создание словаря. В качестве ключа тут используется имя получателя сообщений, в качестве значения — номер его телефона. В этот словарь можно добавить и дополнительные контактные сведения.
  • Строка 15. Цикл for, в котором осуществляется обход словаря (в нём пока имеется лишь одна запись). В body нужно указать текст сообщения. Я создал простое сообщение с текстом «good morning», за которым следует значение, взятое из ключа текущего элемента словаря. В моём случае это приводит к формированию сообщения «good morning daddy !». Во from_ указывается тот WhatsApp-номер, который мы получили ранее. В to записывают номер получателя сообщения — тот, с которого ранее отправляли запрос на подключение к WhatsApp-песочнице Twilio.
  • Строка 23. Тут мы, в целях проверки состояния сообщения, выводим его SID. Мы этими сведениями пользоваться не будем.

Вам, чтобы воспользоваться этим кодом для отправки сообщений, нужно изменить в нём следующее:

  • twilio_sid auth_token contact_directory from_ body (это необязательно)

После того, как вы внесёте в код изменения, сохраните файл. Затем распакуйте архив aws_lambda_deploy.zip, замените файл whatsapp_messaging.py на ваш файл с тем же именем, после чего снова упакуйте всё в .zip-архив. Смысл этих действий сводится к тому, чтобы внести в код ваши учётные данные и сведения о тех, кому вы хотите отправлять сообщения. Всё остальное в пакете, предназначенном для развёртывания на AWS, осталось неизменным. Теперь займёмся работой с AWS.

Шаг 3. Развёртывание проекта на AWS и настройка триггера

Код готов к запуску и к тому, чтобы отправлять WhatsApp-сообщения. Если вы интересуетесь тем, какую роль в проекте играют другие файлы из архива aws_lambda_deploy.zip, то знайте, что среди этих файлов находятся пакет Twilio и все остальные зависимости проекта. Всё это нам нужно из-за того, что мы планируем использовать функции AWS Lambda в Python-окружении, в котором нет пакета Twilio. А почему бы нам это не исправить, просто выполнив для установки нужного пакета команду pip install twilio? Дело в том, что тут у нас нет сервера. Для этого мы используем AWS Lambda — это бессерверная вычислительная среда, в которой можно размещать фрагменты кода, вызов которых, в соответствии с нуждами пользователя, инициируют различные события и триггеры. Наш код планируется запускать всего раз в день, поэтому использование чего-то вроде EC2-сервера на AWS, работающего круглосуточно, окажется пустой тратой вычислительных ресурсов и денег. Наша Lambda-функция будет вызываться ежедневно в определённое время по запросу из триггера, а её выполнение будет занимать совсем немного времени. Начало создания Lambda-функции Войдите в свою учётную запись AWS. После этого пройдите по пути Services → Compute → Lambda → Create a function.

Экран создания Lambda-функции

Дадим функции имя. В качестве окружения, в котором будет выполняться функция, выберем Python 3.6. Нам не нужно подключаться к другим сервисам AWS. Поэтому нас устроит уровень разрешений, задаваемый вариантом Create a new role with basic Lambda permissions. После выполнения настроек достаточно нажать на кнопку Create function. Теперь мы окажемся на главной панели управления.

Панель управления

Здесь, в разделе Function code, нужно указать обработчик (Handler), с помощью которого система сможет запускать наш код. В нашем случае в поле Handler нужно записать строку whatsapp_messaging. msg_mom_and_dad, указав имя файла с кодом и функцию, которую мы хотим вызывать. В поле Function package нужно загрузить наш .zip-файл, то есть — тот файл, который мы создали на предыдущем шаге. Теперь код готов к запуску. Проверить — работает ли функция и отправляет ли она сообщения, можно, нажав на кнопку Test. Финальным шагом нашей работы станет настройка триггера, который будет вызывать функцию ежедневно в заданное время. Пройдите по пути Add trigger → CloudWatch Events.

Настройка триггера

Нам нужно создать новое правило (Rule). Ему необходимо назначить имя (Rule name). При желании можно добавить к нему описание (Rule description). Укажем тип правила (Rule type) как Schedule expression. Время вызова функции задаётся с помощью конструкции cron(30 1 * * ? *). Разберём эту конструкцию:

  • 30 1 означает UTC-время 1:30 утра. Это — 7 утра по моему IST-времени.
  • Следующие два символа, * *, служат для указания дня месяца и месяца.
  • Следующие два символа, ? *, позволяют указать день недели и год. Эта конструкция означает, что функция будет вызываться ежедневно, без ограничений по годам и месяцам.

Здесь вы можете узнать о том, как настраивать собственные задания cron. После того, как настройка триггера завершена, проверьте — установлен ли флажок Enable trigger, включающий триггер. Теперь осталось лишь нажать на кнопку Add и триггер будет создан.

Сведения о триггере

Сведения о Lambda-функции

На панели управления Lambda-функции можно видеть, что к функции прикреплена сущность CloudWatch Events, и то, что функция может вызываться по срабатыванию соответствующего триггера.

Итоги

Сообщение, отправленное Python-скриптом

Мы завершили работу над проектом. Теперь можно, в телефоне получателя сообщений, в контактах WhatsApp, поменять имя контакта Twilio Sandbox на собственное (я поменял его на Son). Наша система, кроме того, позволяет общаться с получателем сообщений из панели управления Twilio.Уважаемые читатели! Используете ли вы Twilio в своих проектах?

Андрей Шагин

</span>

Sep 30, 2019·7 min read

</span>

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

В данном руководстве мы напишем простой скрипт Python для отправки сообщений через WhatsApp. Делать мы это будем с помощью пакета Twilio. Чтобы запускать скрипт каждый день в определённое время, поместим наш код в облако AWS (Amazon Web Services).

Теперь можно начинать!

Одно из решений — использовать пакет Selenium на Python и веб-версию WhatsApp, а не Twilio, так как в нем по окончании периода бесплатного использования надо оформлять платную подписку. Однако WhatsApp время от времени запрашивает сканирование QR-кода через мобильное устройство, поэтому автоматизация была бы невозможна.

Сделаем ее в три этапа:

Перевод статьи Kartik Nighania: I Wrote a Script to WhatsApp My Parents Every Morning in Just 20 Lines of Python Code

Используемые источники:

  • https://ukit.top/scripts/skript_dlja_otpravki_soobshhenij_s_sajta_na_whatsapp
  • https://habr.com/ru/company/ruvds/blog/463933/
  • https://medium.com/nuances-of-programming/как-я-писал-скрипт-для-whatsapp-сообщений-в-20-строках-кода-python-73b36cd8d14c

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий