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

  • Ваш телефон и подключенный компьютер должны быть включены.
  • Ваш телефон и подключенный компьютер должны быть в одной сети.
  • Вы можете отправлять/получать только с использованием вашего (личного) номера и на/из ваших собственных контактов.
  • Он не предназначен для использования в качестве бизнес-инструмента и не является официально поддерживаемой службой, и он может измениться по прихоти.
  • Насколько я знаю, он не поддерживает отправку/получение геолокации, карточек контактов или интерактивных сообщений с кнопками быстрого ответа. Или не легко…

Если вы ищете более серьезный/профессиональный способ автоматизации WhatsApp, возможно, пришло время проверить WhatsApp Business Cloud API от Meta… и если вы хотите автоматизировать его с помощью Python, отличной отправной точкой является whatsappcloud:

python -m pip install whatsappcloud --upgrade

Даже с бесплатной пробной версией WhatsApp Cloud вы можете отправлять неограниченное количество сообщений на пять (подтвержденных) телефонных номеров совершенно бесплатно. Это потрясающая новость для небольших команд и разработчиков-фрилансеров, которые могут захотеть изучить то, что предлагается, или добавить удобное уведомление WhatsApp в серверную часть того, над чем они работают, для 5 получателей по телефону. Единственным условием является то, что вы соглашаетесь (и соблюдаете) положения и условия Meta, особенно в отношении согласия и приемлемого использования…

Хорошая новость для питонистов заключается в том, что нет необходимости просматривать документацию по API или другие незавершенные разработки, опубликованные на Github. Эта статья включает около 20 основных строк Python, а также несколько комментариев, которые вы можете скопировать в свои собственные сценарии, а затем расслабиться и наслаждаться исходящими уведомлениями WhatsApp без необходимости изучать особенности еще одного API с нуля. Или, если вы да хотите получить более глубокое понимание и изучить более богатую функциональность, вы можете перейти в репозиторий Github, где вы найдете полный пакет с тестами. и дополнительные методы.

Надеемся, что эта статья ускорит ваше обучение и поможет вам быстрее использовать WhatsApp Cloud API.

TLDR: вот базовый код, который поможет вам приступить к работе…

ВНИМАНИЕ SOAP BOX! Невероятное количество руководств по API смешивают учетные данные и данные конфигурации в одном скрипте. По моему мнению и мнению многих других, это плохая практика, и подражать ей не следует, поэтому давайте с самого начала начнем с лучшего способа…

Вот пример автономного конфигурационного файла, который вы можете (должны) использовать после создания своего первого облачного приложения WhatsApp на портале разработчиков, с которым я сейчас вас познакомлю. Вам просто нужно добавить свои учетные данные и сохранить этот шаблон как config.py:

Есть еще несколько шагов, которые нужно сделать, прежде чем вы сможете отправлять сообщения, но как только вы зарегистрируетесь и создадите свое приложение Meta/Facebook (см. ниже), отправлять сообщения WhatApp в будущем будет так же просто:

from whatsappcloud import Whatsapp
# If you've installed the full package e.g. using pip
>>> Whatsapp()
# Send a test message with test url (and preview) to your default contact
>>> Whatsapp.text("Hello Monty", CONTACT[4])
# Send "Hello Monty" to your fifth contact
>>> Whatsapp.template("hello_world")
# Send the pre-approved "hello_world" Template to your default contact
>>> wa = Whatsapp(autosend=False)
# Create a WhatsApp message object but don't send. Useful when testing/debugging and also if you intend to do any pre- or post- processing and want to control when a message is actually sent.
>>> wa.send()
# Send (or resend) a previously prepared message

Подготовка

Процесс регистрации нового приложения Meta/Facebook очень прост. Просто следуйте шагам 1 и 2 их инструкций Начало работы. Я не предлагаю проходить эти шаги в этой статье, но если вы застрянете, в Интернете уже есть несколько других руководств, которые, я уверен, вы легко найдете.

