Feishu (Lark)
このガイドでは、Feishu(飞书)/ Lark 上で Qwen Code チャンネルを設定する方法を説明します。
前提条件
- Feishu の組織アカウント
- App ID と App Secret を持つ Feishu アプリケーション(以下を参照)
アプリケーションの作成
- Feishu オープンプラットフォーム にアクセスします
- 新しいアプリケーションを作成します(または既存のものを使用します)

- アプリケーション内で Bot 機能を有効にします(添加应用能力 → 机器人)

- イベントサブスクリプション(事件与回调)で Long Connection(使用长连接接收事件)を選択します

- イベント
im.message.receive_v1(接收消息)を追加します

- アプリケーション認証情報ページから App ID(Client ID)と App Secret(Client Secret)を確認します

必要な権限
権限管理(Permissions & Scopes)で以下の権限を有効にします:
im:message— メッセージの読み取りと送信im:message:send_as_bot— ボットとしてメッセージを送信im:resource— メッセージリソース(画像、ファイル)へのアクセス
アプリケーションの公開
権限とイベントの設定後、バージョンを作成して公開します。アプリケーションが公開・承認されるまでボットは動作しません。

設定
~/.qwen/settings.json にチャンネルを追加します:
{
"channels": {
"my-feishu": {
"type": "feishu",
"clientId": "<your-app-id>",
"clientSecret": "<your-app-secret>",
"senderPolicy": "open",
"sessionScope": "user",
"cwd": "/path/to/your/project",
"groupPolicy": "open",
"collapsible": true,
"groups": {
"*": { "requireMention": true }
}
}
}
}設定オプション
| オプション | 説明 |
|---|---|
clientId | Feishu App ID |
clientSecret | Feishu App Secret |
collapsible | 長いレスポンスを折りたたみ可能なセクションにまとめる(デフォルト: false) |
collapsibleThreshold | 折りたたみの文字数しきい値(デフォルト: 500) |
webhookPort | 設定した場合、WebSocket の代わりに HTTP webhook モードを使用 |
verificationToken | webhook モード用の検証トークン |
encryptKey | webhook モード用の暗号化キー |
起動
# Feishu チャンネルのみ起動
qwen channel start my-feishu
# または設定済みのすべてのチャンネルをまとめて起動
qwen channel startFeishu を開いてボットにメッセージを送信します。レスポンスがストリーミングのインタラクティブカードとして表示されます。
接続モード
WebSocket(デフォルト)
WebSocket モードはアウトバウンドの長期接続を使用します。パブリック URL やサーバーは不要です。ほとんどのデプロイ環境で推奨されるモードです。
Webhook
webhook モードが必要な場合(共有アプリケーションなど)、設定に webhookPort を指定します:
{
"channels": {
"my-feishu": {
"type": "feishu",
"webhookPort": 9321,
"verificationToken": "<from-feishu-console>",
"encryptKey": "<from-feishu-console>"
}
}
}次に、Feishu オープンプラットフォームのリクエスト URL を http://<your-server>:9321 に設定します。
グループチャット
Feishu ボットは DM とグループ会話の両方で動作します。グループのサポートを有効にするには:
- チャンネル設定の
groupPolicyを"allowlist"または"open"に設定する - Feishu グループにボットを追加する
- グループでボットを @メンション してレスポンスをトリガーする
デフォルトでは、グループチャットでは @メンション が必要です(requireMention: true)。特定のグループで "requireMention": false を設定すると、すべてのメッセージに応答するようになります。
機能
インタラクティブカードのストリーミング
レスポンスはリアルタイムのストリーミング更新を伴う Feishu インタラクティブカードとして表示されます。カードにはレスポンス生成中に「生成中」インジケーターが表示され、生成をキャンセルする Stop ボタンも表示されます。
引用/返信のコンテキスト
メッセージに返信(引用)すると、引用された内容がエージェントのコンテキストとして自動的に含まれます。以下に対応しています:
- テキストおよびリッチテキストメッセージ
- インタラクティブカード(ボットの過去のレスポンス)
画像とファイル
ボットに写真やドキュメントを送信できます:
- 画像: マルチモーダルビジョン機能を使用して解析
- ファイル: ダウンロードしてローカルに保存し、エージェントが読み取り可能
同時メッセージ
同じグループチャットで複数のユーザーが同時にメッセージを送信できます。各メッセージはそれぞれ独立したカードとレスポンスを持ち、互いに干渉しません。
DingTalk との主な違い
- レスポンス形式: テーブルを含むネイティブ markdown レンダリングを備えた Feishu インタラクティブカード(v2 スキーマ)を使用
- ストリーミング: スロットルされた PATCH リクエスト(1.5 秒間隔)でカードコンテンツをインプレース更新
- 接続:
@larksuiteoapi/node-sdk経由の WebSocket — アウトバウンドのみのモデルで、パブリック URL 不要 - 処理中インジケーター: 処理中は「OnIt」絵文字リアクションが追加される
- 引用コンテキスト: テキストメッセージとインタラクティブカードの両方の引用をサポート
トラブルシューティング
ボットが接続しない
- App ID と App Secret が正しいか確認する
- イベントサブスクリプションで Long Connection が選択されているか確認する
im.message.receive_v1イベントがサブスクライブされているか確認する- 接続エラーについてターミナルの出力を確認する
グループでボットが応答しない
groupPolicyが"allowlist"または"open"に設定されているか確認する(デフォルトは"disabled")- グループメッセージでボットを @メンション しているか確認する
- ボットがグループに追加されているか確認する
カードが「生成中」状態のまま
- レスポンスは完了したが最終カードの更新に失敗した場合に発生することが多い
- API エラー(レート制限、カードサイズ制限)についてターミナルログを確認する
- 多数のテーブルを含む非常に長いレスポンスは Feishu のカード要素数の制限に達する場合がある
引用にカードの内容が含まれない
- ボットは
card_msg_content_type=user_card_contentAPI パラメーターを使用してカードの内容を読み取る - ボットがメッセージを読み取るための
im:message権限を持っているか確認する