返回顶部
d

dingtalk-file-send钉钉文件发送

Upload and send files to DingTalk users. Auto-detects account from current session. Use when: user asks to send/forward a file/document/PDF/image via DingTalk.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.2.2
安全检测
已通过
141
下载量
免费
免费
1
收藏
概述
安装方式
版本历史

dingtalk-file-send

钉钉文件发送技能

将文件上传至钉钉媒体服务器,并发送给指定用户。

自动从当前会话绑定中检测钉钉账号。

使用场景

使用此技能的场景:

  • - 将此PDF发送给[用户]
  • 通过钉钉转发此文档
  • 与我的老板共享此文件
  • 上传并发送[文件名]

配置(自动)

此技能自动检测当前会话中的钉钉账号:

工作原理:

  1. 1. 从OpenClaw运行时上下文读取当前代理ID
  2. 在~/.openclaw/openclaw.json中查找绑定关系
  3. 匹配agentId → accountId → 钉钉凭证

绑定示例:
json
{
bindings: [
{
agentId: dingtalk-office,
match: {
channel: dingtalk,
accountId: office
}
}
],
channels: {
dingtalk: {
accounts: {
office: {
clientId: yourclientid,
clientSecret: xxx,
robotCode: yourrobotcode
}
}
}
}
}

注意: 在钉钉API中,clientId用作appKey进行身份认证。

工作流程

  1. 1. 从会话上下文检测当前agentId
  2. 查找绑定关系:agentId → accountId
  3. 根据accountId从OpenClaw配置读取凭证
  4. 获取访问令牌
  5. 将文件上传至钉钉媒体服务器
  6. 向接收者发送文件消息

命令

步骤1:从当前会话检测账号

bash
OPENCLAW_CONFIG=~/.openclaw/openclaw.json

从环境获取当前代理ID(由OpenClaw运行时设置)

AGENTID=${OPENCLAWAGENT_ID:-dingtalk-office}

从绑定关系中查找accountId

ACCOUNTID=$(jq -r .bindings[] | select(.agentId == \$AGENTID\) | .match.accountId $OPENCLAW_CONFIG)

回退:如果未找到绑定关系,使用代理ID后缀

if [ -z $ACCOUNTID ] || [ $ACCOUNTID = null ]; then # 从代理ID中提取账号(例如:dingtalk-office → office) ACCOUNTID=$(echo $AGENTID | sed s/dingtalk-//) fi

读取凭证(clientId用作appKey)

APPKEY=$(jq -r .channels.dingtalk.accounts[\$ACCOUNTID\].clientId $OPENCLAW_CONFIG) APPSECRET=$(jq -r .channels.dingtalk.accounts[\$ACCOUNTID\].clientSecret $OPENCLAW_CONFIG) ROBOTCODE=$(jq -r .channels.dingtalk.accounts[\$ACCOUNTID\].robotCode $OPENCLAW_CONFIG)

验证

if [ $APPKEY = null ] || [ $APPSECRET = null ] || [ $ROBOT_CODE = null ]; then echo ❌ 在OpenClaw配置中未找到账号$ACCOUNT_ID。 echo 当前代理:$AGENT_ID echo 可用账号:$(jq -r .channels.dingtalk.accounts | keys | join(, ) $OPENCLAW_CONFIG) exit 1 fi

步骤2:获取访问令牌

bash
ACCESS_TOKEN=$(curl -s -X POST https://api.dingtalk.com/v1.0/oauth2/accessToken \
-H Content-Type: application/json \
-d {\appKey\:\$APPKEY\,\appSecret\:\$APPSECRET\} | jq -r .accessToken)

if [ -z $ACCESSTOKEN ] || [ $ACCESSTOKEN = null ]; then
echo ❌ 获取访问令牌失败。
exit 1
fi

步骤3:上传文件

bash
FILE_PATH=$1
FILENAME=$(basename $FILEPATH)

UPLOADRESULT=$(curl -s -X POST https://oapi.dingtalk.com/media/upload?accesstoken=$ACCESSTOKEN&type=file&robotCode=$ROBOTCODE \
-F media=@$FILEPATH;filename=$FILENAME \
-H Expect:)

