Use Dingding
by @brucezhu888
Interact with DingTalk workspace via dws CLI to manage contacts, chats, calendars, todos, approvals, attendance, reports, and AITable data using OAuth creden...
clawhub install use-dingdingπ About This Skill
name: use-dingding displayName: Use Dingding version: 1.1.0 description: Interact with DingTalk enterprise workspace using the dws CLI. Required: dws CLI, DWS_CLIENT_ID, DWS_CLIENT_SECRET. Use for: contacts, chat, calendar, todo, approvals, attendance, reports, AITable.
required_env: - DWS_CLIENT_ID - DWS_CLIENT_SECRET
required_binaries: - dws
DingTalk Workspace Skill
Use the dws CLI to interact with DingTalk enterprise workspace. This skill covers all 12 products: contact, chat, bot, calendar, todo, oa (approval), attendance, ding, report, aitable, workbench, and devdoc.
β οΈ Security & Safety Notes
Read before installing:
1. Credentials Required: This skill requires OAuth credentials (DWS_CLIENT_ID, DWS_CLIENT_SECRET) from a DingTalk Open Platform app. Enterprise admin approval may be needed.
2. Install Safely: The dws CLI installer fetches from GitHub. Review the installer script before running:
- Installer: https://github.com/DingTalk-Real-AI/dingtalk-workspace-cli/blob/main/scripts/install.sh
- Releases: https://github.com/DingTalk-Real-AI/dingtalk-workspace-cli/releases
3. Autonomous Execution Risk: This skill can perform destructive actions (approve workflows, send messages, delete records). Always use --dry-run first and restrict autonomous invocation unless you trust the agent.
4. Least Privilege: Use scoped OAuth credentials with minimum permissions. Test in a sandbox enterprise first.
Prerequisites
Installation
Option 1: Install from release (recommended)
Download pre-built binary from https://github.com/DingTalk-Real-AI/dingtalk-workspace-cli/releases
Option 2: Build from source (safer)
git clone https://github.com/DingTalk-Real-AI/dingtalk-workspace-cli.git
cd dingtalk-workspace-cli
go build -o dws ./cmd
cp dws ~/.local/bin/
Option 3: Install script (review first!)
# macOS / Linux - REVIEW SCRIPT BEFORE RUNNING
curl -fsSL https://raw.githubusercontent.com/DingTalk-Real-AI/dingtalk-workspace-cli/main/scripts/install.sh | shWindows (PowerShell) - REVIEW SCRIPT BEFORE RUNNING
irm https://raw.githubusercontent.com/DingTalk-Real-AI/dingtalk-workspace-cli/main/scripts/install.ps1 | iex
Authentication
Recommended: Interactive Login (secure keychain storage)
dws auth login --client-id --client-secret
Tokens stored encrypted in system Keychain (macOS/Windows) or libsecret (Linux)
Alternative: Environment Variables (use with caution)
export DWS_CLIENT_ID=
export DWS_CLIENT_SECRET=
dws auth login
β οΈ Security note: Environment variables may be exposed in process listings and logs. Prefer interactive login for production use.
Safe Execution Guidelines
For Agents
--dry-run: ALWAYS use first for mutations to preview API calls--yes: Skip confirmation prompts (use only after verifying with --dry-run)--jq: Extract specific fields to reduce token consumption--fields: Return only needed fieldsRecommended Workflow
# 1. Preview the operation
dws todo task create --title "Test" --executors "user123" --dry-run2. Verify the output looks correct
3. Execute (only if preview was correct)
dws todo task create --title "Test" --executors "user123" --yes
Auto-Correction
dws automatically corrects common AI mistakes:
--baseId β --base-id (camelCase to kebab-case)--timeout30 β --timeout 30 (sticky argument splitting)--tabel-id β --table-id (fuzzy matching)"yes" β true, "2024/03/29" β "2024-03-29" (value normalization)Discovery & Introspection
Before making calls, discover available capabilities:
# List all products and tool counts
dws schema --jq '.products[] | {id, tool_count: (.tools | length)}'Inspect a specific tool's parameter schema
dws schema aitable.query_records --jq '.tool.parameters'View required fields
dws schema aitable.query_records --jq '.tool.required'List all product IDs
dws schema --jq '.products[].id'
Quick Reference by Product
Contact
# Search users by keyword
dws contact user search --keyword "engineering"Get current user profile
dws contact user get-self --jq '.result[0].orgEmployeeModel | {name: .orgUserName, dept: .depts[0].deptName}'Search department by name
dws contact dept search --keyword "Engineering"List department members
dws contact dept members --dept-id
Chat
# Send message as bot
dws chat message send-by-bot --robot-code --group --title "Weekly Report" --text @report.mdList groups
dws chat group listGet group info
dws chat group get --group-id
Calendar
# List calendar events
dws calendar event listCreate event
dws calendar event create --title "Team Meeting" --start "2024-03-29T14:00:00Z" --end "2024-03-29T15:00:00Z"Find free slots
dws calendar participant busy --user-ids , --start "2024-03-29" --end "2024-03-30"Search meeting rooms
dws calendar room search --keyword "Meeting Room"
Todo
# Create todo
dws todo task create --title "Review PR" --executors "" --yesList todos
dws todo task listMark as done
dws todo task done --task-id
Approval (OA)
# List pending approvals
dws oa approval list --status pendingApprove instance
dws oa approval approve --instance-id --comment "Approved"Reject instance
dws oa approval reject --instance-id --comment "Needs revision"
Attendance
# View my attendance records
dws attendance record list --user-id View team shift schedule
dws attendance shift list --dept-id
Report
# View today's received reports
dws report list --type received --start-date "2024-03-29" --end-date "2024-03-29"Create report
dws report create --template-id --content @report.md
AITable
# Query records
dws aitable record query --base-id --table-id --limit 10Create record
dws aitable record create --base-id --table-id --fields '{"name": "Task 1", "status": "open"}'List bases
dws aitable base listList tables in a base
dws aitable table list --base-id
Output Control
jq Filtering
# Extract specific fields
dws contact user search --keyword "engineering" --jq '.result[] | {name: .orgUserName, userId: .userId}'Count results
dws todo task list --jq '.result | length'
Field Selection
# Return only specific fields
dws aitable record query --base-id --table-id --fields invocation,response
File Input
# Read from file
dws chat message send-by-bot --robot-code --group --text @message.mdPipe from stdin
cat message.md | dws chat message send-by-bot --robot-code --group
Common Workflows
See bundled scripts in scripts/ for batch operations:
Safety First: All mutation scripts default to --dry-run mode. You must explicitly pass --execute to perform actual changes.
| Script | Description |
|--------|-------------|
| calendar_schedule_meeting.py | Create event + add participants + book meeting room (use --execute to book) |
| calendar_free_slot_finder.py | Find common free slots across multiple people (read-only) |
| todo_batch_create.py | Batch create todos from JSON (use --execute to create) |
| contact_dept_members.py | Search department and list all members (read-only) |
| report_inbox_today.py | View today's received reports (read-only) |
| import_records.py | Import CSV records into AITable (use --execute to import) |
Example:
# Preview first (default behavior)
python scripts/todo_batch_create.py tasks.jsonExecute after verifying preview
python scripts/todo_batch_create.py tasks.json --execute
Error Handling
Common Error Codes
INVALID_TOKEN: Re-authenticate with dws auth loginPERMISSION_DENIED: Check app permissions in DingTalk Open PlatformRESOURCE_NOT_FOUND: Verify IDs with dws schema introspectionRecovery
When encountering RECOVERY_EVENT_ID, use:
dws --recovery
Security Notes
*.dingtalk.com only--dry-run before any mutation to preview the API callReference Files
references/products/*.md for detailed command reference per productreferences/intent-guide.md for disambiguation (e.g., report vs todo)references/error-codes.md for debugging workflowsreferences/global-reference.md for auth, output formats, global flagsβοΈ Configuration
Installation
Option 1: Install from release (recommended)
Download pre-built binary from https://github.com/DingTalk-Real-AI/dingtalk-workspace-cli/releases
Option 2: Build from source (safer)
git clone https://github.com/DingTalk-Real-AI/dingtalk-workspace-cli.git
cd dingtalk-workspace-cli
go build -o dws ./cmd
cp dws ~/.local/bin/
Option 3: Install script (review first!)
# macOS / Linux - REVIEW SCRIPT BEFORE RUNNING
curl -fsSL https://raw.githubusercontent.com/DingTalk-Real-AI/dingtalk-workspace-cli/main/scripts/install.sh | shWindows (PowerShell) - REVIEW SCRIPT BEFORE RUNNING
irm https://raw.githubusercontent.com/DingTalk-Real-AI/dingtalk-workspace-cli/main/scripts/install.ps1 | iex
Authentication
Recommended: Interactive Login (secure keychain storage)
dws auth login --client-id --client-secret
Tokens stored encrypted in system Keychain (macOS/Windows) or libsecret (Linux)
Alternative: Environment Variables (use with caution)
export DWS_CLIENT_ID=
export DWS_CLIENT_SECRET=
dws auth login
β οΈ Security note: Environment variables may be exposed in process listings and logs. Prefer interactive login for production use.