feishu-card について
feishu-cardは、Feishuのインタラクティブカードを作成、送信、処理するスキルです。カード要素やボタン、セレクター、イベントコールバックに加え、操作後の既存カード更新方法を扱います。
主な機能
- 01インタラクティブカードの送信
- 02テキスト・区切り線・注記の設定
- 03操作値付きボタンの追加
- 04静的セレクターの設定
- 05WebSocket操作イベントの処理
- 06メッセージIDによるカード更新
活用シーン
- 01朝のレポートへの確認収集
- 02カード上でのアラート対応
- 03タスク確認やステータス更新
- 04操作コールバック後のカード更新
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ alextangson/ feishu_skills --skill feishu-cardインストール後、Claude Code で/feishu-cardを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/card-alert.jsoncard-morning-briefing.jsoncard-skill-test.json詳細
Lark インタラクティブカード
Lark インタラクティブカードを作成、送信、処理します。
ベース URL: https://open.feishu.cn/open-apis/im/v1
使用シーン: 朝会レポートの確認、アラートの処理、タスクの確認、ステータスの更新
認証と Token の取得
feishu_skills のルートディレクトリから共有スクリプトを実行します。
TOKEN="$(./scripts/get_feishu_token.sh)"
リクエストヘッダーには、すべて Authorization: Bearer ${TOKEN} を使用します。
業務 API が token 無効、期限切れ、または 401 を返した場合は、強制的に更新してから、元のリクエストを 1 回だけ再試行します。
TOKEN="$(./scripts/get_feishu_token.sh --force-refresh)"
環境変数:
FEISHU_APP_IDFEISHU_APP_SECRET
ローカルキャッシュ: ./.feishu_token_cache.json(期限切れ前であればそのまま再利用し、デフォルトでは 5 分前に更新します)
カードの送信
POST /open-apis/im/v1/messages?receive_id_type=chat_id
{
"receive_id": "<chat_id>",
"msg_type": "interactive",
"content": "<card_json_string>"
}
⚠️ content は JSON を文字列化したものである必要があります。
カードの構造
{
"config": {"wide_screen_mode": true},
"header": {
"title": {"tag": "plain_text", "content": "标题"},
"template": "blue"
},
"elements": [
{"tag": "div", "text": {"tag": "lark_md", "content": "**加粗**"}},
{"tag": "action", "actions": [
{"tag": "button", "text": {"tag": "plain_text", "content": "确认"}, "type": "primary", "value": {"action": "confirm"}}
]}
]
}
よく使う要素
| 要素 | 説明 | 例 |
|---|---|---|
div | テキストブロック | {"tag":"div","text":{"tag":"lark_md","content":"文本"}} |
hr | 区切り線 | {"tag":"hr"} |
action | ボタングループ | 下記を参照 |
note | 注記 | {"tag":"note","elements":[{"tag":"plain_text","content":"备注"}]} |
ボタン
{
"tag": "action",
"actions": [
{
"tag": "button",
"text": {"tag": "plain_text", "content": "确认"},
"type": "primary",
"value": {"action": "confirm", "data": "extra_info"}
}
]
}
ボタンの種類: default / primary / danger
セレクター
{
"tag": "select_static",
"placeholder": {"tag": "plain_text", "content": "请选择"},
"options": [
{"text": {"tag": "plain_text", "content": "选项1"}, "value": "opt1"},
{"text": {"tag": "plain_text", "content": "选项2"}, "value": "opt2"}
],
"value": {"key": "select_result"}
}
コールバック処理
ユーザーがボタンをクリックすると、Lark が WebSocket イベントを送信します。
{
"type": "card.action.trigger",
"action": {
"value": {"action": "confirm", "data": "extra_info"}
}
}
コールバックを処理した後、カードを更新できます。
PATCH /open-apis/im/v1/messages/{message_id}
ベストプラクティス
- ボタンに value を設定する(コールバックの識別に使用します)
- 新しいメッセージの代わりにカードを更新する(メッセージの連投を減らします)
- 危険な操作には danger タイプを使用する
コメント
Markdown 対応