Оглядываясь назад, мы приводим некоторые предложения/комментарии, которые следует просмотреть, прежде чемвы начнете самостоятельно выполнять процесс установки:

  • Я был удивлен, обнаружив, что вам на самом деле не нужно создавать или подтверждать бизнес-аккаунт Facebook. В определенный момент, когда вы создаете новое приложение, вам будет предложено создать тестовую бизнес-учетную запись. Это все, что вам нужно.
  • Если вы хотите разблокировать всю мощь WhatsApp Cloud API и запустить правильную производственную систему, вы можете позже создать подтвержденную учетную запись Business или привязать ее к ней. Если вы сделаете это, вы в настоящее время получаете 1000 бесплатных «разговоров» в месяц или, другими словами, примерно 33 сообщения в день — одно в час плюс несколько дополнительных. Но если вы не сделаете что-то, чтобы вас отключили от тестового бизнес-аккаунта, неограниченные бесплатные сообщения на/с пяти телефонных номеров — это очень щедро и кажется идеальным для разработчиков и микробизнеса, поэтому я бы посоветовал придерживаться что как можно дольше.
  • Вам не обязательно включать двухфакторную аутентификацию, если вы просто хотите погрузиться в игру и начать играть.
  • После того, как вы создали свои пять бесплатных контактных номеров телефонов, я не думаю, что есть способ изменить или удалить их… поэтому тщательно выбирайте и трижды проверяйте их правильность и правильность форматирования, прежде чем совершать.
  • Помимо вашего токена, вам просто нужно скопировать/вставить свой идентификатор номера телефона и идентификатор приложения в шаблон конфигурации выше,затем переименуйте его в config.py. Обратите внимание, что идентификатор номера телефона отличается от фактического (тестового) номера телефона. Вам не нужно будет копировать реальный номер телефона.
  • Платформа WhatsApp Business Platform описывает себя как «предназначенную для людей, разрабатывающих для себя или своей организации, а не от имени клиента», и «платформа не открыта для тех, кто разрабатывает от имени клиентов. ” … но не позволяйте этому откладывать. Есть много вещей, для которых вы можете законно использовать API, и кривая обучения действительно не крутая, учитывая, что вы уже нашли эту статью!
  • Предписанный способ отправки сообщений телефонным контактам, подписавшимся на их получение, — через заранее утвержденный Шаблон. Вот почему первое тестовое сообщение в документации (отправленное CURL) представляет собой сообщение шаблона, а не сообщение любого другого типа (обычный текст, медиа и т. д.). Единственная проблема заключается в том, что вам нужно настроить новые шаблоны и утвердить их через панель инструментов Cloud API каждый раз, когда вам нужна новая форма сообщения. Предположительно, если вы читаете это, вы уже планируете самостоятельно генерировать сообщения и контент на Python, а не возиться с настройкой серверных шаблонов и каждый раз передавать им переменные. Так что ИМХО лучшая отправная точка для понимания API в целом, и основой для моего класса Whatsapp выше является более простой API Отправить сообщения, о котором вы можете прочитать больше здесь.
  • Прежде чем вы сможете отправить исходное hello_world тестовое сообщение (Шаблон) на номер телефона, вам необходимо подтвердить его с помощью одноразового кода доступа. После получения первого сообщения вам также потребуется «Разрешить» номер Test Business на каждом принимающем телефоне, чтобы продолжить.
  • Вы, вероятно, захотите как можно скорее отправлять обычные (не шаблонные) сообщения, особенно если вы надеетесь сделать что-то вроде отправки уведомлений себе и членам команды непосредственно из Python. В этом случае вам нужно будет фактически отправить ответ на первое сообщение, которое вы получите на каждом телефоне, или, другими словами, вступить в «разговор» с получателем. конец. Мне потребовалась целая вечность, чтобы понять, почему я получаю сообщения об успешном завершении (200) от моих исходящих вызовов API для сообщений без шаблона, но ничего не вижу на телефоне (ах) получателя. Это было причиной! «Реакция» на начальное сообщение тоже может помочь, но на момент написания я не проверял это. Пожалуйста, дайте мне знать в комментариях, если вы делаете?
  • Также похоже, что разговоры сбрасываются через 24 часа, поэтому вам нужно либо использовать шаблоны, чтобы вести дела каждый день (изначально), либо продолжать разговор со стороны получателя. Я не проверял полностью ограничения в этом отношении, но один из подходов после сброса беседы может состоять в том, чтобы добавить красивую интерактивную кнопку в сообщение шаблона, но это выходит за рамки этой статьи. Еще один, возможно, более простой вариант — использовать бесплатную бизнес-версию WhatsApp на телефонах ваших получателей и попросить их создать автоответчик или быстрый ответ.