MEDIAID=$(echo $UPLOADRESULT | jq -r .media_id)

if [ -z $MEDIAID ] || [ $MEDIAID = null ]; then
echo ❌ 上传失败:$UPLOAD_RESULT
exit 1
fi

步骤4:发送文件消息

bash
USER_ID=$2
FILEEXT=${FILENAME##*.}

PAYLOAD=$(jq -n \
--arg robotCode $ROBOT_CODE \
--arg msgKey sampleFile \
--arg mediaId $MEDIA_ID \
--arg fileName $FILE_NAME \
--arg fileType $FILE_EXT \
--arg userId $USER_ID \
{
robotCode: $robotCode,
msgKey: $msgKey,
msgParam: ({
mediaId: $mediaId,
fileName: $fileName,
fileType: $fileType
} | tojson),
userIds: [$userId]
})

SEND_RESULT=$(curl -s -X POST https://api.dingtalk.com/v1.0/robot/oToMessages/batchSend \
-H Content-Type: application/json \
-H x-acs-dingtalk-access-token: $ACCESS_TOKEN \
-d $PAYLOAD)

PROCESSKEY=$(echo $SENDRESULT | jq -r .processQueryKey // empty)

if [ -n $PROCESS_KEY ]; then
echo ✅ 文件发送成功!
echo ProcessQueryKey:$PROCESS_KEY
else
echo ❌ 发送失败:$SEND_RESULT
exit 1
fi

完整脚本

bash
#!/bin/bash

用法:senddingtalkfile.sh <文件路径> <用户ID>


自动从当前会话检测钉钉账号

set -e

OPENCLAW_CONFIG=~/.openclaw/openclaw.json

检查配置文件

if [ ! -f $OPENCLAW_CONFIG ]; then echo ❌ 未找到OpenClaw配置:$OPENCLAW_CONFIG exit 1 fi

检查文件参数

FILE_PATH=$1 USER_ID=$2

if [ -z $FILEPATH ] || [ -z $USERID ]; then
echo 用法:$0 <文件路径> <用户ID>
exit 1
fi

if [ ! -f $FILE_PATH ]; then
echo ❌ 未找到文件:$FILE_PATH
exit 1
fi

从环境获取当前代理ID(由OpenClaw运行时设置)

AGENTID=${OPENCLAWAGENT_ID:-dingtalk-office}

从绑定关系中查找accountId

ACCOUNTID=$(jq -r .bindings[] | select(.agentId == \$AGENTID\) | .match.accountId $OPENCLAW_CONFIG)

回退:如果未找到绑定关系,使用代理ID后缀

if [ -z $ACCOUNTID ] || [ $ACCOUNTID = null ]; then ACCOUNTID=$(echo $AGENTID | sed s/dingtalk-//) fi

从OpenClaw配置读取凭证

APPKEY=$(jq -r .channels.dingtalk.accounts[\$ACCOUNTID\].clientId $OPENCLAW_CONFIG) APPSECRET=$(jq -r .channels.dingtalk.accounts[\$ACCOUNTID\].clientSecret $OPENCLAW_CONFIG) ROBOTCODE=$(jq -r .channels.dingtalk.accounts[\$ACCOUNTID\].robotCode $OPENCLAW_CONFIG)

验证凭证

if [ $APPKEY = null ] || [ $APPSECRET = null ] || [ $ROBOT_CODE = null ]; then echo ❌ 在OpenClaw配置中未找到账号$ACCOUNT_ID。 echo 当前代理:$AGENT_ID echo 可用账号:$(jq -r .channels.dingtalk.accounts | keys | join(, ) $OPENCLAW_CONFIG) exit 1 fi

FILENAME=$(basename $FILEPATH)
FILEEXT=${FILENAME##*.}

获取访问令牌

ACCESS_TOKEN=$(curl -s

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 dingtalk-file-send-1776027349 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 dingtalk-file-send-1776027349 技能

通过命令行安装

skillhub install dingtalk-file-send-1776027349

下载

⬇ 下载 dingtalk-file-send v1.2.2(免费)

文件大小: 3.56 KB | 发布时间: 2026-4-13 10:03

v1.2.2 最新 2026-4-13 10:03
Fix: Add config and env access declarations to metadata

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部