بنقرة واحدة
lark-workflow
Lark/Feishu自動化 — 承認フロー・Bot・文書管理
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Lark/Feishu自動化 — 承認フロー・Bot・文書管理
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Manage projects on Nulab Backlog — issues, wikis, milestones, Git, sprints for Japan's top PM tool
Automate Japan's
Unified Gmail, Calendar, Drive, Sheets, and Docs management from Claude Code
Task and project management on Jooto — create tasks, manage boards, automate workflows via PR TIMES' tool
Attendance and time tracking automation — daily/monthly data, payroll sync via Japan's leading attendance system
Build, query, and automate Cybozu kintone apps — Japan's leading no-code business platform
| name | Lark Workflow |
| description | Lark/Feishu自動化 — 承認フロー・Bot・文書管理 |
| author | hanabi-jpn |
| version | 1.0.0 |
| tags | ["lark","feishu","workflow","approval","automation"] |
╔══════════════════════════════════════════════════╗
║ ║
║ LARK WORKFLOW v1.0 ║
║ ║
║ ┌─────────────────────┐ ║
║ │ 🐦 Lark / Feishu │ ║
║ │ ┌───┐ ┌───┐ │ ║
║ │ │申請│─▶│承認│ │ ║
║ │ └───┘ └─┬─┘ │ ║
║ │ ▼ │ ║
║ │ ┌───┐ ┌───┐ │ ║
║ │ │通知│◀─│実行│ │ ║
║ │ └───┘ └───┘ │ ║
║ │ │ ║
║ │ 📨 Bot 📅 予定 │ ║
║ │ 📄 文書 ✅ 承認 │ ║
║ └─────────────────────┘ ║
║ ║
║ ─── ワークフローを完全自動化 ─── ║
║ ║
╚══════════════════════════════════════════════════╝
claude-code lark feishu workflow japan
Lark/Feishu自動化エージェント。承認フロー、Bot通知、ドキュメント管理、カレンダー連携をAIで自動化。
Author: hanabi-jpn Version: 1.0.0 License: MIT Tags: lark, feishu, workflow, automation, bot, japan
Lark Workflow automates your Lark (Feishu) workspace: messaging, approval workflows, document management, calendar, and bot notifications. Perfect for teams using Lark as their primary workspace.
You are equipped with Lark Workflow for Lark/Feishu automation.
| Variable | Description | Required | Default |
|---|---|---|---|
LARK_APP_ID | Lark app ID | Yes | — |
LARK_APP_SECRET | Lark app secret | Yes | — |
LARK_WEBHOOK_URL | Bot webhook URL for quick notifications | No | — |
LARK_TENANT_KEY | Tenant key for multi-tenant apps | No | — |
API Base: https://open.larksuite.com/open-apis/ (Global) or https://open.feishu.cn/open-apis/ (China)
lark history で参照可能1. メッセージング:
2. Webhook Bot通知:
3. 承認フロー (Approval):
4. ドキュメント管理:
5. カレンダー:
6. スプレッドシート:
lark send <chat-id|user-id> <message>Send a text message to a chat or user.
$ lark send oc_abc123 "本日のデプロイは17:00に実施します"
✓ Message sent
Chat: #dev-team (oc_abc123)
Message ID: om_1234567890
Type: text
Timestamp: 2026-03-01 14:00:00 JST
lark send --card <template> <data>Send an Interactive Card message.
$ lark send --card approval_notify '{"applicant":"田中","amount":50000,"reason":"出張費"}'
✓ Card message sent
Chat: #approvers (oc_def456)
Template: approval_notify
Message ID: om_1234567891
Buttons: [承認] [却下] [詳細を見る]
Timestamp: 2026-03-01 14:05:00 JST
lark webhook <message>Send a quick notification via Webhook Bot.
$ lark webhook "デプロイ完了しました ✓ v2.3.1"
✓ Webhook notification sent
URL: https://open.larksuite.com/open-apis/bot/v2/hook/xxxx
Status: 200 OK
Timestamp: 2026-03-01 17:05:00 JST
lark chatsList all accessible chats.
$ lark chats
╔════════════════════════════════════════════════════════════╗
║ Lark チャット一覧 ║
╠════════════════════════════════════════════════════════════╣
║ Chat ID │ Name │ Type │ Members ║
╠═══════════════╪═══════════════════╪═════════╪═════════════╣
║ oc_abc123 │ #dev-team │ Group │ 12 ║
║ oc_def456 │ #approvers │ Group │ 5 ║
║ oc_ghi789 │ #general │ Group │ 48 ║
║ oc_jkl012 │ #incidents │ Group │ 8 ║
║ ou_user001 │ 田中太郎 (DM) │ P2P │ 2 ║
╚════════════════════════════════════════════════════════════╝
Total: 5 chats (4 groups, 1 P2P)
lark approval create <template> <data>Create a new approval instance from a template.
$ lark approval create expense --amount 50000 --reason "東京-大阪 出張費" --date 2026-03-01
✓ Approval instance created
Instance ID: inst_abc123456
Template: 経費申請 (expense)
Applicant: 田中太郎
Amount: ¥50,000
Status: PENDING
Approver(s): 鈴木部長 → 佐藤課長 (2段承認)
Notification: カードメッセージ送信済み
lark approval listList approval instances with optional status filter.
$ lark approval list --status pending
╔════════════════════════════════════════════════════════════════════╗
║ 承認一覧 (ステータス: 保留中) ║
╠════════════════════════════════════════════════════════════════════╣
║ ID │ テンプレート │ 申請者 │ 金額 │ 経過時間 ║
╠════════════════╪════════════╪══════════╪══════════╪════════════╣
║ inst_abc123 │ 経費申請 │ 田中太郎 │ ¥50,000 │ 2h ║
║ inst_def456 │ 休暇申請 │ 鈴木花子 │ — │ 1d 4h ║
║ inst_ghi789 │ 稟議書 │ 佐藤一郎 │ ¥200,000 │ 3d ⚠ ║
╚════════════════════════════════════════════════════════════════════╝
Total pending: 3 (1 overdue > 48h)
lark docs [--search <query>]Search documents in the workspace.
$ lark docs --search "議事録"
╔════════════════════════════════════════════════════════════════╗
║ ドキュメント検索結果: "議事録" ║
╠════════════════════════════════════════════════════════════════╣
║ # │ タイトル │ 種類 │ 更新日 │ 作成者 ║
╠═══╪═══════════════════════════════╪═══════╪════════════╪═══════╣
║ 1 │ Q1計画 議事録 2026-03-01 │ Doc │ 2026-03-01 │ 田中 ║
║ 2 │ 開発定例 議事録 2026-02-28 │ Doc │ 2026-02-28 │ 鈴木 ║
║ 3 │ 議事録テンプレート │ Doc │ 2026-01-15 │ 佐藤 ║
║ 4 │ 経営会議 議事録 2026-02-25 │ Doc │ 2026-02-25 │ 山田 ║
╚════════════════════════════════════════════════════════════════╝
Found: 4 documents matching "議事録"
lark calendar eventsList calendar events for a date range.
$ lark calendar events --from 2026-03-01 --to 2026-03-07
╔════════════════════════════════════════════════════════════════════╗
║ カレンダー: 2026-03-01 〜 2026-03-07 ║
╠════════════════════════════════════════════════════════════════════╣
║ 日時 │ イベント │ 参加者 │ 場所 ║
╠══════════════════════╪══════════════════════╪═════════════╪═══════╣
║ 03-01 10:00-10:30 │ デイリースタンドアップ │ dev-team │ Zoom ║
║ 03-01 14:00-15:00 │ Q1計画ミーティング │ 田中,鈴木,佐藤│ 会議室A║
║ 03-03 11:00-11:30 │ 1on1 (田中×鈴木) │ 田中,鈴木 │ Zoom ║
║ 03-05 17:00-17:30 │ Sprint Review │ dev-team │ Zoom ║
║ 03-07 17:00-17:30 │ 振り返り (KPT) │ dev-team │ Zoom ║
╚════════════════════════════════════════════════════════════════════╝
Total: 5 events this week
lark webhook --card <title> <content> — カード形式通知
lark approval <id> — 承認詳細
lark doc create <title> [--template <template>] — ドキュメント作成
lark doc <id> — ドキュメント内容
lark calendar create <title> <start> <end> — イベント作成
lark sheet <id> read <range> — シート読み取り
lark sheet <id> write <range> <data> — シート書き込み
The agent manages two token types automatically, choosing the correct one for each operation.
┌──────────────────────────────────────────────────────────────┐
│ Lark Authentication Flow │
│ │
│ ┌─────────────────┐ │
│ │ LARK_APP_ID + │ │
│ │ LARK_APP_SECRET │ │
│ └────────┬────────┘ │
│ │ │
│ v │
│ ┌─────────────────────────────────────┐ │
│ │ POST /auth/v3/tenant_access_token/ │ │
│ │ internal │ │
│ │ │ │
│ │ Body: { app_id, app_secret } │ │
│ └────────┬────────────────────────────┘ │
│ │ │
│ v │
│ ┌─────────────────────┐ ┌─────────────────────────┐ │
│ │ Tenant Access Token │ │ User Access Token │ │
│ │ (App-level actions) │ │ (User-level actions) │ │
│ │ │ │ Requires OAuth2 flow │ │
│ │ For: send message, │ │ For: personal calendar, │ │
│ │ read docs, approval │ │ user-specific data │ │
│ └─────────────────────┘ └─────────────────────────┘ │
│ │
│ Token TTL: 2 hours → Agent auto-refreshes before expiry │
└──────────────────────────────────────────────────────────────┘
| Category | Endpoint | Method | Description |
|---|---|---|---|
| Auth | /auth/v3/tenant_access_token/internal | POST | Get tenant token |
| Message | /im/v1/messages | POST | Send message |
| Message | /im/v1/messages/{id}/reply | POST | Reply to message |
| Chat | /im/v1/chats | GET | List chats |
| Chat | /im/v1/chats/{id} | GET | Get chat details |
| Approval | /approval/v4/instances | POST | Create approval instance |
| Approval | /approval/v4/instances/{id} | GET | Get approval status |
| Approval | /approval/v4/instances/{id}/approve | POST | Approve request |
| Approval | /approval/v4/instances/{id}/reject | POST | Reject request |
| Doc | /docx/v1/documents | POST | Create document |
| Doc | /docx/v1/documents/{id} | GET | Read document |
| Drive | /drive/v1/files | GET | List files |
| Calendar | /calendar/v4/calendars/{id}/events | POST | Create event |
| Calendar | /calendar/v4/calendars/{id}/events | GET | List events |
| Sheet | /sheets/v3/spreadsheets/{id}/values/{range} | GET | Read cells |
| Sheet | /sheets/v3/spreadsheets/{id}/values/{range} | PUT | Write cells |
| Webhook | Custom Bot URL | POST | Send webhook notification |
The following diagram shows the complete approval lifecycle managed by the agent:
┌─────────────────────────────────────────────────────────────┐
│ Approval Workflow (承認フロー) │
│ │
│ ┌──────────────┐ │
│ │ 申請者が │ lark approval create expense \ │
│ │ 申請作成 │ --amount 50000 --reason "出張費" │
│ └──────┬───────┘ │
│ │ │
│ v │
│ ┌──────────────┐ │
│ │ 自動通知 │ 承認者へカードメッセージ送信 │
│ │ (Bot Card) │ [承認] [却下] ボタン付き │
│ └──────┬───────┘ │
│ │ │
│ v │
│ ┌──────────────────────────────────────┐ │
│ │ 承認者のアクション │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ │ │
│ │ │ 承認 │ │ 却下 │ │ │
│ │ │ Approve │ │ Reject │ │ │
│ │ └────┬─────┘ └────┬─────┘ │ │
│ │ │ │ │ │
│ └───────┼───────────────┼──────────────┘ │
│ │ │ │
│ v v │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ 次の承認者へ │ │ 申請者へ │ │
│ │ 自動回付 │ │ 却下通知 │ │
│ │ (多段承認) │ │ + 理由 │ │
│ └──────┬───────┘ └──────────────┘ │
│ │ │
│ v │
│ ┌──────────────┐ │
│ │ 最終承認 │ 全承認者がApproveした場合 │
│ │ 完了通知 │ → 申請者・関係者へ完了通知 │
│ │ + 記録保存 │ → 承認履歴をDB保存 │
│ └──────────────┘ │
│ │
│ 承認テンプレート: │
│ 経費申請 (expense) — 金額、用途、日付、領収書 │
│ 休暇申請 (leave) — 種別、期間、引継ぎ先 │
│ 稟議書 (ringi) — 件名、金額、効果、リスク │
│ 購買申請 (purchase) — 品目、数量、金額、業者 │
└─────────────────────────────────────────────────────────────┘
Interactive Cards are the most powerful messaging format in Lark. The agent builds these cards programmatically.
{
"msg_type": "interactive",
"card": {
"config": { "wide_screen_mode": true },
"header": {
"title": { "tag": "plain_text", "content": "経費申請: 出張費 ¥50,000" },
"template": "orange"
},
"elements": [
{
"tag": "div",
"fields": [
{ "is_short": true, "text": { "tag": "lark_md", "content": "**申請者:** 田中太郎" } },
{ "is_short": true, "text": { "tag": "lark_md", "content": "**日付:** 2026-03-01" } },
{ "is_short": true, "text": { "tag": "lark_md", "content": "**金額:** ¥50,000" } },
{ "is_short": true, "text": { "tag": "lark_md", "content": "**用途:** 東京-大阪 出張" } }
]
},
{ "tag": "hr" },
{
"tag": "action",
"actions": [
{
"tag": "button",
"text": { "tag": "plain_text", "content": "承認" },
"type": "primary",
"value": { "action": "approve", "instance_id": "abc123" }
},
{
"tag": "button",
"text": { "tag": "plain_text", "content": "却下" },
"type": "danger",
"value": { "action": "reject", "instance_id": "abc123" }
},
{
"tag": "button",
"text": { "tag": "plain_text", "content": "詳細を見る" },
"type": "default",
"url": "https://larksuite.com/approval/instance/"
}
]
}
]
}
}
{
"msg_type": "interactive",
"card": {
"header": {
"title": { "tag": "plain_text", "content": "日報 — 2026-03-01 (田中)" },
"template": "blue"
},
"elements": [
{
"tag": "div",
"text": {
"tag": "lark_md",
"content": "**今日の成果:**\n- ECサイトの商品ページ更新 (15件)\n- 在庫データ同期スクリプト修正\n- チームMTG参加\n\n**明日の予定:**\n- メルマガ配信準備\n- GA4レポート作成\n\n**課題:**\n- API連携でタイムアウト発生中 → 調査継続"
}
}
]
}
}
Webhook Bots are the simplest way to send notifications without full API setup.
LARK_WEBHOOK_URLlark webhook "デプロイ完了しました"Text Message:
{ "msg_type": "text", "content": { "text": "デプロイ完了しました" } }
Rich Text with Mentions:
{
"msg_type": "post",
"content": {
"post": {
"ja_jp": {
"title": "サーバーアラート",
"content": [
[
{ "tag": "text", "text": "CPU使用率が90%を超えました " },
{ "tag": "at", "user_id": "all", "user_name": "全員" }
]
]
}
}
}
}
Signed Webhook (Security): When signature verification is enabled, add a timestamp and sign:
timestamp = current_time_seconds
sign = base64(hmac_sha256(timestamp + "\n" + secret))
payload = { "timestamp": "...", "sign": "...", "msg_type": "text", ... }
Below are pre-built automation patterns the agent can deploy with minimal configuration.
Trigger: Cron (毎朝 9:50 JST)
Action: lark webhook --card "standup_reminder" \
--message "10:00からスタンドアップです。昨日の成果と今日の予定を準備してください。"
Channel: #dev-team
Trigger: Approval pending > 24 hours
Action: 1. lark send <approver-id> "承認待ちの申請があります(24h経過)"
2. If 48h → Escalate to manager
3. If 72h → Notify admin
Trigger: Every Friday 17:00 JST
Action: 1. lark sheet <id> read A1:Z100 (collect weekly data)
2. Generate summary card
3. lark send --card weekly_summary #management
Trigger: New user added to "新入社員" group
Action: 1. lark send <user-id> welcome card with onboarding checklist
2. lark doc create "オンボーディングチェックリスト" --template onboarding
3. lark calendar create "1on1 with Manager" <date>
4. Add to relevant chat groups
Trigger: External webhook (Datadog, PagerDuty, etc.)
Action: 1. lark webhook --card incident_alert --data <payload>
2. lark approval create incident_response --assignee <on-call>
3. Create incident doc from template
4. Start thread for real-time updates
~/.lark-workflow/
config.yaml # App credentials, default chat IDs, preferences
tokens/
tenant_token.json # Cached tenant token (auto-refresh)
user_tokens/
user_abc.json # Per-user OAuth tokens
templates/
cards/
approval_notify.json # Approval notification card template
daily_report.json # Daily report card
weekly_summary.json # Weekly summary card
incident_alert.json # Incident alert card
standup_reminder.json # Stand-up reminder card
approvals/
expense.json # 経費申請テンプレート
leave.json # 休暇申請テンプレート
ringi.json # 稟議書テンプレート
purchase.json # 購買申請テンプレート
webhooks/
registered.json # Registered webhook URLs
event_subscriptions.json # Active event subscriptions
logs/
messages_2026-03.json # Message send log (monthly rotation)
approvals_2026-03.json # Approval action log
cache/
chat_list.json # Chat list cache (TTL: 1h)
user_list.json # User list cache (TTL: 1h)
| Error Code | Meaning | Agent Action |
|---|---|---|
| 99991400 | Invalid params (missing or malformed field) | Parse msg field for specific error, show which param needs fixing |
| 99991401 | Authentication failed (invalid app credentials) | Prompt user to verify LARK_APP_ID and LARK_APP_SECRET |
| 99991402 | Insufficient permissions (scope not granted) | Show required scope, guide: Lark Admin → App → Permissions → Add scope |
| 99991663 | Tenant token expired | Auto-refresh token via /auth/v3/tenant_access_token/internal |
| 99991672 | User token expired | Prompt user to re-authorize via OAuth2 flow |
| 99991400 | Chat not found (invalid chat_id) | Verify chat_id with lark chats, suggest search |
| 99991668 | Rate limit exceeded | Auto-wait, exponential backoff (1s, 2s, 4s), max 3 retries |
| 99991403 | Bot not in chat (cannot send message) | Guide: Group Settings → Bots → Add this app's bot |
| 230001 | Approval definition not found | Verify approval code, list available with lark approval list |
| 230004 | Approval instance already completed | Show current status, no action possible |
| 1254043 | Document permission denied | Guide: Share document with app or use user token |
| 500 | Lark internal server error | Retry up to 3 times with exponential backoff |
Retry strategy: On rate limit or 5xx errors, retry up to 3 times with delays of 1s, 2s, 4s. Token expiry errors trigger automatic token refresh before retry.
| Feature | Lark Workflow | Slack Bot | Microsoft Teams Bot |
|---|---|---|---|
| Platform | Lark / Feishu | Slack | Microsoft Teams |
| Approval Workflows | Native (20段承認) | Third-party app | Power Automate |
| Message Cards | Interactive Cards | Block Kit | Adaptive Cards |
| Document Integration | Native Docs/Sheets | Third-party | Office 365 |
| Calendar | Built-in | Google Cal integration | Outlook |
| Spreadsheet | Native Sheets | None | Excel Online |
| Webhook Setup | 1-step (URL only) | 3-step (app + scope) | 5-step (Azure AD) |
| Multi-language | JP/EN/CN native | EN-first | EN-first |
| Pricing | Free tier generous | Free tier limited | Requires M365 |
| China Support | Feishu (飛書) native | Blocked in China | Limited |
| Bot Development | Simple JSON cards | Complex Block Kit | Azure Bot Framework |
Q: Lark Suite と Feishu の違いは?
A: Lark Suite はグローバル版(larksuite.com)、Feishu は中国版(feishu.cn)です。API構造はほぼ同じですが、エンドポイントのベースURLが異なります。本スキルは config.yaml の region: global|china 設定で自動切り替えします。
Q: Webhook Bot とフルAPI の使い分けは? A: Webhook Bot は「通知を送るだけ」の場面に最適で、セットアップが簡単です(URL1つだけ)。メッセージの読み取り、ユーザー情報取得、承認フロー、ドキュメント操作などの双方向機能にはフルAPI(APP_ID + APP_SECRET)が必要です。
Q: Interactive Card のボタンが押された時の処理は?
A: Card のボタンアクションは、Lark の Event Subscription (callback URL) で受け取ります。本スキルではローカルの ngrok トンネルまたは外部エンドポイントを設定し、ボタンイベントを処理します。config.yaml で callback_url を設定してください。
Q: 承認フローの段数は何段まで対応?
A: Lark Approval API は最大20段の承認ステップに対応しています。本スキルでは lark approval create の --steps オプションで承認者チェーンを定義できます。並列承認(OR条件)や全員承認(AND条件)の設定も可能です。
Q: メッセージの送信レート制限は? A: Lark API のレート制限はエンドポイントにより異なりますが、メッセージ送信は概ね5回/秒です。バッチ送信時は自動的にレート制限を尊重し、429エラー時はリトライします。大量送信(100件以上)はバッチAPIの利用を推奨します。
Q: Lark のスプレッドシートで日本語データを読み書きできますか?
A: はい、完全対応しています。lark sheet <id> read A1:D10 でセルデータを取得し、日本語テキスト・数値・日付を正しくパースします。書き込みも同様に lark sheet <id> write A1:D10 <data> で JSON 形式のデータを書き込みます。
Q: 他のツール(Notion, Slack等)との連携は可能ですか? A: はい。Webhook を介して外部サービスと双方向に連携できます。例えば Notion JP スキルと組み合わせて「Notionのタスク更新 → Larkに通知」や「Larkの承認完了 → Notionのステータス更新」といったワークフローを構築できます。
Q: Lark Baseとの連携は可能ですか?
A: はい、Lark Base(多次元表)のCRUD操作に完全対応しています。lark base query --table "売上管理" でデータ取得、lark base insert でレコード追加が可能です。ビューのフィルタリングも自動適用されます。
Q: 日本語と中国語の混在環境に対応していますか?
A: はい、Lark/Feishuの多言語環境に完全対応。メッセージ送信時は自動言語検出を行い、テンプレートも日本語・中国語・英語を自動切り替えします。--lang ja フラグで日本語を強制指定もできます。
Q: Webhook のセキュリティ検証はどうなっていますか?
A: 受信Webhookは署名検証(SHA256 HMAC)を自動実行します。lark webhook verify で検証設定を確認でき、不正なリクエストは自動的にブロック・ログ記録されます。