sidebar_position: 15 lang: ru
Обратный вызов WeCom (собственное приложение)
Подключите Hermes к WeCom (Enterprise WeChat) как самостоятельно созданному корпоративному приложению, используя модель обратного вызова/веб-перехватчика.
ℹ️ Info
WeCom Bot против WeCom Callback Hermes поддерживает два режима интеграции WeCom: - **[WeCom Bot](wecom.md)** — стиль бота, подключается через WebSocket. Более простая настройка, работает в групповых чатах. - **WeCom Callback** (эта страница) — собственное приложение, получающее зашифрованные обратные вызовы XML. Отображается как первоклассное приложение на боковой панели пользователей WeCom. Поддерживает маршрутизацию между несколькими корпорациями.Как это работает
- Вы регистрируете самостоятельно созданное приложение в консоли администратора WeCom.
- WeCom отправляет зашифрованный XML в конечную точку обратного вызова HTTP.
- Гермес расшифровывает сообщение и ставит его в очередь для агента.
- Немедленное подтверждение (без звука — пользователю ничего не отображается)
- Агент обрабатывает запрос (обычно 3–30 минут).
- Ответ доставляется заранее через API WeCom
message/send.
Предварительные условия
- Корпоративная учетная запись WeCom с доступом администратора.
- Пакеты
aiohttpиhttpxPython (включены в установку по умолчанию) — Общедоступный сервер для URL-адреса обратного вызова (или туннель, например ngrok).
Настройка
1. Создайте самостоятельно созданное приложение в WeCom
- Перейдите в Консоль администратора WeCom → Приложения → Создать приложение.
- Запишите свой Корпоративный идентификатор (отображается в верхней части консоли администратора).
- В настройках приложения создайте Корпоративную тайну.
- Обратите внимание на Идентификатор агента на странице обзора приложения.
- В разделе Получение сообщений настройте URL-адрес обратного вызова:
- URL-адрес:
http://YOUR_PUBLIC_IP:8645/wecom/callback - Token: Generate a random token (WeCom provides one)
- EncodingAESKey: Generate a key (WeCom provides one)
2. Configure Environment Variables
Add to your .env file:
WECOM_CALLBACK_CORP_ID=your-corp-id
WECOM_CALLBACK_CORP_SECRET=your-corp-secret
WECOM_CALLBACK_AGENT_ID=1000002
WECOM_CALLBACK_TOKEN=your-callback-token
WECOM_CALLBACK_ENCODING_AES_KEY=your-43-char-aes-key
# Optional
WECOM_CALLBACK_HOST=0.0.0.0
WECOM_CALLBACK_PORT=8645
WECOM_CALLBACK_ALLOWED_USERS=user1,user2
3. Start the Gateway
hermes gateway
(Use hermesшлюз start only after hermesшлюз install has registered the systemd/launchd service.)
The callback adapter starts an HTTP server on the configured port. WeCom will verify the callback URL via a GET request, then begin sending messages via POST.
Configuration Reference
Set these in config.yaml under platforms.wecom_callback.extra, or use environment variables:
| Setting | Default | Description |
|---|---|---|
corp_id |
— | WeCom enterprise Corp ID (required) |
corp_se cret |
— | Corp secret for the self-built app (required) |
agent_id |
— | Agent ID of the self-built app (required) |
token |
— | Callback verification token (required) |
encoding_aes_key |
— | 43-character AES key for callback encryption (required) |
host |
0.0.0.0@@IC0015@ @port |
8645 |
path |
/wecom/callback |
URL path for the callback endpoint |
Multi-App Routing
For enterprises running multiple self-built apps (e.g., across different departments or subsidiaries), configure the apps list in config.yaml@@IC0021@ @corp_id:user_id to prevent cross-corp collisions. When a user sends a message, the adapter records which app (corp) they belong to and routes replies through the correct app's access token.
Access Control
Restrict which users can interact with the app:
# Allowlist specific users
WECOM_CALLBACK_ALLOWED_USERS=zhangsan,lisi,wangwu
# Or allow all users
WECOM_CALLBACK_ALLOW_ALL_USERS=true
Endpoints
The adapter exposes:
| Method | Path | Purpose |
|---|---|---|
| GET | /wecom/callback |
URL verification handshake (WeCom sends this during setup) |
| POST | /wecom/callback |
Encrypted message callback (WeCom sends user messages here) |
| GET | /health |
Health check — returns {"статус": "ок"} |
Шифрование
Все полезные данные обратного вызова шифруются с помощью AES-CBC с использованием EncodingAESKey. Адаптер обрабатывает:
- Входящие: расшифровка полезных данных XML, проверка подписи SHA1.
- Исходящие: ответы отправляются через упреждающий API (не зашифрованный ответ обратного вызова).
Реализация шифрования совместима с официальным SDK WXBizMsgCrypt от Tencent.
Ограничения
- Нет потоковой передачи — ответы приходят в виде полных сообщений после завершения работы агента.
- Нет индикаторов ввода — модель обратного вызова не поддерживает статус ввода.
- Только текст — в настоящее время поддерживается ввод текстовых сообщений; ввод изображения/файла/голоса еще не реализован. Агент знает о возможностях исходящего мультимедиа через подсказку платформы WeCom (изображения, документы, видео, голос).
- Задержка ответа — сеансы агента занимают 3–30 минут; пользователи видят ответ после завершения обработки