# Бизнес-номер WhatsApp как бот (/ru/docs/wa/bot)

`wa <profile> bot …` обозначает номер WhatsApp Business в [Cloud API](https://developers.facebook.com/documentation/business-messaging/whatsapp/get-started) Meta, а не ваш собственный WhatsApp. Он никогда не связывает устройство и никогда не запускает механизм, который использует `wa <profile> chats …`. Он взаимодействует с `graph.facebook.com` через HTTPS с помощью токена, который вы храните в системном хранилище ключей.

**Никогда не регистрируйте свой номер телефона или любой номер, WhatsApp которого вы все еще используете на телефоне.** Регистрация номера в Cloud API приводит к удалению аккаунта WhatsApp этого номера. Используйте бесплатный тестовый номер Meta или номер, у которого нет аккаунта WhatsApp.

## Что можно сделать [#что-можно-сделать]

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

Чат — это номер телефона человека, записанный цифрами, например `70000000001`. Мета называет некоторых людей только по идентификатору пользователя, связанного с бизнесом; `bot watch`[↗](/llms.mdx/docs/ru/wa/commands-bot/content.md#wa-bot-watch "Справочник команды: wa bot watch") показывает этот чат как `user:<id>`, и вы отправляете в него сообщения таким же образом.

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

## Подключить тестовый номер [#подключить-тестовый-номер]

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

1. В [Meta for Developers](https://developers.facebook.com/apps/) создайте приложение с вариантом использования «Общайтесь с клиентами через WhatsApp». Meta добавляет тестовый аккаунт WhatsApp Business и тестовый номер.
2. В разделе WhatsApp → Настройка API добавьте до пяти номеров получателей и подтвердите каждый из них кодом, который WhatsApp отправляет ему. Тестовый номер отправляет сообщения только этим получателям.
3. В «Бизнес-настройках» создайте системного пользователя с правами `business_management`, `whatsapp_business_messaging` и
   `whatsapp_business_management` и сгенерируйте для него токен, срок действия которого не истекает. Запишите секрет приложения в разделе «Настройки приложения» → «Основные».
4. Скопируйте идентификатор номера телефона и идентификатор аккаунта WhatsApp Business из WhatsApp → Настройка API в профиль:

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

   `graph_version` — это `v23.0`, если вы не установите другой.
5. Сохраните токен и два секрета. Каждая команда предлагает ввести значение в скрытом поле терминала; ничего не появляется на экране или в истории оболочки:

   ```sh
   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](#receive-messages)). Затем в WhatsApp → Конфигурация введите адрес туннеля в качестве URL-адреса обратного вызова с тем же токеном проверки и подпишитесь на поле `messages`[↗](/llms.mdx/docs/ru/wa/commands-personal/content.md#wa-messages "Справочник команды: wa messages").

Проверьте это: `wa cloudtest bot me` называет тестовый номер, и `wa cloudtest bot templates send <your verified number> hello_world` приходит на ваш телефон.

## Получать сообщения [#получать-сообщения]

Мета никогда не позволяет клиенту запрашивать новые сообщения. Он отправляет каждое из них на указанный вами HTTPS-адрес и повторяет попытки в течение семи дней, пока этот адрес не ответит. `bot watch --public-url`[↗](/llms.mdx/docs/ru/wa/commands-bot/content.md#wa-bot-watch "Справочник команды: wa bot watch") является получателем этого адреса: он прослушивает `127.0.0.1:8766` на вашем компьютере, и ваш туннель публикует его.

```sh
wa cloudtest bot watch --public-url https://<name>.ts.net:8443
```

* Он отвечает на проверку подписки Meta с помощью сохраненного вами токена проверки.
* Он отклоняет любую доставку, `X-Hub-Signature-256` которой не соответствует секрету вашего приложения.
* Он отвечает Meta только после того, как сообщение окажется в локальном хранилище, поэтому при сбое или переполнении диска ничего не теряется: Meta отправляет его снова.
* `--port` меняет локальный порт. Получателю нужен собственный порт и собственный публичный адрес рядом с `mcp --http`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-mcp "Справочник команды: wa mcp").

Туннель должен хранить один адрес: каждый новый адрес Meta проверяет заново. Используйте Tailscale Funnel или именованный Cloudflare Tunnel, настроенный, как в [ChatGPT, Codex или Claude в браузере](/llms.mdx/docs/ru/wa/remote/content.md#webhook-receiver-for-a-bot). Быстрый туннель Cloudflare меняет свой адрес при каждом запуске.

Meta сохраняет один адрес обратного вызова для каждого приложения, установленный на панели управления приложения, и отправляет события шаблона и аккаунта только туда. `bot webhooks set <url>`[↗](/llms.mdx/docs/ru/wa/commands-bot/content.md#wa-bot-webhooks-set "Справочник команды: wa bot webhooks set") добавляет адрес только для этого номера; установите для него тот же адрес туннеля.

## Разрешения [#разрешения]

Профиль бота имеет свои собственные разрешения в разделе `bot`[↗](/llms.mdx/docs/ru/wa/commands-bot/content.md#wa-bot "Справочник команды: wa bot") в конфигурации. Операции `bot api`[↗](/llms.mdx/docs/ru/wa/commands-bot/content.md#wa-bot-api "Справочник команды: wa bot api"), которые невозможно отменить, например `register-phone-number` и `delete-template`, запрашивают перед выполнением. Список получателей и часовой лимит применяются к рассылкам ботов, как и к личным ([разрешения](/llms.mdx/docs/ru/wa/permissions/content.md)).
