Feishu Webhook 送信
Feishu カスタムボットを使用して、通知やタスクの結果をグループに送信します。 この方法には webhook URL と、ボットで有効化されている場合は署名シークレットが必要です。 アプリケーション、長接続、またはインバウンドサーバーは不要です。 エージェントとの会話には Feishu アプリケーションボット を使用してください。
ボットの作成
- 送信先の Feishu グループにカスタムボットを追加します。
https://open.feishu.cn/open-apis/bot/v2/hook/で始まる webhook URL をコピーします。- ボットのセキュリティ設定を構成します。署名検証が有効になっている場合は、 署名シークレットもコピーします。キーワードと IP 制限も引き続き適用されます。
URL には認証情報が含まれています。Channel 設定または環境変数に保存し、
タスクプロンプトや配信ターゲットには保存しないでください。このインテグレーションは
open.feishu.cn をサポートします。Lark エンドポイントは含まれません。
URL は Feishu から発行されたまま正確に使用してください。ローカル検証では、
英数字、-、.、_、~ を含む 1 つのトークンパスセグメントが必要で、
パーセントエンコーディング、クエリパラメータ、フラグメントは使用できません。
Channel の設定
このインテグレーションは、Web Shell または settings.json で
以下のように設定します。
ワークスペースの Channel 設定に名前付きインスタンスを追加します:
{
"channels": {
"team-notices": {
"type": "feishu-webhook",
"webhookUrl": "$FEISHU_WEBHOOK_URL",
"signingSecret": "$FEISHU_WEBHOOK_SECRET"
}
}
}これらの変数を Qwen Code の起動に使用される環境に設定します。ボットが署名を
必要としない場合は signingSecret を省略します。アプリケーションの App Secret
ではなく、カスタムボットの署名シークレットを使用してください。
そのワークスペースでデーモンを起動します:
qwen serve --channel team-notices1 つの名前付きインスタンスは 1 つのグループを表します。他のグループには追加の インスタンスを作成してください。インスタンスの URL を変更すると、それを参照する 将来の配信の送信先が変更されます。
Channel を起動すると、ローカルで送信準備が整いますが、テストメッセージの送信や リモート認証情報の検証は行われません。停止すると送信中の処理がキャンセルされます。 再起動またはリロードすると、保存された設定変更が適用されます。
Web Shell の使用
Channels で、Feishu を選択し、次に Webhook (送信のみ) を選択します。ワークスペースを 選択し、webhook URL とオプションの署名シークレットを保存して、Channel を起動します。 受信、ペアリング、エージェントセッション設定はこの方法には適用されません。 アプリケーションボット方法は同じ Feishu プラットフォームで引き続き利用可能です。
Scheduled Tasks で、永続タスクセッションを選択し、この Channel を配信先として 選択します。Web Shell は設定されたグループを自動に入力します。observed contact や 手動で入力したチャット ID は必要ありません。既存のランごとの配信制限と 手動トリガーの配信制限が引き続き適用されます。
同じコントロールは、ホストが Channels と Scheduled Tasks を有効にし、
デーモンワークスペースを提供している場合に、WebShellWithProviders を通じて
利用できます。
明示的な API 配信
Notify と明示的なプロンプト/スケジュール配信は、既存の Channel ターゲット
形式を使用します。このアダプターは 1 つの論理的な送信先 chat/default を所有します:
{
"text": "# Daily report\n\nThe checks passed.",
"delivery": {
"kind": "channel",
"target": {
"channelName": "team-notices",
"type": "chat",
"id": "default"
}
}
}これはワークスペースの Notify リクエストボディです。default は設定された
グループのエイリアスであり、Feishu チャット ID ではありません。他の ID と
ユーザーターゲットは拒否されます。エンドポイントと署名シークレットは
Channel 設定に保持されます。
永続スケジュールタスクは同じ送信先タプルを使用します。配信は、既存の ベストエフォートの成功時最終結果動作を保持し、現在のランごとおよび 手動トリガーの制限を含みます。
メッセージのフォーマットと制限
- プレーンテキストと Markdown を静的スキーマ 2.0 カードで送信します。見出し、リスト、 リンク、フェンスコード、テーブル、中国語、絵文字は有効な入力として残ります。カードには ボタン、ストリーミング更新、または複製されたプレビューサマリーはありません。
- Feishu の Markdown サブセットを使用します。完全な GitHub 風 Markdown 互換性は 保証されません。テーブルは同じカード内の個別の要素を使用します。Feishu は テーブルごとに 5 つのデータ行の後にページネーションを行います。
- 完全な
<at ...>タグと</at>タグを数値 HTML エンティティでエスケープするため、 タスク提供のメンションマークアップはリテラルテキストとして送信されます。これは コード例内にも適用されます。設定可能なメンションと受信者ルックアップは サポートされていません。クライアントのレンダリングと通知動作はグループで 確認する必要があります。 - エスケープ、カード構造、オプションの署名を含む、完全にシリアライズされた UTF-8 JSON リクエストを 20,000 バイトのローカル予算に対してチェックします。 Feishu のカスタムボットガイドは正確なバイト数を指定せずに 20 KB を述べています。 この保守的なローカル制限は測定されたプラットフォームの最大値ではありません。
- 送信前にサイズ超過のリクエストを明示的な配信失敗で拒否します。 アダプターはサイレントに切り詰め、複数のリクエストに分割、またはリトライしません。 共有配信サイズ保護はこのプラットフォームチェックの前に引き続き適用されます。 完全なリクエストが収まるようにレポートを簡潔に保ってください。
失敗とトランスポート
HTTP ステータスと Feishu の数値 code の両方がチェックされます。キーワード、IP、
署名、レート制限の拒否は観測可能な失敗です。エラーには webhook URL、シークレット、
メッセージ内容、生のプロバイダーレスポンスは含まれません。
各試行は 15 秒のタイムアウトで最大 1 つのリクエストを送信します。タイムアウトまたは
キャンセルにより、リモートの受け入れが不明になる可能性があります。Channel は解決された
ワークスペースプロキシと既存の NO_PROXY バイパス動作を使用します。
このモードはメッセージの受信、インバウンド webhook タスクの実行、または Channel ループの開始を行いません。添付ファイル、失敗/キャンセルアラート、永続リトライキュー、 または汎用 webhook プロトコルは追加されません。
プラットフォームの設定とレンダリング要件については、公式の カスタムボットガイド および Markdown コンポーネントドキュメント を参照してください。