mcpField
F
feishu-card

feishu-card

github.com/alextangson生産性64185 回インストール31 週間前に更新
リポジトリ

feishu-card について

feishu-cardは、Feishuのインタラクティブカードを作成、送信、処理するスキルです。カード要素やボタン、セレクター、イベントコールバックに加え、操作後の既存カード更新方法を扱います。

主な機能

  1. 01インタラクティブカードの送信
  2. 02テキスト・区切り線・注記の設定
  3. 03操作値付きボタンの追加
  4. 04静的セレクターの設定
  5. 05WebSocket操作イベントの処理
  6. 06メッセージIDによるカード更新

活用シーン

  1. 01朝のレポートへの確認収集
  2. 02カード上でのアラート対応
  3. 03タスク確認やステータス更新
  4. 04操作コールバック後のカード更新

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/alextangson/feishu_skills --skill feishu-card

インストール後、Claude Code で/feishu-cardを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
card-alert.json
card-morning-briefing.json
card-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_ID
  • FEISHU_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}

ベストプラクティス

  1. ボタンに value を設定する(コールバックの識別に使用します)
  2. 新しいメッセージの代わりにカードを更新する(メッセージの連投を減らします)
  3. 危険な操作には danger タイプを使用する

コメント