WhatsApp

Бизнес-номер 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.

Что можно сделать

КомандаЧто он делает
bot auth setПроверьте токен доступа с помощью Meta, а затем сохраните его. Добавьте --secret app-secret или --secret verify-token для двух секретов вебхука.
bot meБизнес-номер, который определяют токен и phone_number_id.
bot messages send <chat> <text>Отправьте текст, ответ (--reply-to) или файл (--file, --photo, --voice). Тихая отправка, редактирование и удаление для бота не поддерживаются.
bot templates listШаблоны сообщений вашего аккаунта WhatsApp Business.
bot templates send <chat> <name> [language]Отправьте утвержденный шаблон; --payload заполняет свои заполнители. hello_world предварительно одобрен для номера теста.
bot watch --public-url <url>Получайте сообщения и квитанции о доставке по мере их отправки Meta, сохраняйте их в локальном хранилище и распечатывайте.
bot webhooks set <url>Направьте вебхук этого номера на адрес; bot webhooks list и delete прочитайте и удалите его.
bot media download <id> --output <file>Сохраните отправленный кем-то файл с напечатанным идентификатором медиа из bot watch --jsonl.
bot api <operation>Каждая операция Cloud API, которую сохраняет wa, создается из файла Meta OpenAPI.
bot mcpКоманды бота как инструменты MCP для агента.

Чат — это номер телефона человека, записанный цифрами, например 70000000001. Мета называет некоторых людей только по идентификатору пользователя, связанного с бизнесом; bot watch показывает этот чат как user:<id>, и вы отправляете в него сообщения таким же образом.

Правило 24 часов. Вы можете отправить сообщение с произвольным текстом только в течение 24 часов с момента последнего сообщения от человека на номер. После этого WhatsApp доставляет только шаблон. Когда в локальном хранилище хранится последнее сообщение человека, wa отклоняет отправку вне этого окна до обращения к Meta и предлагает вам отправить шаблон. Если такого сообщения в хранилище нет, запрос отклоняет Meta.

Подключить тестовый номер

Вы выполняете эти шаги один раз на панели управления приложения Meta. wa не может сделать это за вас.

  1. В Meta for Developers создайте приложение с вариантом использования «Общайтесь с клиентами через WhatsApp». Meta добавляет тестовый аккаунт WhatsApp Business и тестовый номер.

  2. В разделе WhatsApp → Настройка API добавьте до пяти номеров получателей и подтвердите каждый из них кодом, который WhatsApp отправляет ему. Тестовый номер отправляет сообщения только этим получателям.

  3. В «Бизнес-настройках» создайте системного пользователя с правами business_management, whatsapp_business_messaging и whatsapp_business_management и сгенерируйте для него токен, срок действия которого не истекает. Запишите секрет приложения в разделе «Настройки приложения» → «Основные».

  4. Скопируйте идентификатор номера телефона и идентификатор аккаунта WhatsApp Business из WhatsApp → Настройка API в профиль:

    wa cloudtest config set --bot phone_number_id 100000000000001
    wa cloudtest config set --bot waba_id 200000000000002

    graph_version — это v23.0, если вы не установите другой.

  5. Сохраните токен и два секрета. Каждая команда предлагает ввести значение в скрытом поле терминала; ничего не появляется на экране или в истории оболочки:

    wa cloudtest bot auth set
    wa cloudtest bot auth set --secret app-secret
    wa cloudtest bot auth set --secret verify-token

    Токеном проверки является любая выбранная вами строка. Вы вводите ту же строку на панели управления приложения на шаге 6.

  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, запрашивают перед выполнением. Список получателей и часовой лимит применяются к рассылкам ботов, как и к личным (разрешения).