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

150 lines
4.5 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.

// 尝试所有可能的钉钉机器人 API endpoint 来发送图片
const axios = require('axios');
const FormData = require('form-data');
const ACCESS_TOKEN_URL = "https://oapi.dingtalk.com/gettoken";
const UPLOAD_URL = "https://oapi.dingtalk.com/media/upload";
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";
// 已知的机器人 API endpoints
const ROBOT_APIS = [
{
name: "send_to_conversation",
url: (token) => `https://oapi.dingtalk.com/message/send_to_conversation?access_token=${token}`
},
{
name: "sendgroupmessage",
url: (token) => `https://oapi.dingtalk.com/message/sendgroupmessage?access_token=${token}`
},
{
name: "group_send",
url: (token) => `https://oapi.dingtalk.com/group/send?access_token=${token}`
},
{
name: "app_send",
url: (token) => `https://oapi.dingtalk.com/topapi/message/send?access_token=${token}`
},
{
name: "corpconversation_asyncsend",
url: (token) => `https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=${token}`
},
{
name: "conversation_send",
url: (token) => `https://oapi.dingtalk.com/topapi/message/conversation/send?access_token=${token}`
}
];
async function getAccessToken() {
const response = await axios.get(ACCESS_TOKEN_URL, {
params: {
appkey: APP_KEY,
appsecret: APP_SECRET
}
});
return response.data.access_token;
}
async function uploadMedia(accessToken, filePath, type) {
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, apiConfig, mediaId) {
const { name, url } = apiConfig;
const apiUrl = url(accessToken);
try {
console.log(`\n\n尝试 API: ${name}`);
console.log(`URL: ${apiUrl}\n`);
const body = {
msg: {
msgtype: "image",
image: { media_id: mediaId }
},
agent_id: ROBOT_CODE,
userid_list: OPEN_CONVERSATION_ID
};
// 调整 body 参数
if (name === "sendgroupmessage") {
delete body.agent_id;
delete body.userid_list;
body.chatid = OPEN_CONVERSATION_ID;
} else if (name === "conversation_send") {
body.sender = ROBOT_CODE;
body.msg.conversation = OPEN_CONVERSATION_ID;
} else if (name === "corpconversation_asyncsend") {
body.msg.conversation = OPEN_CONVERSATION_ID;
body.msg.sender = ROBOT_CODE;
} else if (name === "app_send") {
body.msg.agent_id = ROBOT_CODE;
body.msg.userid_list = OPEN_CONVERSATION_ID;
}
console.log(`Body: ${JSON.stringify(body, null, 2)}\n`);
const response = await axios.post(apiUrl, body);
if (response.data.errcode === 0) {
console.log(`${name} 成功!`);
console.log(`响应: ${JSON.stringify(response.data, null, 2)}\n`);
return true;
} else {
console.log(`${name} 失败: ${response.data.errmsg}\n`);
return false;
}
} catch (err) {
console.log(`${name} 异常: ${err.response?.data?.errmsg || err.message}\n`);
if (err.response?.data) {
console.log(`详情: ${JSON.stringify(err.response.data, null, 2)}\n`);
}
return false;
}
}
async function main() {
try {
const accessToken = await getAccessToken();
console.log('✓ Access Token 获取成功\n');
const media_id = await uploadMedia(accessToken, IMAGE_PATH, "image");
console.log(`✓ 媒体上传成功: ${media_id}\n`);
// 尝试所有可能的 API
let success = false;
for (const api of ROBOT_APIS) {
success = await trySend(accessToken, api, media_id);
if (success) {
console.log('\n🎉 找到可用的 API');
break;
}
console.log('---');
}
if (!success) {
console.log('\n❌ 所有尝试的 API 都失败了。');
console.log('\n建议');
console.log('1. 检查钉钉开放平台应用配置,确认机器人权限');
console.log('2. 手动发送本地截图到群聊');
console.log(` 文件路径: ${IMAGE_PATH}`);
}
} catch (err) {
console.error('错误:', err.message);
process.exit(1);
}
}
main();