Обязательно переходите к шагам 3 и 4 инструкций по началу работы. Если вы хотите узнать, как получать входящие сообщения с помощью веб-перехватчиков и делать вещи интерактивными, или загружать и скачивать файлы и т. д., но эта статья посвящена предоставлению 80% хороший материал за 20% усилий, и если вы вообще похожи на меня, вы будете достаточно взволнованы только перспективой отправки бесплатных уведомлений от Python!

Код

  • К сожалению, официальная Документация по API не подходит для Python и просто дает вам фрагменты CURL для расшифровки. Вы можете использовать такие инструменты, чтобы преобразовать CURL в Python, если хотите, или, возможно, более разумной идеей будет просмотреть определения функций и тесты в основном репозитории. >» и изучить различные варианты и аргументы там.
  • Мой класс Whatsapp в начале этой статьи был преднамеренно упрощенным — достаточно функций, чтобы вы могли начать работу и отправить обычное текстовое сообщение с URL-адресом и предварительным просмотром. Смысл дополнительнойkwargs логики, которую вы видите в __init__, заключается в том, чтобы сделать вещи СУХИМИ и легко расширяемыми, например. если вы хотите расширить класс (как я начал делать) для обработки более сложных типов сообщений, таких как аудио, видео, изображения, кнопки, геолокация, наклейки, карточки контактов и да, шаблоны, если необходимо. Для этого вам просто нужно указать аргументы ключевого слова. Если вы не знакомы с такими вещами, как параметры функций, *args и **kwargs, взгляните на test_whatsappcloud.py, который, я надеюсь, даст вам некоторое представление о доступных варианты и использование.
  • Аргумент ключевого слова autosend был включен главным образом для помощи при тестировании и отладке, но также помогает, если вы хотите сделать что-то еще с сообщением перед отправкой. Это может включать перевод на другой язык, сохранение в файл/базу данных/облако, создание «фабрики» сообщений для нескольких получателей, рабочие процессы утверждения сообщений, отправку сообщений по расписанию или ответ на типы входящих сообщений.
  • Не обязательно, но я включил в этот код свой вспомогательный класс CleverDict. Если вам это интересно, он в основном добавляет возможность получать и устанавливать значения словаря, используя очень удобную нотацию «точка», например. data.type, а не dictionary["key"], что делает такие вещи, как тесты, намного более читабельными и простыми для ввода - одно нажатие клавиши для . вместо [ + SHIFT + " ... + SHIFT + "+ ] убивает ваш мизинец на клавиатуре США/Великобритании! Вы можете легко удалить CleverDict и вернуться к словарной записи, если вы предпочитаете быть полностью свободным от зависимостей, но это очень легкий пакет, и его стоит проверить, если вы не использовали его раньше. Он также широко используется в test_whatsappcloud.py, поэтому, если вы удалите его, вам может потребоваться реорганизовать и эти тесты.
  • Для тестовых бизнес-аккаунтов срок действия токена истекает каждые 24 часа, что немного неудобно, поэтому вам придется либо обновить файл config.py вручную, либо немного написать кода, например. с помощью selenium, чтобы войти в панель управления разработчика Facebook, обновить и скопировать токен. Для этой цели я включил APP_ID и APP_URL в config.py, и если вы добавите свой код очистки в config.py, он должен автоматически запускаться и обновляться при каждом импорте из него. Если я доберусь до этого первым, я включу что-нибудь в основной пакет, чтобы помочь с этим, надеюсь, скоро…

И наконец…

Если вы получили пользу от прочтения этой статьи и хотите оплатить ее вперед, я буду рад, если вы пометите ЗВЕЗДОЙ мою страницу Github или, пожалуйста, дайте ей несколько хлопков в конце этой статьи. статья?

Знаете ли вы, что вы можете нажать и удерживать значок «хлопать», чтобы хлопнуть несколько раз? Я дважды смею вас найти максимум — попробуйте прямо сейчас!

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