# WhatsApp из браузера (/ru/docs/wa/remote)

Подключите MCP-приложение в браузере или на телефоне, например ChatGPT или Claude, к `wa` на своём компьютере. Вы настроите HTTPS-туннель с входом, узнаете, какие действия разрешает профиль `wa`, и сможете остановить подключение или отозвать доступ приложения.

Термины, используемые на этой странице:

* **MCP** (протокол контекста модели) — это стандартный способ, которым приложение ИИ вызывает внешние инструменты. `wa personal mcp` — это сервер MCP, входящий в состав `wa`; [Руководство по серверу MCP](/llms.mdx/docs/ru/wa/mcp/content.md) описывает приложения на вашем компьютере.
* **Удаленное подключение** означает, что приложение подключается со своих серверов через Интернет по указанному вами адресу.
  `wa personal mcp --http` предоставляет для этого те же инструменты через HTTP, что и `127.0.0.1`.
* **HTTPS-туннель** — это программа, которая присваивает порту вашего компьютера общедоступный HTTPS-адрес. На этой странице используется [Tailscale Funnel](https://tailscale.com/docs/features/tailscale-funnel); Cloudflare Tunnel также работает. Вам не нужно покупать домен для Funnel.
* **Публичный URL** — это адрес, например `https://laptop.tail1234.ts.net`. Вы передаете его `wa` как
  `--public-url`, и приложение получает его с `/mcp` в конце.
* **Код доступа** — это одноразовый код, который `wa` печатает на вашем терминале. Страница входа в приложение запрашивает это, поэтому только тот, кто видит этот терминал, может подключить приложение.

```text
ChatGPT / Claude ──internet──▶ Tailscale Funnel ──▶ wa personal mcp --http (login) ──▶ WhatsApp
```

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

| Задача | Где |
| --- | --- |
| Подключите браузерное или телефонное приложение ИИ к WhatsApp | [Запустите туннель и сервер](#start-the-tunnel-and-server), затем [подключите приложение](#connect-the-app) |
| Запустить wa рядом с tg или max | [Запуск нескольких серверов вместе](#run-several-servers-together) |
| Используйте Cloudflare вместо Tailscale | [Альтернатива: Туннель Cloudflare](#alternative-cloudflare-tunnel) |
| Разрешить меньше для одного запуска сервера | [Разрешения для этого серверного процесса](#permissions-for-this-server-process) |
| Остановите сервер или выйдите из всех приложений | [Остановить или отозвать доступ](#stop-or-revoke-access) |

## Прежде чем начать [#прежде-чем-начать]

* **Кто бы ни вошел в систему, он читает ваш WhatsApp.** Для входа требуется код доступа с вашего терминала. Никогда не ставьте туннель перед `wa personal mcp` без `--http`: в этом режиме вообще нет входа в систему.
* **Разрешения профиля определяют, что приложение может изменить.** `deny` и `readonly` блокируют запись; `ask` и `allow` позволяют запрошенной записи MCP проходить без формы на сервере. Одобрение приложения является отдельным и зависит от его настроек. Список получателей и почасовой лимит по-прежнему применяются ([что может делать агент](/llms.mdx/docs/ru/wa/mcp/content.md#what-an-agent-may-do), [разрешения](/llms.mdx/docs/ru/wa/permissions/content.md)).
* **Сервер использует одно соединение устройства с `serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve").** Чтение из локального хранилища работает во время работы `serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve"). В отличие от терминала и `wa personal mcp`, HTTP-сервер не проходит через `serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve"): отправка, редактирование или реакция приложения отклоняются до тех пор, пока `serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve") не остановится, а `serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve") не может запуститься, пока сервер удерживает соединение ([одно соединение, совместно используемое с `serve`](/llms.mdx/docs/ru/wa/mcp/content.md#one-connection-shared-with-serve)).
* **Компьютер, на котором работает `wa`, должен оставаться включенным.** Чтобы использовать его с телефона или с ноутбука, на котором ничего не установлено, запустите все это на небольшом постоянно включенном сервере и свяжите туда `wa` (`wa personal setup --agent none`). Это еще одно подключенное устройство на вашем телефоне.
* **Кто может добавить удаленный соединитель:**

Ваш аккаунт должен поддерживать добавление удалённого MCP-подключения. Перед запуском туннеля проверьте текущие требования приложения к аккаунту и региону.

| Приложение | Условия подключения |
| --- | --- |
| ChatGPT | [Руководство подключения](https://developers.openai.com/api/docs/guides/custom-mcp-server) |
| Claude | [Руководство подключения](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp) |
| Gemini | [Руководство подключения](https://support.google.com/gemini/answer/17209137?hl=en) |

Если шаг не работает, [откройте проблему](https://github.com/WireCatLabs/whatsapp-cli/issues).

## Запускаем туннель и сервер [#запускаем-туннель-и-сервер]

Установите `wa` и сначала свяжите профиль ([установка](/llms.mdx/docs/ru/wa/installation/content.md), [связывание](/llms.mdx/docs/ru/wa/sessions/content.md)). Используйте одного и того же пользователя и профиль инструмента для настройки и для сервера MCP. При необходимости поместите профиль перед командой: `wa work mcp`. Tailscale представляет собой отдельную установку.

Установите [Tailscale](https://tailscale.com/download), войдите в систему и включите [Funnel](https://tailscale.com/docs/features/tailscale-funnel): сертификаты MagicDNS, HTTPS и разрешение Funnel должны быть включены в вашей Tailnet (вашей сети Tailscale). Первая команда Funnel может распечатать ссылку для подтверждения.

Держите два окна терминала открытыми. Первый управляет туннелем. Скопируйте источник HTTPS, который он печатает, во второе окно, когда его спросят. Источником является адрес без `/mcp` или любого другого пути. Сохраните в нем явный общедоступный порт, например `:8443`.

Сервер прослушивает `127.0.0.1:8765` и печатает одноразовый код доступа. Ему никогда не нужны права администратора; они могут понадобиться только туннелю. Приложение может делать собственный `permissions` профиля; установите их перед запуском ([разрешения для этого серверного процесса](#permissions-for-this-server-process)).

### Windows (PowerShell) [#windows-powershell]

Установите приложение Tailscale для Windows и войдите в систему из его меню на панели задач. Откройте новое окно PowerShell после установки Node.js, `wa` и Tailscale, чтобы оно увидело обновленный PATH. Используйте `.cmd` для команд npm, чтобы избежать ошибок политики выполнения PowerShell.

Первое окно: запустите PowerShell от имени администратора Funnel. Оператор вызова `&` обрабатывает пространство в пути установки по умолчанию; измените путь, если вы установили Tailscale в другом месте.

```powershell
& "$env:ProgramFiles\Tailscale\tailscale.exe" funnel 8765
```

Второе окно: обычный PowerShell, от имени пользователя, связавшего `wa`:

```powershell
$mcpPublicUrl = Read-Host 'Paste the HTTPS origin printed by Funnel (no /mcp)'
wa.cmd personal mcp --http --port 8765 --public-url $mcpPublicUrl
```

Запустите оба процесса в самой Windows. WSL — это отдельная среда: туннель Windows, указывающий на адрес обратной связи Windows, может не достигать сервера внутри WSL.

### macOS (Терминал) [#macos-терминал]

Установите и войдите в приложение Tailscale. Его интерфейс командной строки поставляется вместе с приложением; используйте этот путь, если `tailscale` не находится в PATH ([Руководство по интерфейсу командной строки Tailscale](https://tailscale.com/docs/reference/tailscale-cli?tab=macos)). Первое окно терминала:

```sh
TAILSCALE_BE_CLI=1 /Applications/Tailscale.app/Contents/MacOS/Tailscale funnel 8765
```

Второе окно терминала от имени того же пользователя, который запустил `wa personal setup`. Это работает как в zsh, так и в bash:

```sh
printf 'Paste the HTTPS origin printed by Funnel (no /mcp): '
IFS= read -r mcpPublicUrl
wa personal mcp --http --port 8765 --public-url "$mcpPublicUrl"
```

### Linux (Терминал) [#linux-терминал]

Установите Tailscale, следуя [инструкциям Linux](https://tailscale.com/download/linux), затем войдите в систему с помощью `sudo tailscale up`. Первое окно терминала:

```sh
sudo tailscale funnel 8765
```

Второе окно терминала: ваш обычный пользователь без `sudo`, поэтому `wa` находит устройство, связанное с `wa personal setup`:

```sh
printf 'Paste the HTTPS origin printed by Funnel (no /mcp): '
IFS= read -r mcpPublicUrl
wa personal mcp --http --port 8765 --public-url "$mcpPublicUrl"
```

## Запускаем несколько серверов вместе [#запускаем-несколько-серверов-вместе]

Каждому серверу нужен собственный локальный порт и собственный общедоступный HTTPS-адрес. Например, сохраните `tg` в локальном `8765` и общедоступном `443`; запустите вторую команду Funnel с помощью `--https=8443 8766` и запустите `wa` с `--port 8766`. Используйте второй источник воронки с `:8443` для `--public-url` `wa` и для адреса его соединителя, заканчивающегося на `/mcp`. Используйте команду Tailscale вашей системы сверху для второй команды Funnel. Funnel поддерживает общедоступные порты `443`, `8443` и `10000` ([Справочник по командам Funnel](https://tailscale.com/docs/reference/tailscale-cli/funnel)).

## Приемник вебхука для бота [#приемник-вебхука-для-бота]

Номер WhatsApp Business в Cloud API получает сообщения только с помощью веб-перехватчика, поэтому его получатель публикуется таким же образом ([номер WhatsApp Business в качестве бота](/llms.mdx/docs/ru/wa/bot/content.md)). `wa <profile> bot watch --public-url` прослушивает локальный `8766`. С помощью Funnel опубликуйте его на общедоступном порту, который не использует сервер MCP, например `10000`:

```sh
tailscale funnel --bg --https=10000 8766
wa cloudtest bot watch --public-url https://<name>.ts.net:10000
```

Сначала запустите `tailscale funnel status`, чтобы увидеть, какие общедоступные порты заняты. С именованным туннелем Cloudflare добавьте второе общедоступное имя хоста, локальная служба которого — `http://127.0.0.1:8766`. Введите тот же источник, что и URL-адрес обратного вызова на панели управления приложения Meta. Получатель сохраняет только сообщения с корректной подписью приложения.

## Альтернатива: туннель Cloudflare [#альтернатива-туннель-cloudflare]

Если вы уже используете Cloudflare, направьте его туннель на тот же локальный сервер MCP. Для фиксированного имени хоста требуется аккаунт Cloudflare и домен в Cloudflare. Следуйте [настройке именованного туннеля](https://developers.cloudflare.com/tunnel/get-started/): установите `cloudflared` для своей системы, создайте туннель на панели управления, запустите его соединитель и добавьте общедоступное имя хоста, например `mcp.example.com`. Установите для локальной службы значение `http://127.0.0.1:8765` и запустите MCP на этом же компьютере.

Запустите сервер во втором терминале:

```sh
wa personal mcp --http --port 8765 --public-url https://mcp.example.com
```

Добавьте `https://mcp.example.com/mcp` в свое приложение ИИ с помощью OAuth и DCR, как описано в разделе [подключение приложения](#connect-the-app). `--public-url` — это общедоступный источник, используемый для входа в систему, а не локальный адрес и не путь `/mcp`. Туннель не меняет разрешения профиля. Проверьте JSON по адресу `https://mcp.example.com/.well-known/oauth-protected-resource/mcp`, затем войдите в систему и просмотрите список инструментов.

**Временный быстрый туннель не работает.** `cloudflared tunnel --url http://127.0.0.1:8765` предоставляет случайный адрес `trycloudflare.com` без аккаунта или домена, но [быстрые туннели не поддерживают SSE](https://developers.cloudflare.com/tunnel/get-started/quick-tunnels/) (события, отправляемые сервером, то есть способ передачи ответов HTTP-сервера MCP). Выберите «Воронка» или именованный туннель.

## Подключите приложение [#подключите-приложение]

Адрес приложения — это источник вашего туннеля с `/mcp` в конце, например `https://<device>.<network>.ts.net/mcp`. Добавьте его как удаленный разъем MCP:

* **ChatGPT или веб-сайт Codex:** откройте **Плагины**, выберите **+ Добавить пользовательский сервер MCP** и создайте плагин с
  Адрес `/mcp` и OAuth, как описано в [Руководстве по подключению OpenAI](https://developers.openai.com/plugins/quickstart). Подключитесь, используя код доступа, установите плагин и включите его в чате (или упомяните его с помощью `@`). Выберите динамическую регистрацию клиента (DCR), если она предлагается; сервер поддерживает DCR и вызов кода S256, который требуется [требованиями OpenAI OAuth](https://developers.openai.com/plugins/build/auth).
* **Claude:** добавьте специальный соединитель с этим адресом, как описано в разделе [Пользовательские соединители Claudeа](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp). В настройках коннектора вы также можете установить для каждого инструмента статус «всегда разрешен», «требует одобрения» или «блокирован».

Эти три инструмента работают без подсказок, ресурсов или запросов MCP (вопросов, которые сервер задает приложению), поэтому приложения, поддерживающие только инструменты, могут их использовать.

Приложение открывает страницу входа в систему `wa`. Проверьте строку, в которой указано, куда идет вход в систему: это должно быть приложение, к которому вы подключаетесь, например `chatgpt.com` или `claude.ai`. Затем введите код доступа со своего терминала. Срок действия кода истекает через десять минут; новый код печатается после каждого входа в систему. Пять неправильных кодов останавливают вход в систему на 30 секунд; после этого печатается новый код.

Приложение остается в системе до тех пор, пока оно использует соединение хотя бы раз в 30 дней; он сам обновляет свой логин. Через 30 дней без использования просит новый код.

## Разрешения для этого серверного процесса [#разрешения-для-этого-серверного-процесса]

Сервер не может видеть, спрашивало ли вас приложение перед вызовом инструмента. Если приложение всегда разрешает использование инструмента, следующий вызов может пройти без нового вопроса.

`permissions` профиля определяет, что может делать приложение. Повторите `--permission key=level`, чтобы сузить их только для этого серверного процесса: `--permission messages.send=readonly` прекращает отправку. Он никогда не ослабляется: переопределение, которое дает больше, чем профиль — от `readonly` до `allow`, `deny` к чему угодно — останавливает сервер при запуске с `validation_error`, называющим ключ. При переопределении сохраненная конфигурация, список получателей и почасовой лимит остаются без изменений. Чтобы приложение могло отправлять сообщения из профиля, доступного только для чтения, сначала измените профиль: `wa personal config set permissions.messages.send allow`. Ключи разрешений находятся на странице [разрешения](/llms.mdx/docs/ru/wa/permissions/content.md).

## Остановить или отозвать доступ [#остановить-или-отозвать-доступ]

Нажмите Ctrl-C в обоих окнах терминала, чтобы остановить сервер и этот туннель. Запустите их снова теми же командами; входы в приложения сохраняются при обычном перезапуске сервера. Остановка сервера также разрывает соединение устройства, поэтому `serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve") может запуститься снова.

Если вы запустили Funnel с помощью `--bg`, сочетание ключей Ctrl-C не остановит этот фоновый маршрут. Проверьте `tailscale funnel status` и отключите только его публичный порт, например `tailscale funnel --https=443 off`. Не используйте `funnel reset`, когда другой сервер использует Funnel: он очищает все маршруты.

Отзыв доступа приложений отличается от остановки процесса. Чтобы выйти из каждого приложения для профиля:

```sh
wa personal mcp --revoke --json
```

Эти приложения должны снова войти в систему с новым кодом. Это не отключает устройство от WhatsApp.

## Если не работает [#если-не-работает]

* **Приложение сообщает, что не может подключиться:** откройте `https://<device>.<network>.ts.net/.well-known/oauth-protected-resource/mcp` в браузере. Он должен отображать короткий JSON. Если этого не происходит, значит, Funnel не запущен, не включен в вашей сети Tailscale или указывает на другой порт.
* **На странице входа отображается сообщение «Слишком много неправильных кодов»:** после пяти неправильных кодов происходит ожидание 30 секунд, затем терминал показывает новый код. Если вы их не вводили, значит кто-то нашел ваш адрес: остановите сервер и подумайте о новом имени устройства в Tailscale.
* **Приложение подключается, но инструментов нет:** `wa personal mcp check` проверяет, запускается ли сервер MCP, и выводит список его инструментов. Он не проверяет ссылку на WhatsApp или туннель; `wa personal doctor` считывает состояние устройства.
* **Чтение работает, запись не работает:** HTTP-сервер не проходит через `serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve"), поэтому запись отклоняется во время работы `serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve"); ошибка называет это. В противном случае проверьте разрешения профиля и любые переопределения `--permission`: уровни `deny` и `readonly` запрещают изменения независимо от одобрения приложения.
* **Нужен журнал вызовов инструментов:** `wa personal runs list` показывает их. Успешные вызовы появляются только при включенной записи; неудавшиеся вызовы сохраняются по умолчанию, если только запись не была отключена с помощью `"record": false` или `--no-record` ([диагностика](/llms.mdx/docs/ru/wa/diagnostics/content.md)).
