mirror of
https://github.com/sipeed/picoclaw.git
synced 2026-06-12 18:08:54 +00:00
docs(wecom): add fr/ja/pt-br/vi translations for unified WeCom channel docs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
> Retour au [README](../../../README.fr.md)
|
||||
|
||||
# WeCom
|
||||
|
||||
PicoClaw expose WeCom en tant que canal unique `channels.wecom`, basé sur l'API WebSocket officielle WeCom AI Bot.
|
||||
Ce canal remplace l'ancienne séparation `wecom`, `wecom_app` et `wecom_aibot` par un modèle de configuration unifié.
|
||||
|
||||
> Aucune URL de callback webhook publique n'est requise. PicoClaw établit une connexion WebSocket sortante vers WeCom.
|
||||
|
||||
## Fonctionnalités prises en charge
|
||||
|
||||
- Chat privé et chat de groupe
|
||||
- Réponses en streaming côté canal via le protocole WeCom AI Bot
|
||||
- Messages entrants : texte, voix, image, fichier, vidéo et messages mixtes
|
||||
- Réponses sortantes : texte et médias (`image`, `file`, `voice`, `video`)
|
||||
- Onboarding par QR code via l'interface Web ou le CLI
|
||||
- Liste blanche partagée et routage `reasoning_channel_id`
|
||||
|
||||
---
|
||||
|
||||
## Démarrage rapide
|
||||
|
||||
### Option 1 : Liaison QR via l'interface Web (recommandé)
|
||||
|
||||
Ouvrez l'interface Web, accédez à **Channels → WeCom** et cliquez sur le bouton de liaison QR. Scannez le QR code avec WeCom et confirmez dans l'application — les identifiants sont enregistrés automatiquement.
|
||||
|
||||
<p align="center">
|
||||
<img src="../../../assets/wecom-qr-binding.jpg" alt="Liaison QR WeCom dans l'interface Web" width="600">
|
||||
</p>
|
||||
|
||||
### Option 2 : Connexion QR via le CLI
|
||||
|
||||
Exécutez :
|
||||
|
||||
```bash
|
||||
picoclaw auth wecom
|
||||
```
|
||||
|
||||
La commande :
|
||||
1. Demande un QR code à WeCom et l'affiche dans le terminal
|
||||
2. Affiche également un **lien QR code** que vous pouvez ouvrir dans un navigateur si le QR du terminal est difficile à scanner
|
||||
3. Attend la confirmation — après le scan, vous devez également **confirmer la connexion dans l'application WeCom**
|
||||
4. En cas de succès, écrit `bot_id` et `secret` dans `channels.wecom` et sauvegarde la configuration
|
||||
|
||||
Le délai d'expiration par défaut est de **5 minutes**. Utilisez `--timeout` pour l'étendre :
|
||||
|
||||
```bash
|
||||
picoclaw auth wecom --timeout 10m
|
||||
```
|
||||
|
||||
> ⚠️ Scanner le QR code ne suffit pas — vous devez également appuyer sur **Confirmer** dans l'application WeCom, sinon la commande expirera.
|
||||
|
||||
### Option 3 : Configuration manuelle
|
||||
|
||||
Si vous disposez déjà d'un `bot_id` et d'un `secret` depuis la plateforme WeCom AI Bot, configurez directement :
|
||||
|
||||
```json
|
||||
{
|
||||
"channels": {
|
||||
"wecom": {
|
||||
"enabled": true,
|
||||
"bot_id": "YOUR_BOT_ID",
|
||||
"secret": "YOUR_SECRET",
|
||||
"websocket_url": "wss://openws.work.weixin.qq.com",
|
||||
"send_thinking_message": true,
|
||||
"allow_from": [],
|
||||
"reasoning_channel_id": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Configuration
|
||||
|
||||
| Champ | Type | Défaut | Description |
|
||||
| ----- | ---- | ------ | ----------- |
|
||||
| `enabled` | bool | `false` | Activer le canal WeCom. |
|
||||
| `bot_id` | string | — | Identifiant WeCom AI Bot. Requis lorsque le canal est activé. |
|
||||
| `secret` | string | — | Secret WeCom AI Bot. Stocké chiffré dans `.security.yml`. Requis lorsque le canal est activé. |
|
||||
| `websocket_url` | string | `wss://openws.work.weixin.qq.com` | Point de terminaison WebSocket WeCom. |
|
||||
| `send_thinking_message` | bool | `true` | Envoyer un message `Processing...` avant le début de la réponse en streaming. |
|
||||
| `allow_from` | array | `[]` | Liste blanche des expéditeurs. Vide signifie autoriser tous les expéditeurs. |
|
||||
| `reasoning_channel_id` | string | `""` | ID de chat optionnel pour router la sortie de raisonnement vers une conversation séparée. |
|
||||
|
||||
### Variables d'environnement
|
||||
|
||||
Tous les champs peuvent être remplacés par des variables d'environnement avec le préfixe `PICOCLAW_CHANNELS_WECOM_` :
|
||||
|
||||
| Variable d'environnement | Champ correspondant |
|
||||
| ------------------------ | ------------------- |
|
||||
| `PICOCLAW_CHANNELS_WECOM_ENABLED` | `enabled` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_BOT_ID` | `bot_id` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_SECRET` | `secret` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_WEBSOCKET_URL` | `websocket_url` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_SEND_THINKING_MESSAGE` | `send_thinking_message` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_ALLOW_FROM` | `allow_from` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_REASONING_CHANNEL_ID` | `reasoning_channel_id` |
|
||||
|
||||
---
|
||||
|
||||
## Comportement à l'exécution
|
||||
|
||||
- PicoClaw maintient un tour WeCom actif pour que les réponses en streaming puissent continuer sur le même flux lorsque c'est possible.
|
||||
- Les réponses en streaming ont une durée maximale de **5,5 minutes** et un intervalle d'envoi minimum de **500 ms**.
|
||||
- Si le streaming n'est plus disponible, les réponses basculent vers la livraison par push actif.
|
||||
- Les associations de routes de chat expirent après **30 minutes** d'inactivité.
|
||||
- Les médias entrants sont téléchargés dans le stockage média local avant d'être transmis à l'agent.
|
||||
- Les médias sortants sont uploadés vers WeCom en tant que fichier temporaire, puis envoyés comme message média.
|
||||
- Les messages en double sont détectés et supprimés (tampon circulaire des 1000 derniers identifiants de messages).
|
||||
|
||||
---
|
||||
|
||||
## Migration depuis l'ancienne configuration WeCom
|
||||
|
||||
| Configuration précédente | Migration |
|
||||
| ------------------------ | --------- |
|
||||
| `channels.wecom` (bot webhook) | Remplacer par `channels.wecom` avec `bot_id` + `secret`. |
|
||||
| `channels.wecom_app` | Supprimer. Utiliser `channels.wecom` à la place. |
|
||||
| `channels.wecom_aibot` | Déplacer `bot_id` et `secret` vers `channels.wecom`. |
|
||||
| `token`, `encoding_aes_key`, `webhook_url`, `webhook_path` | Plus utilisés. Supprimer de la configuration. |
|
||||
| `corp_id`, `corp_secret`, `agent_id` | Plus utilisés. Supprimer de la configuration. |
|
||||
| `welcome_message`, `processing_message`, `max_steps` | Ne font plus partie de la configuration du canal WeCom. |
|
||||
|
||||
---
|
||||
|
||||
## Dépannage
|
||||
|
||||
### La liaison QR expire
|
||||
|
||||
- Après avoir scanné le QR code, vous devez également **confirmer la connexion dans l'application WeCom**. Le scan seul ne suffit pas.
|
||||
- Relancez avec un `--timeout` plus long : `picoclaw auth wecom --timeout 10m`
|
||||
- Si le QR code dans le terminal est difficile à scanner, utilisez le **lien QR code** affiché en dessous pour l'ouvrir dans un navigateur.
|
||||
|
||||
### QR code expiré
|
||||
|
||||
- Le QR code a une durée de validité limitée. Relancez `picoclaw auth wecom` pour en obtenir un nouveau.
|
||||
|
||||
### Échec de la connexion WebSocket
|
||||
|
||||
- Vérifiez que `bot_id` et `secret` sont corrects.
|
||||
- Confirmez que l'hôte peut atteindre `wss://openws.work.weixin.qq.com` (WebSocket sortant, aucun port entrant nécessaire).
|
||||
|
||||
### Les réponses n'arrivent pas
|
||||
|
||||
- Vérifiez si `allow_from` bloque l'expéditeur.
|
||||
- Vérifiez que `channels.wecom.bot_id` et `channels.wecom.secret` sont définis et non vides.
|
||||
@@ -0,0 +1,148 @@
|
||||
> [README](../../../README.ja.md) に戻る
|
||||
|
||||
# WeCom
|
||||
|
||||
PicoClaw は WeCom を公式 WeCom AI Bot WebSocket API に基づく単一の `channels.wecom` チャンネルとして公開します。
|
||||
従来の `wecom`、`wecom_app`、`wecom_aibot` の分割を統一された設定モデルに置き換えました。
|
||||
|
||||
> パブリックな Webhook コールバック URL は不要です。PicoClaw は WeCom へのアウトバウンド WebSocket 接続を確立します。
|
||||
|
||||
## サポートされる機能
|
||||
|
||||
- ダイレクトチャットとグループチャット
|
||||
- WeCom AI Bot プロトコルによるチャンネル側ストリーミング返信
|
||||
- テキスト、音声、画像、ファイル、動画、ミックスメッセージの受信
|
||||
- テキストおよびメディア返信の送信(`image`、`file`、`voice`、`video`)
|
||||
- Web UI または CLI による QR コードオンボーディング
|
||||
- 共有許可リストと `reasoning_channel_id` ルーティング
|
||||
|
||||
---
|
||||
|
||||
## クイックスタート
|
||||
|
||||
### オプション 1:Web UI QR バインディング(推奨)
|
||||
|
||||
Web UI を開き、**Channels → WeCom** に移動して、QR バインディングボタンをクリックします。WeCom で QR コードをスキャンし、アプリ内で確認すると、認証情報が自動的に保存されます。
|
||||
|
||||
<p align="center">
|
||||
<img src="../../../assets/wecom-qr-binding.jpg" alt="Web UI での WeCom QR バインディング" width="600">
|
||||
</p>
|
||||
|
||||
### オプション 2:CLI QR ログイン
|
||||
|
||||
実行:
|
||||
|
||||
```bash
|
||||
picoclaw auth wecom
|
||||
```
|
||||
|
||||
コマンドの動作:
|
||||
1. WeCom に QR コードをリクエストし、ターミナルに表示します
|
||||
2. ターミナルの QR コードがスキャンしにくい場合に備え、ブラウザで開ける **QR コードリンク** も表示します
|
||||
3. 確認をポーリングします — スキャン後、**WeCom アプリ内でログインを確認** する必要があります
|
||||
4. 成功すると、`bot_id` と `secret` を `channels.wecom` に書き込み、設定を保存します
|
||||
|
||||
デフォルトのタイムアウトは **5 分** です。`--timeout` で延長できます:
|
||||
|
||||
```bash
|
||||
picoclaw auth wecom --timeout 10m
|
||||
```
|
||||
|
||||
> ⚠️ QR コードのスキャンだけでは不十分です — WeCom アプリ内で **確認** をタップする必要があります。そうしないとコマンドがタイムアウトします。
|
||||
|
||||
### オプション 3:手動設定
|
||||
|
||||
WeCom AI Bot プラットフォームから `bot_id` と `secret` を既にお持ちの場合、直接設定できます:
|
||||
|
||||
```json
|
||||
{
|
||||
"channels": {
|
||||
"wecom": {
|
||||
"enabled": true,
|
||||
"bot_id": "YOUR_BOT_ID",
|
||||
"secret": "YOUR_SECRET",
|
||||
"websocket_url": "wss://openws.work.weixin.qq.com",
|
||||
"send_thinking_message": true,
|
||||
"allow_from": [],
|
||||
"reasoning_channel_id": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 設定
|
||||
|
||||
| フィールド | 型 | デフォルト | 説明 |
|
||||
| ---------- | -- | ---------- | ---- |
|
||||
| `enabled` | bool | `false` | WeCom チャンネルを有効にする。 |
|
||||
| `bot_id` | string | — | WeCom AI Bot 識別子。有効時に必須。 |
|
||||
| `secret` | string | — | WeCom AI Bot シークレット。`.security.yml` に暗号化して保存。有効時に必須。 |
|
||||
| `websocket_url` | string | `wss://openws.work.weixin.qq.com` | WeCom WebSocket エンドポイント。 |
|
||||
| `send_thinking_message` | bool | `true` | ストリーミング返信の開始前に `Processing...` メッセージを送信する。 |
|
||||
| `allow_from` | array | `[]` | 送信者許可リスト。空の場合はすべての送信者を許可。 |
|
||||
| `reasoning_channel_id` | string | `""` | 推論・思考出力を別の会話にルーティングするためのオプションのチャット ID。 |
|
||||
|
||||
### 環境変数
|
||||
|
||||
すべてのフィールドは `PICOCLAW_CHANNELS_WECOM_` プレフィックスの環境変数で上書きできます:
|
||||
|
||||
| 環境変数 | 対応フィールド |
|
||||
| -------- | -------------- |
|
||||
| `PICOCLAW_CHANNELS_WECOM_ENABLED` | `enabled` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_BOT_ID` | `bot_id` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_SECRET` | `secret` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_WEBSOCKET_URL` | `websocket_url` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_SEND_THINKING_MESSAGE` | `send_thinking_message` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_ALLOW_FROM` | `allow_from` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_REASONING_CHANNEL_ID` | `reasoning_channel_id` |
|
||||
|
||||
---
|
||||
|
||||
## ランタイム動作
|
||||
|
||||
- PicoClaw はアクティブな WeCom ターンを維持し、可能な限り同じストリームでストリーミング返信を継続します。
|
||||
- ストリーミング返信の最大持続時間は **5.5 分**、最小送信間隔は **500ms** です。
|
||||
- ストリーミングが利用できなくなった場合、返信はアクティブプッシュ配信にフォールバックします。
|
||||
- チャットルートの関連付けは **30 分** の非アクティブ後に期限切れになります。
|
||||
- 受信メディアはエージェントに渡される前にローカルメディアストアにダウンロードされます。
|
||||
- 送信メディアは WeCom に一時ファイルとしてアップロードされ、メディアメッセージとして送信されます。
|
||||
- 重複メッセージは検出され抑制されます(最新 1000 件のメッセージ ID のリングバッファ)。
|
||||
|
||||
---
|
||||
|
||||
## レガシー WeCom 設定からの移行
|
||||
|
||||
| 以前の設定 | 移行方法 |
|
||||
| ---------- | -------- |
|
||||
| `channels.wecom`(Webhook ボット) | `bot_id` + `secret` を使用する `channels.wecom` に置き換える。 |
|
||||
| `channels.wecom_app` | 削除して `channels.wecom` を使用する。 |
|
||||
| `channels.wecom_aibot` | `bot_id` と `secret` を `channels.wecom` に移動する。 |
|
||||
| `token`、`encoding_aes_key`、`webhook_url`、`webhook_path` | 使用されなくなりました。設定から削除してください。 |
|
||||
| `corp_id`、`corp_secret`、`agent_id` | 使用されなくなりました。設定から削除してください。 |
|
||||
| `welcome_message`、`processing_message`、`max_steps` | WeCom チャンネル設定の一部ではなくなりました。 |
|
||||
|
||||
---
|
||||
|
||||
## トラブルシューティング
|
||||
|
||||
### QR バインディングがタイムアウトする
|
||||
|
||||
- QR コードをスキャンした後、**WeCom アプリ内でログインを確認** する必要があります。スキャンだけでは不十分です。
|
||||
- より長い `--timeout` で再実行してください:`picoclaw auth wecom --timeout 10m`
|
||||
- ターミナルの QR コードがスキャンしにくい場合は、その下に表示される **QR コードリンク** を使用してブラウザで開いてください。
|
||||
|
||||
### QR コードの有効期限切れ
|
||||
|
||||
- QR コードには有効期限があります。`picoclaw auth wecom` を再実行して新しいものを取得してください。
|
||||
|
||||
### WebSocket 接続の失敗
|
||||
|
||||
- `bot_id` と `secret` が正しいことを確認してください。
|
||||
- ホストが `wss://openws.work.weixin.qq.com` に到達できることを確認してください(アウトバウンド WebSocket、インバウンドポートは不要)。
|
||||
|
||||
### 返信が届かない
|
||||
|
||||
- `allow_from` が送信者をブロックしていないか確認してください。
|
||||
- `channels.wecom.bot_id` と `channels.wecom.secret` が設定されており、空でないことを確認してください。
|
||||
@@ -0,0 +1,148 @@
|
||||
> Voltar ao [README](../../../README.pt-br.md)
|
||||
|
||||
# WeCom
|
||||
|
||||
O PicoClaw expõe o WeCom como um único canal `channels.wecom`, construído sobre a API WebSocket oficial do WeCom AI Bot.
|
||||
Isso substitui a antiga separação `wecom`, `wecom_app` e `wecom_aibot` por um modelo de configuração unificado.
|
||||
|
||||
> Nenhuma URL de callback webhook pública é necessária. O PicoClaw estabelece uma conexão WebSocket de saída para o WeCom.
|
||||
|
||||
## Funcionalidades Suportadas
|
||||
|
||||
- Chat direto e chat em grupo
|
||||
- Respostas em streaming pelo protocolo WeCom AI Bot
|
||||
- Mensagens recebidas: texto, voz, imagem, arquivo, vídeo e mensagens mistas
|
||||
- Respostas enviadas: texto e mídia (`image`, `file`, `voice`, `video`)
|
||||
- Onboarding por QR code via Web UI ou CLI
|
||||
- Lista de permissões compartilhada e roteamento `reasoning_channel_id`
|
||||
|
||||
---
|
||||
|
||||
## Início Rápido
|
||||
|
||||
### Opção 1: Vinculação QR via Web UI (Recomendado)
|
||||
|
||||
Abra a Web UI, navegue até **Channels → WeCom** e clique no botão de vinculação QR. Escaneie o QR code com o WeCom e confirme no aplicativo — as credenciais são salvas automaticamente.
|
||||
|
||||
<p align="center">
|
||||
<img src="../../../assets/wecom-qr-binding.jpg" alt="Vinculação QR do WeCom na Web UI" width="600">
|
||||
</p>
|
||||
|
||||
### Opção 2: Login QR via CLI
|
||||
|
||||
Execute:
|
||||
|
||||
```bash
|
||||
picoclaw auth wecom
|
||||
```
|
||||
|
||||
O comando:
|
||||
1. Solicita um QR code ao WeCom e o exibe no terminal
|
||||
2. Também exibe um **Link do QR Code** que você pode abrir no navegador se o QR do terminal for difícil de escanear
|
||||
3. Aguarda a confirmação — após escanear, você também deve **confirmar o login dentro do aplicativo WeCom**
|
||||
4. Em caso de sucesso, grava `bot_id` e `secret` em `channels.wecom` e salva a configuração
|
||||
|
||||
O timeout padrão é de **5 minutos**. Use `--timeout` para estendê-lo:
|
||||
|
||||
```bash
|
||||
picoclaw auth wecom --timeout 10m
|
||||
```
|
||||
|
||||
> ⚠️ Escanear o QR code não é suficiente — você também deve tocar em **Confirmar** dentro do aplicativo WeCom, caso contrário o comando expirará.
|
||||
|
||||
### Opção 3: Configuração Manual
|
||||
|
||||
Se você já possui um `bot_id` e `secret` da plataforma WeCom AI Bot, configure diretamente:
|
||||
|
||||
```json
|
||||
{
|
||||
"channels": {
|
||||
"wecom": {
|
||||
"enabled": true,
|
||||
"bot_id": "YOUR_BOT_ID",
|
||||
"secret": "YOUR_SECRET",
|
||||
"websocket_url": "wss://openws.work.weixin.qq.com",
|
||||
"send_thinking_message": true,
|
||||
"allow_from": [],
|
||||
"reasoning_channel_id": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Configuração
|
||||
|
||||
| Campo | Tipo | Padrão | Descrição |
|
||||
| ----- | ---- | ------ | --------- |
|
||||
| `enabled` | bool | `false` | Ativar o canal WeCom. |
|
||||
| `bot_id` | string | — | Identificador do WeCom AI Bot. Obrigatório quando ativado. |
|
||||
| `secret` | string | — | Secret do WeCom AI Bot. Armazenado criptografado em `.security.yml`. Obrigatório quando ativado. |
|
||||
| `websocket_url` | string | `wss://openws.work.weixin.qq.com` | Endpoint WebSocket do WeCom. |
|
||||
| `send_thinking_message` | bool | `true` | Enviar uma mensagem `Processing...` antes do início da resposta em streaming. |
|
||||
| `allow_from` | array | `[]` | Lista de permissões de remetentes. Vazio significa permitir todos os remetentes. |
|
||||
| `reasoning_channel_id` | string | `""` | ID de chat opcional para rotear a saída de raciocínio para uma conversa separada. |
|
||||
|
||||
### Variáveis de Ambiente
|
||||
|
||||
Todos os campos podem ser substituídos via variáveis de ambiente com o prefixo `PICOCLAW_CHANNELS_WECOM_`:
|
||||
|
||||
| Variável de Ambiente | Campo Correspondente |
|
||||
| -------------------- | -------------------- |
|
||||
| `PICOCLAW_CHANNELS_WECOM_ENABLED` | `enabled` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_BOT_ID` | `bot_id` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_SECRET` | `secret` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_WEBSOCKET_URL` | `websocket_url` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_SEND_THINKING_MESSAGE` | `send_thinking_message` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_ALLOW_FROM` | `allow_from` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_REASONING_CHANNEL_ID` | `reasoning_channel_id` |
|
||||
|
||||
---
|
||||
|
||||
## Comportamento em Tempo de Execução
|
||||
|
||||
- O PicoClaw mantém um turno WeCom ativo para que as respostas em streaming possam continuar no mesmo fluxo quando possível.
|
||||
- As respostas em streaming têm uma duração máxima de **5,5 minutos** e um intervalo mínimo de envio de **500ms**.
|
||||
- Se o streaming não estiver mais disponível, as respostas recorrem à entrega por push ativo.
|
||||
- As associações de rotas de chat expiram após **30 minutos** de inatividade.
|
||||
- A mídia recebida é baixada para o armazenamento de mídia local antes de ser passada ao agente.
|
||||
- A mídia enviada é carregada para o WeCom como um arquivo temporário e então enviada como uma mensagem de mídia.
|
||||
- Mensagens duplicadas são detectadas e suprimidas (buffer circular dos últimos 1000 IDs de mensagens).
|
||||
|
||||
---
|
||||
|
||||
## Migração da Configuração Legada do WeCom
|
||||
|
||||
| Configuração anterior | Migração |
|
||||
| --------------------- | -------- |
|
||||
| `channels.wecom` (bot webhook) | Substituir por `channels.wecom` usando `bot_id` + `secret`. |
|
||||
| `channels.wecom_app` | Remover. Usar `channels.wecom` no lugar. |
|
||||
| `channels.wecom_aibot` | Mover `bot_id` e `secret` para `channels.wecom`. |
|
||||
| `token`, `encoding_aes_key`, `webhook_url`, `webhook_path` | Não mais utilizados. Remover da configuração. |
|
||||
| `corp_id`, `corp_secret`, `agent_id` | Não mais utilizados. Remover da configuração. |
|
||||
| `welcome_message`, `processing_message`, `max_steps` | Não fazem mais parte da configuração do canal WeCom. |
|
||||
|
||||
---
|
||||
|
||||
## Solução de Problemas
|
||||
|
||||
### A vinculação QR expira
|
||||
|
||||
- Após escanear o QR code, você também deve **confirmar o login dentro do aplicativo WeCom**. Escanear sozinho não é suficiente.
|
||||
- Execute novamente com um `--timeout` maior: `picoclaw auth wecom --timeout 10m`
|
||||
- Se o QR code no terminal for difícil de escanear, use o **Link do QR Code** exibido abaixo dele para abrir no navegador.
|
||||
|
||||
### QR code expirado
|
||||
|
||||
- O QR code tem validade limitada. Execute novamente `picoclaw auth wecom` para obter um novo.
|
||||
|
||||
### Falha na conexão WebSocket
|
||||
|
||||
- Verifique se `bot_id` e `secret` estão corretos.
|
||||
- Confirme que o host pode alcançar `wss://openws.work.weixin.qq.com` (WebSocket de saída, nenhuma porta de entrada necessária).
|
||||
|
||||
### As respostas não chegam
|
||||
|
||||
- Verifique se `allow_from` está bloqueando o remetente.
|
||||
- Verifique se `channels.wecom.bot_id` e `channels.wecom.secret` estão definidos e não vazios.
|
||||
@@ -0,0 +1,148 @@
|
||||
> Quay lại [README](../../../README.vi.md)
|
||||
|
||||
# WeCom
|
||||
|
||||
PicoClaw cung cấp WeCom dưới dạng một kênh duy nhất `channels.wecom`, được xây dựng trên API WebSocket chính thức của WeCom AI Bot.
|
||||
Điều này thay thế việc phân tách cũ `wecom`, `wecom_app` và `wecom_aibot` bằng một mô hình cấu hình thống nhất.
|
||||
|
||||
> Không cần URL callback webhook công khai. PicoClaw thiết lập kết nối WebSocket đi ra tới WeCom.
|
||||
|
||||
## Tính năng được hỗ trợ
|
||||
|
||||
- Chat trực tiếp và chat nhóm
|
||||
- Phản hồi streaming qua giao thức WeCom AI Bot
|
||||
- Nhận tin nhắn văn bản, giọng nói, hình ảnh, tệp, video và tin nhắn hỗn hợp
|
||||
- Gửi phản hồi văn bản và phương tiện (`image`, `file`, `voice`, `video`)
|
||||
- Đăng ký qua mã QR bằng Web UI hoặc CLI
|
||||
- Danh sách cho phép chung và định tuyến `reasoning_channel_id`
|
||||
|
||||
---
|
||||
|
||||
## Bắt đầu nhanh
|
||||
|
||||
### Tùy chọn 1: Liên kết QR qua Web UI (Khuyến nghị)
|
||||
|
||||
Mở Web UI, điều hướng đến **Channels → WeCom** và nhấp vào nút liên kết QR. Quét mã QR bằng WeCom và xác nhận trong ứng dụng — thông tin đăng nhập được lưu tự động.
|
||||
|
||||
<p align="center">
|
||||
<img src="../../../assets/wecom-qr-binding.jpg" alt="Liên kết QR WeCom trong Web UI" width="600">
|
||||
</p>
|
||||
|
||||
### Tùy chọn 2: Đăng nhập QR qua CLI
|
||||
|
||||
Chạy:
|
||||
|
||||
```bash
|
||||
picoclaw auth wecom
|
||||
```
|
||||
|
||||
Lệnh thực hiện:
|
||||
1. Yêu cầu mã QR từ WeCom và hiển thị trong terminal
|
||||
2. Đồng thời in ra một **Liên kết mã QR** mà bạn có thể mở trong trình duyệt nếu mã QR trên terminal khó quét
|
||||
3. Chờ xác nhận — sau khi quét, bạn cũng phải **xác nhận đăng nhập trong ứng dụng WeCom**
|
||||
4. Khi thành công, ghi `bot_id` và `secret` vào `channels.wecom` và lưu cấu hình
|
||||
|
||||
Thời gian chờ mặc định là **5 phút**. Sử dụng `--timeout` để kéo dài:
|
||||
|
||||
```bash
|
||||
picoclaw auth wecom --timeout 10m
|
||||
```
|
||||
|
||||
> ⚠️ Quét mã QR là chưa đủ — bạn cũng phải nhấn **Xác nhận** trong ứng dụng WeCom, nếu không lệnh sẽ hết thời gian chờ.
|
||||
|
||||
### Tùy chọn 3: Cấu hình thủ công
|
||||
|
||||
Nếu bạn đã có `bot_id` và `secret` từ nền tảng WeCom AI Bot, hãy cấu hình trực tiếp:
|
||||
|
||||
```json
|
||||
{
|
||||
"channels": {
|
||||
"wecom": {
|
||||
"enabled": true,
|
||||
"bot_id": "YOUR_BOT_ID",
|
||||
"secret": "YOUR_SECRET",
|
||||
"websocket_url": "wss://openws.work.weixin.qq.com",
|
||||
"send_thinking_message": true,
|
||||
"allow_from": [],
|
||||
"reasoning_channel_id": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Cấu hình
|
||||
|
||||
| Trường | Kiểu | Mặc định | Mô tả |
|
||||
| ------ | ---- | -------- | ----- |
|
||||
| `enabled` | bool | `false` | Kích hoạt kênh WeCom. |
|
||||
| `bot_id` | string | — | Mã định danh WeCom AI Bot. Bắt buộc khi được kích hoạt. |
|
||||
| `secret` | string | — | Secret của WeCom AI Bot. Được lưu mã hóa trong `.security.yml`. Bắt buộc khi được kích hoạt. |
|
||||
| `websocket_url` | string | `wss://openws.work.weixin.qq.com` | Điểm cuối WebSocket của WeCom. |
|
||||
| `send_thinking_message` | bool | `true` | Gửi tin nhắn `Processing...` trước khi phản hồi streaming bắt đầu. |
|
||||
| `allow_from` | array | `[]` | Danh sách cho phép người gửi. Để trống nghĩa là cho phép tất cả. |
|
||||
| `reasoning_channel_id` | string | `""` | ID chat tùy chọn để định tuyến đầu ra suy luận đến một cuộc hội thoại riêng. |
|
||||
|
||||
### Biến môi trường
|
||||
|
||||
Tất cả các trường có thể được ghi đè bằng biến môi trường với tiền tố `PICOCLAW_CHANNELS_WECOM_`:
|
||||
|
||||
| Biến môi trường | Trường tương ứng |
|
||||
| ---------------- | ---------------- |
|
||||
| `PICOCLAW_CHANNELS_WECOM_ENABLED` | `enabled` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_BOT_ID` | `bot_id` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_SECRET` | `secret` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_WEBSOCKET_URL` | `websocket_url` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_SEND_THINKING_MESSAGE` | `send_thinking_message` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_ALLOW_FROM` | `allow_from` |
|
||||
| `PICOCLAW_CHANNELS_WECOM_REASONING_CHANNEL_ID` | `reasoning_channel_id` |
|
||||
|
||||
---
|
||||
|
||||
## Hành vi khi chạy
|
||||
|
||||
- PicoClaw duy trì một lượt WeCom đang hoạt động để phản hồi streaming có thể tiếp tục trên cùng một luồng khi có thể.
|
||||
- Phản hồi streaming có thời lượng tối đa **5,5 phút** và khoảng cách gửi tối thiểu **500ms**.
|
||||
- Nếu streaming không còn khả dụng, phản hồi sẽ chuyển sang gửi push chủ động.
|
||||
- Các liên kết tuyến chat hết hạn sau **30 phút** không hoạt động.
|
||||
- Phương tiện nhận được sẽ được tải xuống bộ lưu trữ phương tiện cục bộ trước khi chuyển cho agent.
|
||||
- Phương tiện gửi đi được tải lên WeCom dưới dạng tệp tạm thời, sau đó gửi dưới dạng tin nhắn phương tiện.
|
||||
- Tin nhắn trùng lặp được phát hiện và loại bỏ (bộ đệm vòng của 1000 ID tin nhắn gần nhất).
|
||||
|
||||
---
|
||||
|
||||
## Di chuyển từ cấu hình WeCom cũ
|
||||
|
||||
| Cấu hình trước đây | Di chuyển |
|
||||
| ------------------- | --------- |
|
||||
| `channels.wecom` (bot webhook) | Thay thế bằng `channels.wecom` sử dụng `bot_id` + `secret`. |
|
||||
| `channels.wecom_app` | Xóa. Sử dụng `channels.wecom` thay thế. |
|
||||
| `channels.wecom_aibot` | Di chuyển `bot_id` và `secret` sang `channels.wecom`. |
|
||||
| `token`, `encoding_aes_key`, `webhook_url`, `webhook_path` | Không còn sử dụng. Xóa khỏi cấu hình. |
|
||||
| `corp_id`, `corp_secret`, `agent_id` | Không còn sử dụng. Xóa khỏi cấu hình. |
|
||||
| `welcome_message`, `processing_message`, `max_steps` | Không còn là một phần của cấu hình kênh WeCom. |
|
||||
|
||||
---
|
||||
|
||||
## Khắc phục sự cố
|
||||
|
||||
### Liên kết QR hết thời gian chờ
|
||||
|
||||
- Sau khi quét mã QR, bạn cũng phải **xác nhận đăng nhập trong ứng dụng WeCom**. Chỉ quét là chưa đủ.
|
||||
- Chạy lại với `--timeout` lớn hơn: `picoclaw auth wecom --timeout 10m`
|
||||
- Nếu mã QR trên terminal khó quét, hãy sử dụng **Liên kết mã QR** được in bên dưới để mở trong trình duyệt.
|
||||
|
||||
### Mã QR đã hết hạn
|
||||
|
||||
- Mã QR có thời hạn hiệu lực giới hạn. Chạy lại `picoclaw auth wecom` để lấy mã mới.
|
||||
|
||||
### Kết nối WebSocket thất bại
|
||||
|
||||
- Kiểm tra xem `bot_id` và `secret` có chính xác không.
|
||||
- Xác nhận máy chủ có thể kết nối đến `wss://openws.work.weixin.qq.com` (WebSocket đi ra, không cần cổng đến).
|
||||
|
||||
### Phản hồi không đến
|
||||
|
||||
- Kiểm tra xem `allow_from` có đang chặn người gửi không.
|
||||
- Kiểm tra rằng `channels.wecom.bot_id` và `channels.wecom.secret` đã được thiết lập và không trống.
|
||||
Reference in New Issue
Block a user