Files
workspace/test_all_param_combinations.js
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

152 lines
4.7 KiB
JavaScript
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.

// 测试不同的格式和组合
const axios = require('axios');
const ACCESS_TOKEN_URL = "https://api.dingtalk.com/v1.0/oauth2/accessToken";
const UPLOAD_URL = "https://oapi.dingtalk.com/media/upload";
const SEND_URL = "https://api.dingtalk.com/v1.0/robot/groupMessages/send";
const APP_KEY = "ding4ursdp0l2giat4bj";
const APP_SECRET = "J0gBicjKiIHoKla7WfKKhRs1Tv8L6Xd5UhW3EVQByF16G7Vn7UUcRhP6u-PBCQNo";
const OPEN_CONVERSATION_ID = "cidcjYshXVtKck5LfOO9AqOJg==";
const ROBOT_CODE = "ding4ursdp0l2giat4bj";
const IMAGE_PATH = "C:/Users/ALC/.openclaw/workspace/yahoo_japan_screenshot.jpg";
async function getAccessToken() {
const response = await axios.post(ACCESS_TOKEN_URL, {
appKey: APP_KEY,
appSecret: APP_SECRET
});
return response.data.accessToken;
}
async function uploadMedia(accessToken, filePath, type) {
const FormData = require('form-data');
const form = new FormData();
form.append('media', require('fs').createReadStream(filePath));
form.append('type', type);
const response = await axios.post(`${UPLOAD_URL}?access_token=${accessToken}`, form, {
headers: form.getHeaders()
});
return response.data.media_id;
}
async function trySend(accessToken, media_id, testCase, index) {
const headers = {
"x-acs-dingtalk-access-token": accessToken,
"Content-Type": "application/json"
};
try {
console.log(`\n\n测试 #${index}: ${testCase.name}`);
console.log(`Body:\n${JSON.stringify(testCase.body, null, 2)}\n`);
const response = await axios.post(SEND_URL, testCase.body, { headers });
if (response.status === 200) {
console.log(`✅ 测试 #${index} 成功!`);
console.log(`响应: ${JSON.stringify(response.data, null, 2)}\n`);
return true;
} else {
console.log(`❌ 测试 #${index} 失败状态码非200\n`);
return false;
}
} catch (err) {
console.log(`❌ 测试 #${index} 异常: ${err.response?.data?.message || err.message}`);
if (err.response?.data) {
console.log(`详情: ${JSON.stringify(err.response.data, null, 2)}\n`);
}
return false;
}
}
async function main() {
try {
console.log('='.repeat(60));
console.log('测试不同的参数组合');
console.log('='.repeat(60));
const accessToken = await getAccessToken();
console.log('✓ Access Token 获取成功');
const media_id = await uploadMedia(accessToken, IMAGE_PATH, "image");
console.log(`✓ 媒体上传成功: ${media_id}`);
// 测试不同的参数组合
const testCases = [
{
name: "photoMediaId 格式(文档推荐)",
body: {
robotCode: ROBOT_CODE,
openConversationId: OPEN_CONVERSATION_ID,
msgKey: "sampleImage",
msgParam: `{"photoMediaId":"${media_id}"}`
}
},
{
name: "mediaId 格式(之前使用的)",
body: {
robotCode: ROBOT_CODE,
openConversationId: OPEN_CONVERSATION_ID,
msgKey: "sampleImage",
msgParam: `{"mediaId":"${media_id}"}`
}
},
{
name: "带 altText 的 photoMediaId",
body: {
robotCode: ROBOT_CODE,
openConversationId: OPEN_CONVERSATION_ID,
msgKey: "sampleImage",
msgParam: `{"photoMediaId":"${media_id}","altText":"日本 Yahoo 首页截图"}`
}
},
{
name: "image msgType",
body: {
robotCode: ROBOT_CODE,
openConversationId: OPEN_CONVERSATION_ID,
msgKey: "image",
msgParam: `{"photoMediaId":"${media_id}"}`
}
},
{
name: "sampleText 引用 media_id",
body: {
robotCode: ROBOT_CODE,
openConversationId: OPEN_CONVERSATION_ID,
msgKey: "sampleText",
msgParam: `{"content":"[图片已上传] media_id: ${media_id},请在钉钉客户端查看"}`
}
}
];
let success = false;
for (let i = 0; i < testCases.length; i++) {
const testCase = testCases[i];
success = await trySend(accessToken, media_id, testCase, i + 1);
if (success) {
console.log(`\n🎉 测试 #${i + 1} 成功!参数组合找到了!`);
break;
}
}
if (!success) {
console.log('\n❌ 所有测试都失败了。');
console.log('\n结论当前应用可能不支持 sampleImage 或图片消息类型。');
console.log('建议:');
console.log('1. 在钉钉开放平台检查应用配置');
console.log('2. 检查机器人是否支持图片消息');
console.log('3. 或者使用手动方式发送本地图片文件');
}
console.log('='.repeat(60));
} catch (err) {
console.error('\n错误:', err.message);
process.exit(1);
}
}
main();