docs(readme): sync Email/WebSocket guided-config sentence to all locales

The English README's "Configure from the Web UI" paragraph gained the
Email/WebSocket guided-channel sentence in the previous commit; mirror it
into the six translated READMEs (zh, ja, ko, ar, es, id) at the same slot
— after the QQ sentence, before the Test-connection sentence — keeping
IMAP/SMTP/TLS/WebSocket/Test connection verbatim. Prose-only; no count or
roster change, so test_readme_counts stays green (108 passed).

Follow-up to #1519 (extends #1520).

Signed-off-by: shadowinlife <shadowinlife@gmail.com>
This commit is contained in:
shadowinlife committed 2026-09-22 15:47:29 +08:00
1 parent de467063fd
commit d4861f36e3
6 files changed
+6 -6

No files matched your search

+1 -1
View File
@@ -1028,7 +1028,7 @@ vibe-trading channels pairing --channel telegram list
الأوامر لا تحس بحالة الأحرف ويجب إرسالها كرسالة كاملة (مثلاً `hello /new` تُعامل كرسالة عادية وليس كأمر إعادة تعيين).
**التكوين من واجهة الويب**: تتيح لوحة **IM Channels** في صفحة Settings ضبط القنوات دون تحرير الملفات يدويًا. افتح قناةً لتظهر لوحة تكوينها: تُرسم الحقول من بيانات وصفية يوفّرها الخادم، ولا تُرسل قيم الأسرار إلى المتصفح أبدًا، بل تظهر مقنّعة (`****` مع آخر 4 محارف). DingTalk هي أول قناة يغطيها دليل إعداد كامل: أنشئ تطبيقًا في [open-dev.dingtalk.com](https://open-dev.dingtalk.com/)، ثم أضف إمكانية الروبوت وفعّل وضع Stream Mode (لا حاجة إلى عنوان callback عام)، وانسخ AppKey إلى Client ID وAppSecret إلى Client Secret، ثم انشر التطبيق. انضمّت QQ إليها كقناة يغطيها دليل إعداد كامل: سجّل روبوتًا في منصة QQ Open Platform ([q.qq.com](https://q.qq.com/))، وانسخ AppID وAppSecret إلى النموذج، وتحقّق عبر **Test connection** قبل الحفظ ثم فعّل؛ لا حاجة إلى عنوان callback عام (WebSocket عبر حزمة botpy الرسمية). يختبر زر **Test connection** قيم النموذج الحالية قبل حفظ أي شيء، ويعيد رمز نتيجة صادقًا (`ok` أو `invalid_credentials` أو `network` أو `unsupported`). يُطبَّق خيار **Enable** فورًا: بيئة تشغيل القنوات القائمة تبدّل هذا المحوّل وحده دون إعادة تشغيل العملية، والتحقق من بيانات الاعتماد يتم تلقائيًا عند التفعيل إلا إذا اخترت صراحةً **Enable anyway** بعد فشل التحقق. الإيقاف يبقي بيانات الاعتماد المخزنة، لذا لا حاجة لإعادة إدخالها عند التفعيل مجددًا. تُعرض هنا المحوّلات المدمجة فقط؛ وتبقى قنوات الإضافات المضافة عبر نقاط الدخول (entry points) قابلة للتهيئة من الملفات فقط.
**التكوين من واجهة الويب**: تتيح لوحة **IM Channels** في صفحة Settings ضبط القنوات دون تحرير الملفات يدويًا. افتح قناةً لتظهر لوحة تكوينها: تُرسم الحقول من بيانات وصفية يوفّرها الخادم، ولا تُرسل قيم الأسرار إلى المتصفح أبدًا، بل تظهر مقنّعة (`****` مع آخر 4 محارف). DingTalk هي أول قناة يغطيها دليل إعداد كامل: أنشئ تطبيقًا في [open-dev.dingtalk.com](https://open-dev.dingtalk.com/)، ثم أضف إمكانية الروبوت وفعّل وضع Stream Mode (لا حاجة إلى عنوان callback عام)، وانسخ AppKey إلى Client ID وAppSecret إلى Client Secret، ثم انشر التطبيق. انضمّت QQ إليها كقناة يغطيها دليل إعداد كامل: سجّل روبوتًا في منصة QQ Open Platform ([q.qq.com](https://q.qq.com/))، وانسخ AppID وAppSecret إلى النموذج، وتحقّق عبر **Test connection** قبل الحفظ ثم فعّل؛ لا حاجة إلى عنوان callback عام (WebSocket عبر حزمة botpy الرسمية). انضمّت Email و WebSocket أيضًا كقناتين يغطيهما دليل إعداد كامل: يختبر **Test connection** لدى Email تسجيل الدخول عبر IMAP ومجلد صندوق البريد وتسجيل الدخول عبر SMTP لدى مزوّد خدمتك دون إرسال أي شيء، بينما يتحقق WebSocket — وهو خادم محلي وليس خدمة عن بُعد — من مواد شهادة/مفتاح TLS ومن توفّر العنوان على هذا الجهاز؛ والعنوان المحتلّ من الخادم قيد التشغيل أصلًا يُقرأ كحالة متوقعة وليس كفشل. يؤدي حفظ إعداد WebSocket إلى تبديل الخادم على الساخن، لذا ينفصل العملاء المتصلون (بما في ذلك محادثة واجهة الويب) لفترة وجيزة ثم يعيدون الاتصال. يختبر زر **Test connection** قيم النموذج الحالية قبل حفظ أي شيء، ويعيد رمز نتيجة صادقًا (`ok` أو `invalid_credentials` أو `network` أو `unsupported`). يُطبَّق خيار **Enable** فورًا: بيئة تشغيل القنوات القائمة تبدّل هذا المحوّل وحده دون إعادة تشغيل العملية، والتحقق من بيانات الاعتماد يتم تلقائيًا عند التفعيل إلا إذا اخترت صراحةً **Enable anyway** بعد فشل التحقق. الإيقاف يبقي بيانات الاعتماد المخزنة، لذا لا حاجة لإعادة إدخالها عند التفعيل مجددًا. تُعرض هنا المحوّلات المدمجة فقط؛ وتبقى قنوات الإضافات المضافة عبر نقاط الدخول (entry points) قابلة للتهيئة من الملفات فقط.
عند الحفظ يُحدَّث قسم `channels.<name>` في `~/.vibe-trading/agent.json` بشكل ذرّي. ملفات إعداد YAML للقراءة فقط في واجهة الويب (التحرير من المتصفح يتطلب JSON)، وتعرض اللوحة هذه الرسالة بدلاً من الفشل. القنوات التي لا تملك دليلًا مخصصًا تعرض نماذج عامة مشتقة من إعداداتها الافتراضية.
+1 -1
View File
@@ -1083,7 +1083,7 @@ Los comandos no distinguen mayúsculas/minúsculas y deben enviarse como el mens
> **`/pairing` está restringido a operadores.** Los comandos de control de emparejamiento dentro del chat se rechazan a menos que el remitente figure como operador — configura `channels.operators` (autoridad entre canales) o la propia lista `operators` de la sección de un canal en tu configuración de canales. Sin operadores configurados, `/pairing` dentro del chat se rechaza (fail-closed) y el emparejamiento solo se gestiona a través de la CLI autenticada (`vibe-trading channels pairing …`) y el endpoint REST protegido por autenticación. Esto evita que cualquier miembro de un grupo en la lista de permitidos pueda tomar control del emparejamiento entre canales.
**Configuración desde la Web UI**: el panel **IM Channels** de la página Settings ahora configura canales sin editar archivos a mano. Despliega un canal para abrir su panel de configuración: los campos se renderizan desde metadatos del backend, y los valores secretos nunca se devuelven al navegador, solo enmascarados (`****` más los últimos 4 caracteres). DingTalk es el primer canal con guía completa: crea una aplicación en [open-dev.dingtalk.com](https://open-dev.dingtalk.com/), agrega la capacidad de bot, habilita Stream Mode (no hace falta una URL de callback pública), copia el AppKey a Client ID y el AppSecret a Client Secret, y publica la aplicación. QQ se suma como canal con guía completa: registra un bot en la QQ Open Platform ([q.qq.com](https://q.qq.com/)), copia el AppID y el AppSecret al formulario, verifica con **Test connection** antes de guardar y habilita; no hace falta una URL de callback pública (WebSocket mediante el SDK oficial botpy). **Test connection** prueba los valores del formulario antes de guardar cualquier cosa y responde con un código honesto (`ok`, `invalid_credentials`, `network` o `unsupported`). **Enable** se aplica de inmediato: un runtime de canales en ejecución intercambia en caliente solo ese adaptador sin reiniciar el proceso, y al habilitar se verifican las credenciales automáticamente salvo que elijas explícitamente **Enable anyway** tras una verificación fallida. Deshabilitar conserva las credenciales almacenadas, así que reactivar no exige volver a escribirlas. Aquí solo se enumeran los adaptadores integrados; los canales de plugins vía entry points siguen configurándose por archivo.
**Configuración desde la Web UI**: el panel **IM Channels** de la página Settings ahora configura canales sin editar archivos a mano. Despliega un canal para abrir su panel de configuración: los campos se renderizan desde metadatos del backend, y los valores secretos nunca se devuelven al navegador, solo enmascarados (`****` más los últimos 4 caracteres). DingTalk es el primer canal con guía completa: crea una aplicación en [open-dev.dingtalk.com](https://open-dev.dingtalk.com/), agrega la capacidad de bot, habilita Stream Mode (no hace falta una URL de callback pública), copia el AppKey a Client ID y el AppSecret a Client Secret, y publica la aplicación. QQ se suma como canal con guía completa: registra un bot en la QQ Open Platform ([q.qq.com](https://q.qq.com/)), copia el AppID y el AppSecret al formulario, verifica con **Test connection** antes de guardar y habilita; no hace falta una URL de callback pública (WebSocket mediante el SDK oficial botpy). Email y WebSocket se suman también como canales con guía completa: **Test connection** de Email prueba el inicio de sesión IMAP, la carpeta del buzón y el inicio de sesión SMTP contra tu proveedor sin enviar nada, mientras que WebSocket —un servidor local en lugar de un servicio remoto— valida el material de certificado/clave TLS y la disponibilidad de la dirección en esta máquina; una dirección ocupada por el servidor ya en ejecución se lee como el estado esperado, no como un fallo. Guardar una configuración de WebSocket intercambia el servidor en caliente, así que los clientes conectados (incluido el chat de la Web UI) se desconectan y reconectan brevemente. **Test connection** prueba los valores del formulario antes de guardar cualquier cosa y responde con un código honesto (`ok`, `invalid_credentials`, `network` o `unsupported`). **Enable** se aplica de inmediato: un runtime de canales en ejecución intercambia en caliente solo ese adaptador sin reiniciar el proceso, y al habilitar se verifican las credenciales automáticamente salvo que elijas explícitamente **Enable anyway** tras una verificación fallida. Deshabilitar conserva las credenciales almacenadas, así que reactivar no exige volver a escribirlas. Aquí solo se enumeran los adaptadores integrados; los canales de plugins vía entry points siguen configurándose por archivo.
Guardar actualiza de forma atómica la sección `channels.<name>` de `~/.vibe-trading/agent.json`. Los archivos YAML son de solo lectura para la web UI (se requiere JSON para editar desde el navegador), y el panel lo indica en lugar de fallar. Los canales sin guía dedicada muestran un formulario genérico derivado de su configuración por defecto.
+1 -1
View File
@@ -1272,7 +1272,7 @@ Perintah tidak peka huruf besar/kecil dan harus dikirim sebagai seluruh isi pesa
> **`/pairing` dibatasi untuk operator.** Perintah kontrol pairing di chat ditolak kecuali sender terdaftar sebagai operator — atur `channels.operators` (otoritas lintas-channel) atau daftar `operators` milik section channel di config Anda. Jika tidak ada operator yang dikonfigurasi, `/pairing` di chat ditolak secara fail-closed dan pairing hanya dikelola melalui CLI terautentikasi (`vibe-trading channels pairing …`) dan endpoint REST yang dilindungi auth. Ini mencegah anggota grup yang hanya di-allowlist mengambil alih pairing antar-channel.
**Konfigurasi dari Web UI**: panel **IM Channels** di halaman Settings mengonfigurasi channel tanpa mengedit file secara manual. Buka sebuah channel untuk melihat panel konfigurasinya: field dirender dari metadata backend, dan nilai secret tidak pernah dikirim kembali ke browser, hanya versi tersamarkan (`****` ditambah 4 karakter terakhir). DingTalk adalah channel pertama dengan panduan lengkap: buat app di [open-dev.dingtalk.com](https://open-dev.dingtalk.com/), tambahkan kemampuan bot, aktifkan Stream Mode (tidak perlu URL callback publik), salin AppKey ke Client ID dan AppSecret ke Client Secret, lalu publikasikan app. QQ menyusul sebagai channel dengan panduan lengkap: daftarkan bot di QQ Open Platform ([q.qq.com](https://q.qq.com/)), salin AppID dan AppSecret ke formulir, verifikasi dengan **Test connection** sebelum menyimpan, lalu aktifkan; tidak perlu URL callback publik (WebSocket melalui SDK resmi botpy). **Test connection** menguji nilai di formulir sebelum apa pun disimpan dan menjawab dengan kode hasil yang jujur (`ok`, `invalid_credentials`, `network`, atau `unsupported`). **Enable** langsung berlaku: runtime channel yang sedang berjalan mengganti adapter tersebut saja tanpa restart proses, dan pengaktifan memverifikasi kredensial secara otomatis kecuali Anda memilih **Enable anyway** setelah pemeriksaan gagal. Menonaktifkan channel tetap menyimpan kredensialnya, sehingga mengaktifkannya kembali tidak perlu mengisi ulang. Hanya adapter bawaan yang tercantum di sini; channel plugin dari entry-points tetap dikonfigurasi lewat file.
**Konfigurasi dari Web UI**: panel **IM Channels** di halaman Settings mengonfigurasi channel tanpa mengedit file secara manual. Buka sebuah channel untuk melihat panel konfigurasinya: field dirender dari metadata backend, dan nilai secret tidak pernah dikirim kembali ke browser, hanya versi tersamarkan (`****` ditambah 4 karakter terakhir). DingTalk adalah channel pertama dengan panduan lengkap: buat app di [open-dev.dingtalk.com](https://open-dev.dingtalk.com/), tambahkan kemampuan bot, aktifkan Stream Mode (tidak perlu URL callback publik), salin AppKey ke Client ID dan AppSecret ke Client Secret, lalu publikasikan app. QQ menyusul sebagai channel dengan panduan lengkap: daftarkan bot di QQ Open Platform ([q.qq.com](https://q.qq.com/)), salin AppID dan AppSecret ke formulir, verifikasi dengan **Test connection** sebelum menyimpan, lalu aktifkan; tidak perlu URL callback publik (WebSocket melalui SDK resmi botpy). Email dan WebSocket telah bergabung sebagai channel dengan panduan lengkap: **Test connection** milik Email menguji login IMAP, folder mailbox, dan login SMTP ke penyedia Anda tanpa mengirim apa pun, sementara WebSocket — sebuah server lokal, bukan layanan jarak jauh — memverifikasi materi sertifikat/kunci TLS dan ketersediaan alamat di mesin ini; alamat yang dipegang oleh server yang sedang berjalan terbaca sebagai kondisi yang diharapkan, bukan kegagalan. Menyimpan konfigurasi WebSocket mengganti server secara hot-swap, sehingga klien yang terhubung (termasuk chat Web UI) terputus sebentar lalu menyambung kembali. **Test connection** menguji nilai di formulir sebelum apa pun disimpan dan menjawab dengan kode hasil yang jujur (`ok`, `invalid_credentials`, `network`, atau `unsupported`). **Enable** langsung berlaku: runtime channel yang sedang berjalan mengganti adapter tersebut saja tanpa restart proses, dan pengaktifan memverifikasi kredensial secara otomatis kecuali Anda memilih **Enable anyway** setelah pemeriksaan gagal. Menonaktifkan channel tetap menyimpan kredensialnya, sehingga mengaktifkannya kembali tidak perlu mengisi ulang. Hanya adapter bawaan yang tercantum di sini; channel plugin dari entry-points tetap dikonfigurasi lewat file.
Penyimpanan menulis section `channels.<name>` di `~/.vibe-trading/agent.json` secara atomik. File konfigurasi YAML bersifat read-only bagi Web UI (edit dari browser memerlukan JSON), dan panel menyatakannya alih-alih gagal. Channel tanpa panduan khusus menampilkan formulir generik yang diturunkan dari default-nya.
+1 -1
View File
@@ -1030,7 +1030,7 @@ Built-in adapters は `websocket`、`telegram`、`slack`、`discord`、`matrix`
コマンドは大文字小文字を区別せず、メッセージ全体として送信する必要があります(例:`hello /new` はリセットではなく通常メッセージとして処理されます)。
**Web UI から設定**: Settings ページの **IM Channels** パネルでは、ファイルを手編集せずにチャンネルを設定できます。チャンネルを展開すると設定パネルが開きます。フィールドはバックエンドのメタデータから描画され、secret の値はブラウザに返されず、マスク表示(`****` +末尾 4 文字)のみです。DingTalk が最初の完全なガイド付きチャンネルです:[open-dev.dingtalk.com](https://open-dev.dingtalk.com/) でアプリを作成し、ボット機能を追加して Stream Mode を有効化(公開コールバック URL 不要)、AppKey を Client ID、AppSecret を Client Secret にコピーしてアプリを公開します。QQ も完全ガイド付きチャンネルになりました:QQ公式プラットフォーム([q.qq.com](https://q.qq.com/))でボットを登録し、AppID と AppSecret をフォームにコピーし、保存前に **Test connection** で検証してから有効化します(公開コールバック URL 不要、公式 botpy SDK による WebSocket 接続)。**Test connection** は保存前にフォームの入力値だけで接続を試み、正直な結果コード(`ok` / `invalid_credentials` / `network` / `unsupported`)を返します。**Enable** は即適用:稼働中の channel runtime はプロセス再起動なしに該当アダプターのみをホットスワップし、有効化時に認証情報を自動検証します(検証失敗後に明示的に **Enable anyway** を選んだ場合のみスキップ)。無効化しても保存済み認証情報は残るため、再有効化時に再入力は不要です。ここには組み込みアダプターのみが表示されます。entry points 経由のプラグインチャンネルは引き続きファイルで設定します。
**Web UI から設定**: Settings ページの **IM Channels** パネルでは、ファイルを手編集せずにチャンネルを設定できます。チャンネルを展開すると設定パネルが開きます。フィールドはバックエンドのメタデータから描画され、secret の値はブラウザに返されず、マスク表示(`****` +末尾 4 文字)のみです。DingTalk が最初の完全なガイド付きチャンネルです:[open-dev.dingtalk.com](https://open-dev.dingtalk.com/) でアプリを作成し、ボット機能を追加して Stream Mode を有効化(公開コールバック URL 不要)、AppKey を Client ID、AppSecret を Client Secret にコピーしてアプリを公開します。QQ も完全ガイド付きチャンネルになりました:QQ公式プラットフォーム([q.qq.com](https://q.qq.com/))でボットを登録し、AppID と AppSecret をフォームにコピーし、保存前に **Test connection** で検証してから有効化します(公開コールバック URL 不要、公式 botpy SDK による WebSocket 接続)。Email と WebSocket も完全ガイド付きチャンネルとして加わりました:Email の **Test connection** は何も送信せずに、IMAP ログイン・メールボックスフォルダ・SMTP ログインをプロバイダーに対して検証し、一方 WebSocket は(リモートサービスではなくローカルサーバーであるため)、このマシン上の TLS 証明書/鍵マテリアルとアドレスの使用可否を検証します。稼働中のサーバーがすでに確保しているアドレスは、失敗ではなく想定された状態として扱われます。WebSocket 設定を保存するとサーバーがホットスワップされるため、接続中のクライアント(Web UI のチャットを含む)は一時切断され、再接続します。**Test connection** は保存前にフォームの入力値だけで接続を試み、正直な結果コード(`ok` / `invalid_credentials` / `network` / `unsupported`)を返します。**Enable** は即適用:稼働中の channel runtime はプロセス再起動なしに該当アダプターのみをホットスワップし、有効化時に認証情報を自動検証します(検証失敗後に明示的に **Enable anyway** を選んだ場合のみスキップ)。無効化しても保存済み認証情報は残るため、再有効化時に再入力は不要です。ここには組み込みアダプターのみが表示されます。entry points 経由のプラグインチャンネルは引き続きファイルで設定します。
保存は `~/.vibe-trading/agent.json` の `channels.<name>` をアトミックに更新します。YAML 設定ファイルは Web UI から読み取り専用です(ブラウザ編集には JSON が必要で、パネルはエラーの代わりにその旨を表示します)。専用ガイドのないチャンネルはデフォルト設定から生成された汎用フォームを描画します。
+1 -1
View File
@@ -1031,7 +1031,7 @@ Built-in adapters는 `websocket`, `telegram`, `slack`, `discord`, `matrix`, `wha
명령어는 대소문자를 구분하지 않으며, 전체 메시지로 전송해야 합니다 (예: `hello /new`은 초기화가 아닌 일반 메시지로 처리됩니다).
**Web UI에서 설정**: Settings 페이지의 **IM Channels** 패널에서는 파일을 직접 편집하지 않고도 채널을 설정할 수 있습니다. 채널을 펼치면 설정 패널이 열립니다. 필드는 백엔드 메타데이터에서 렌더링되고, secret 값은 브라우저에 절대 반환되지 않으며 마스킹된 형태(`****` + 마지막 4자리)로만 표시됩니다. DingTalk이 첫 번째로 완전한 가이드를 제공하는 채널입니다: [open-dev.dingtalk.com](https://open-dev.dingtalk.com/)에서 앱 생성 → 봇 기능 추가 후 Stream Mode 활성화(공개 콜백 URL 불필요) → AppKey를 Client ID에, AppSecret을 Client Secret에 복사 → 앱 게시. QQ도 이제 완전한 가이드를 제공하는 채널입니다: QQ 오픈 플랫폼([q.qq.com](https://q.qq.com/))에서 봇을 등록하고 AppID와 AppSecret을 폼에 입력한 뒤, 저장 전에 **Test connection**으로 검증하고 활성화하면 됩니다(공개 콜백 URL 불필요, 공식 botpy SDK를 통한 WebSocket 연결). **Test connection**은 저장 전에 폼의 현재 입력값만으로 연결을 시도하고 정확한 결과 코드(`ok`, `invalid_credentials`, `network`, `unsupported`)를 반환합니다. **Enable**은 즉시 적용됩니다: 실행 중인 채널 런타임은 프로세스 재시작 없이 해당 어댑터만 핫 스왑하며, 활성화 시 자격 증명을 자동 검증합니다(검증 실패 후 명시적으로 **Enable anyway**를 선택한 경우에만 스킵). 비활성화해도 저장된 자격 증명은 유지되므로 재활성화 시 재입력이 필요 없습니다. 여기에는 내장 어댑터만 표시되며, entry points로 추가된 플러그인 채널은 계속 파일에서 설정합니다.
**Web UI에서 설정**: Settings 페이지의 **IM Channels** 패널에서는 파일을 직접 편집하지 않고도 채널을 설정할 수 있습니다. 채널을 펼치면 설정 패널이 열립니다. 필드는 백엔드 메타데이터에서 렌더링되고, secret 값은 브라우저에 절대 반환되지 않으며 마스킹된 형태(`****` + 마지막 4자리)로만 표시됩니다. DingTalk이 첫 번째로 완전한 가이드를 제공하는 채널입니다: [open-dev.dingtalk.com](https://open-dev.dingtalk.com/)에서 앱 생성 → 봇 기능 추가 후 Stream Mode 활성화(공개 콜백 URL 불필요) → AppKey를 Client ID에, AppSecret을 Client Secret에 복사 → 앱 게시. QQ도 이제 완전한 가이드를 제공하는 채널입니다: QQ 오픈 플랫폼([q.qq.com](https://q.qq.com/))에서 봇을 등록하고 AppID와 AppSecret을 폼에 입력한 뒤, 저장 전에 **Test connection**으로 검증하고 활성화하면 됩니다(공개 콜백 URL 불필요, 공식 botpy SDK를 통한 WebSocket 연결). Email과 WebSocket도 이제 완전한 가이드를 제공하는 채널입니다: Email의 **Test connection**은 아무것도 전송하지 않고 IMAP 로그인, 메일함 폴더, SMTP 로그인을 서비스 공급자에 대해 시도하며, WebSocket은 원격 서비스가 아닌 로컬 서버이므로 이 머신에서 TLS 인증서/키 소재와 주소 사용 가능성을 검증합니다 — 이미 실행 중인 서버가 점유한 주소는 실패가 아니라 예상된 상태로 표시됩니다. WebSocket 설정을 저장하면 서버가 핫 스왑되므로, 연결된 클라이언트(Web UI 채팅 포함)가 잠시 끊겼다가 다시 연결됩니다. **Test connection**은 저장 전에 폼의 현재 입력값만으로 연결을 시도하고 정확한 결과 코드(`ok`, `invalid_credentials`, `network`, `unsupported`)를 반환합니다. **Enable**은 즉시 적용됩니다: 실행 중인 채널 런타임은 프로세스 재시작 없이 해당 어댑터만 핫 스왑하며, 활성화 시 자격 증명을 자동 검증합니다(검증 실패 후 명시적으로 **Enable anyway**를 선택한 경우에만 스킵). 비활성화해도 저장된 자격 증명은 유지되므로 재활성화 시 재입력이 필요 없습니다. 여기에는 내장 어댑터만 표시되며, entry points로 추가된 플러그인 채널은 계속 파일에서 설정합니다.
저장은 `~/.vibe-trading/agent.json`의 `channels.<name>` 섹션을 원자적으로 업데이트합니다. YAML 설정 파일은 Web UI에서 읽기 전용입니다(브라우저 편집에는 JSON이 필요하며, 패널은 오류 대신 그 사실을 표시합니다). 전용 가이드가 없는 채널은 기본 설정에서 파생된 일반 폼을 렌더링합니다.
+1 -1
View File
@@ -1035,7 +1035,7 @@ vibe-trading channels pairing --channel telegram list
命令不区分大小写,且必须作为整条消息发送(例如 `hello /new` 会被当作普通消息而非重置命令)。
**从 Web UI 配置**:Settings 页面的 **IM Channels** 面板可以直接在网页上完成通道配置,无需手工编辑文件。展开某个通道即打开配置面板:表单字段由后端元数据渲染;secret 值不会回传给浏览器,只显示掩码(`****` 加末 4 位)。钉钉是第一个带完整接入指南的通道:在 [open-dev.dingtalk.com](https://open-dev.dingtalk.com/) 创建应用,添加机器人能力并开启 Stream Mode(无需公网回调地址),把 AppKey 填入 Client ID、AppSecret 填入 Client Secret,然后发布应用。QQ 也已加入带完整接入指南的通道:在 QQ 开放平台([q.qq.com](https://q.qq.com/))注册机器人,把 AppID 与 AppSecret 填入表单,保存前先用 **Test connection** 验证,再启用即可(无需公网回调地址,通过官方 botpy SDK 建立 WebSocket 连接)。**Test connection** 在任何内容保存之前就用表单中的当前值发起探测,并返回真实结果码(`ok`、`invalid_credentials`、`network`、`unsupported`)。打开 **Enable** 立即生效:运行中的通道 runtime 只热替换该通道的适配器,无需重启进程;启用时会自动校验凭据,除非你在校验失败后显式选择 **Enable anyway** 跳过。停用通道不会删除已保存的凭据,重新启用无需再次录入。此处仅列出内置适配器;通过 entry points 接入的插件频道仍需编辑配置文件。
**从 Web UI 配置**:Settings 页面的 **IM Channels** 面板可以直接在网页上完成通道配置,无需手工编辑文件。展开某个通道即打开配置面板:表单字段由后端元数据渲染;secret 值不会回传给浏览器,只显示掩码(`****` 加末 4 位)。钉钉是第一个带完整接入指南的通道:在 [open-dev.dingtalk.com](https://open-dev.dingtalk.com/) 创建应用,添加机器人能力并开启 Stream Mode(无需公网回调地址),把 AppKey 填入 Client ID、AppSecret 填入 Client Secret,然后发布应用。QQ 也已加入带完整接入指南的通道:在 QQ 开放平台([q.qq.com](https://q.qq.com/))注册机器人,把 AppID 与 AppSecret 填入表单,保存前先用 **Test connection** 验证,再启用即可(无需公网回调地址,通过官方 botpy SDK 建立 WebSocket 连接)。Email 与 WebSocket 也已加入带完整接入指南的通道:Email 的 **Test connection** 会在不发送任何内容的前提下,向你的服务商探测 IMAP 登录、邮箱文件夹与 SMTP 登录;而 WebSocket——本机服务器而非远程服务——校验的是本机的 TLS 证书/密钥材料与地址可用性,地址若已被正在运行的服务器占用,会被视为预期状态而非失败。保存 WebSocket 配置会热替换服务器,因此已连接的客户端(包括 Web UI 聊天)会短暂断开并重新连接。**Test connection** 在任何内容保存之前就用表单中的当前值发起探测,并返回真实结果码(`ok`、`invalid_credentials`、`network`、`unsupported`)。打开 **Enable** 立即生效:运行中的通道 runtime 只热替换该通道的适配器,无需重启进程;启用时会自动校验凭据,除非你在校验失败后显式选择 **Enable anyway** 跳过。停用通道不会删除已保存的凭据,重新启用无需再次录入。此处仅列出内置适配器;通过 entry points 接入的插件频道仍需编辑配置文件。
保存会原子地更新 `~/.vibe-trading/agent.json` 的 `channels.<name>` 段。YAML 配置文件对 Web UI 只读(浏览器内编辑要求 JSON),面板会直接说明这一点而不是报错。没有专属指南的通道会按其默认配置渲染通用表单。