Бизнес-номер WhatsApp как бот
Используйте тестовый бизнес-номер WhatsApp через Cloud API Meta отдельно от личного аккаунта.
wa <profile> bot … обозначает номер WhatsApp Business в Cloud API Meta, а не ваш собственный WhatsApp. Он никогда не связывает устройство и никогда не запускает механизм, который использует wa <profile> chats …. Он взаимодействует с graph.facebook.com через HTTPS с помощью токена, который вы храните в системном хранилище ключей.
Никогда не регистрируйте свой номер телефона или любой номер, WhatsApp которого вы все еще используете на телефоне. Регистрация номера в Cloud API приводит к удалению аккаунта WhatsApp этого номера. Используйте бесплатный тестовый номер Meta или номер, у которого нет аккаунта WhatsApp.
Что можно сделать
Чат — это номер телефона человека, записанный цифрами, например 70000000001. Мета называет некоторых людей только по идентификатору пользователя, связанного с бизнесом; bot watch показывает этот чат как user:<id>, и вы отправляете в него сообщения таким же образом.
Правило 24 часов. Вы можете отправить сообщение с произвольным текстом только в течение 24 часов с момента последнего сообщения от человека на номер. После этого WhatsApp доставляет только шаблон. Когда в локальном хранилище хранится последнее сообщение человека, wa отклоняет отправку вне этого окна до обращения к Meta и предлагает вам отправить шаблон. Если такого сообщения в хранилище нет, запрос отклоняет Meta.
Подключить тестовый номер
Вы выполняете эти шаги один раз на панели управления приложения Meta. wa не может сделать это за вас.
-
В Meta for Developers создайте приложение с вариантом использования «Общайтесь с клиентами через WhatsApp». Meta добавляет тестовый аккаунт WhatsApp Business и тестовый номер.
-
В разделе WhatsApp → Настройка API добавьте до пяти номеров получателей и подтвердите каждый из них кодом, который WhatsApp отправляет ему. Тестовый номер отправляет сообщения только этим получателям.
-
В «Бизнес-настройках» создайте системного пользователя с правами
business_management,whatsapp_business_messagingиwhatsapp_business_managementи сгенерируйте для него токен, срок действия которого не истекает. Запишите секрет приложения в разделе «Настройки приложения» → «Основные». -
Скопируйте идентификатор номера телефона и идентификатор аккаунта WhatsApp Business из WhatsApp → Настройка API в профиль:
wa cloudtest config set --bot phone_number_id 100000000000001 wa cloudtest config set --bot waba_id 200000000000002graph_version— этоv23.0, если вы не установите другой. -
Сохраните токен и два секрета. Каждая команда предлагает ввести значение в скрытом поле терминала; ничего не появляется на экране или в истории оболочки:
wa cloudtest bot auth set wa cloudtest bot auth set --secret app-secret wa cloudtest bot auth set --secret verify-tokenТокеном проверки является любая выбранная вами строка. Вы вводите ту же строку на панели управления приложения на шаге 6.
-
Откройте туннель и запустите приемник (receive messages). Затем в WhatsApp → Конфигурация введите адрес туннеля в качестве URL-адреса обратного вызова с тем же токеном проверки и подпишитесь на поле
messages.
Проверьте это: wa cloudtest bot me называет тестовый номер, и wa cloudtest bot templates send <your verified number> hello_world приходит на ваш телефон.
Получать сообщения
Мета никогда не позволяет клиенту запрашивать новые сообщения. Он отправляет каждое из них на указанный вами HTTPS-адрес и повторяет попытки в течение семи дней, пока этот адрес не ответит. bot watch --public-url является получателем этого адреса: он прослушивает 127.0.0.1:8766 на вашем компьютере, и ваш туннель публикует его.
wa cloudtest bot watch --public-url https://<name>.ts.net:8443- Он отвечает на проверку подписки Meta с помощью сохраненного вами токена проверки.
- Он отклоняет любую доставку,
X-Hub-Signature-256которой не соответствует секрету вашего приложения. - Он отвечает Meta только после того, как сообщение окажется в локальном хранилище, поэтому при сбое или переполнении диска ничего не теряется: Meta отправляет его снова.
--portменяет локальный порт. Получателю нужен собственный порт и собственный публичный адрес рядом сmcp --http.
Туннель должен хранить один адрес: каждый новый адрес Meta проверяет заново. Используйте Tailscale Funnel или именованный Cloudflare Tunnel, настроенный, как в ChatGPT, Codex или Claude в браузере. Быстрый туннель Cloudflare меняет свой адрес при каждом запуске.
Meta сохраняет один адрес обратного вызова для каждого приложения, установленный на панели управления приложения, и отправляет события шаблона и аккаунта только туда. bot webhooks set <url> добавляет адрес только для этого номера; установите для него тот же адрес туннеля.
Разрешения
Профиль бота имеет свои собственные разрешения в разделе bot в конфигурации. Операции bot api, которые невозможно отменить, например register-phone-number и delete-template, запрашивают перед выполнением. Список получателей и часовой лимит применяются к рассылкам ботов, как и к личным (разрешения).