Files
workspace/send_dingtalk_image.ps1
aitest 15c4480db1 Add OpenClaw workspace configuration and tools
- Add agent configuration files (AGENTS.md, USER.md, IDENTITY.md, SOUL.md)
- Add git configuration and skills management scripts
- Add frontend/backend analysis tools and reports
- Add DingTalk media sender utilities and documentation
- Fix OpenClaw runtime environment (Node.js and Python)
- Configure git remotes and push scripts
2026-03-05 13:56:59 +09:00

132 lines
4.4 KiB
PowerShell
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 发送图片到钉钉群聊
$ErrorActionPreference = "Stop"
# 钉钉配置
$APP_KEY = "ding4ursdp0l2giat4bj"
$APP_SECRET = "J0gBicjKiIHoKla7WfKKhRs1Tv8L6Xd5UhW3EVQByF16G7Vn7UUcRhP6u-PBCQNo"
$OPEN_CONVERSATION_ID = "cidcjYshXVtKck5LfOO9AqOJg=="
$ROBOT_CODE = "4293382733"
$IMAGE_PATH = "C:\Users\ALC\.openclaw\media\browser\1ad3cfc9-2dd5-496b-9fa5-26d23b973f76.jpg"
Write-Host "====================================" -ForegroundColor Cyan
Write-Host "开始发送图片到钉钉群聊" -ForegroundColor Cyan
Write-Host "====================================" -ForegroundColor Cyan
# 步骤 1: 获取 Access Token
Write-Host "`n步骤 1: 获取 Access Token..." -ForegroundColor Yellow
$tokenUrl = "https://api.dingtalk.com/v1.0/oauth2/accessToken"
$tokenHeaders = @{
"Content-Type" = "application/json"
}
$tokenBody = @{
appKey = $APP_KEY
appSecret = $APP_SECRET
} | ConvertTo-Json
try {
$tokenResponse = Invoke-RestMethod -Uri $tokenUrl -Method Post -Headers $tokenHeaders -Body $tokenBody
$accessToken = $tokenResponse.accessToken
if ($accessToken) {
Write-Host "✅ Access Token 获取成功" -ForegroundColor Green
} else {
Write-Host "❌ 获取 Access Token 失败" -ForegroundColor Red
exit 1
}
} catch {
Write-Host "❌ 获取 Access Token 异常: $($_.Exception.Message)" -ForegroundColor Red
exit 1
}
# 步骤 2: 上传媒体文件
Write-Host "`n步骤 2: 上传媒体文件..." -ForegroundColor Yellow
if (-not (Test-Path $IMAGE_PATH)) {
Write-Host "❌ 文件不存在: $IMAGE_PATH" -ForegroundColor Red
exit 1
}
$fileSize = (Get-Item $IMAGE_PATH).Length
Write-Host "📁 文件大小: $fileSize bytes ($($fileSize / 1MB).ToString('F2')) MB" -ForegroundColor Cyan
$uploadUrl = "https://api.dingtalk.com/v1.0/media/upload"
$uploadHeaders = @{
"x-acs-dingtalk-access-token" = $accessToken
}
$FileStream = [System.IO.FileStream]::new($IMAGE_PATH, [System.IO.FileMode]::Open)
$FileContent = [System.IO.FileStream]::new($IMAGE_PATH, [System.IO.FileMode]::Open)
# 准备 multipart/form-data
$boundary = [System.Guid]::NewGuid().ToString()
$LF = "`r`n"
$bodyLines = @()
# 添加 file 字段
$bodyLines += "--$boundary"
$bodyLines += "Content-Disposition: form-data; name=`"file`"; filename=`"$([System.IO.Path]::GetFileName($IMAGE_PATH))`""
$bodyLines += "Content-Type: application/octet-stream"
$bodyLines += ""
$bodyLines += [System.IO.File]::ReadAllBytes($IMAGE_PATH)
$bodyLines += "--$boundary--"
try {
$uploadHeaders.Add("Content-Type", "multipart/form-data; boundary=$boundary")
$body = $bodyLines -join $LF
$uploadResponse = Invoke-RestMethod -Uri "$uploadUrl?type=image" -Method Post -Headers $uploadHeaders -Body $body
$mediaId = $uploadResponse.mediaId
if ($mediaId) {
Write-Host "✅ 文件上传成功mediaId: $mediaId" -ForegroundColor Green
} else {
Write-Host "❌ 上传失败" -ForegroundColor Red
exit 1
}
} catch {
Write-Host "❌ 上传异常: $($_.Exception.Message)" -ForegroundColor Red
exit 1
} finally {
$FileStream.Dispose()
$FileContent.Dispose()
}
# 步骤 3: 发送媒体消息到群聊
Write-Host "`n步骤 3: 发送媒体消息到群聊..." -ForegroundColor Yellow
$sendUrl = "https://api.dingtalk.com/v1.0/robot/orgGroupSend"
$sendHeaders = @{
"x-acs-dingtalk-access-token" = $accessToken
"Content-Type" = "application/json"
}
$sendBody = @{
openConversationId = $OPEN_CONVERSATION_ID
robotCode = $ROBOT_CODE
msgKey = "sampleImage"
msgParam = @{
mediaId = $mediaId
altText = "日本 Yahoo 首页截图"
} | ConvertTo-Json -Depth 3
} | ConvertTo-Json -Depth 3
try {
$sendResponse = Invoke-RestMethod -Uri $sendUrl -Method Post -Headers $sendHeaders -Body $sendBody
if ($sendResponse.processQueryKey) {
Write-Host "✅ 消息发送成功processQueryKey: $($sendResponse.processQueryKey)" -ForegroundColor Green
} else {
Write-Host "❌ 发送失败" -ForegroundColor Red
exit 1
}
} catch {
Write-Host "❌ 发送异常: $($_.Exception.Message)" -ForegroundColor Red
Write-Host "响应内容: $($_.ErrorDetails.Message)" -ForegroundColor Red
exit 1
}
Write-Host "`n====================================" -ForegroundColor Green
Write-Host "✅ 发送成功!" -ForegroundColor Green
Write-Host "====================================" -ForegroundColor Green