import requests import json import os from requests_toolbelt.multipart.encoder import MultipartEncoder DINGTALK_APP_KEY = "ding4ursdp0l2giat4bj" DINGTALK_APP_SECRET = "J0gBicjKiIHoKla7WfKKhRs1Tv8L6Xd5UhW3EVQByF16G7Vn7UUcRhP6u-PBCQNo" ROBOT_CODE = "ding4ursdp0l2giat4bj" OPEN_CONVERSATION_ID = "cidcjYshXVtKck5LfOO9AqOJg==" FILE_PATH = r"C:\Users\ALC\.openclaw\workspace\前后端功能与开源可修改性分析报告.docx" FILE_NAME = "前后端功能与开源可修改性分析报告.docx" def get_old_api_token(): url = "https://oapi.dingtalk.com/gettoken" params = {'appkey': DINGTALK_APP_KEY, 'appsecret': DINGTALK_APP_SECRET} r = requests.get(url, params=params, timeout=10) result = r.json() if result.get('errcode') == 0: return result['access_token'] raise Exception(f"Get token failed: {result}") def upload_oapi_dingtalk(access_token, file_path): url = "https://oapi.dingtalk.com/media/upload" with open(file_path, 'rb') as f: fields = { 'access_token': access_token, 'type': 'file', 'media': (FILE_NAME, f, 'application/vnd.openxmlformats-officedocument.wordprocessingml.document') } m = MultipartEncoder(fields=fields) headers = {'Content-Type': m.content_type} r = requests.post(url, headers=headers, data=m, timeout=30) return r.json() def send_sample_file_oapi(access_token, media_id): url = "https://oapi.dingtalk.com/robot/send" payload = { "msgtype": "file", "file": { "media_id": media_id }, "openConversationId": OPEN_CONVERSATION_ID } r = requests.post(url, json=payload, timeout=30) return r.json() def main(): try: result_path = r"C:\Users\ALC\.openclaw\workspace\final_send_result_v2.txt" with open(result_path, "w", encoding="utf-8") as f: f.write("=== DingTalk Old API Send Attempt ===\n\n") f.write("Step 1: Get Old API Token\n") token = get_old_api_token() f.write(f"Token: {token}\n\n") f.write("Step 2: Upload File via oapi.dingtalk.com\n") upload_result = upload_oapi_dingtalk(token, FILE_PATH) f.write(f"{json.dumps(upload_result, ensure_ascii=False)}\n\n") if 'media_id' in upload_result: media_id = upload_result['media_id'] f.write(f"Media ID: {media_id}\n\n") f.write("Step 3: Send sampleFile message\n") send_result = send_sample_file_oapi(token, media_id) f.write(f"{json.dumps(send_result, ensure_ascii=False)}\n\n") if send_result.get('errcode') == 0 and send_result.get('processQueryKey'): f.write("=== SUCCESS ===\n") f.write(f"ProcessQueryKey: {send_result['processQueryKey']}\n") else: f.write("=== SEND FAILED ===\n") f.write(f"Error: {send_result.get('errmsg', '')}\n") else: f.write("=== UPLOAD FAILED ===\n") print("Done. Check result_v2.txt") except Exception as e: with open(r"C:\Users\ALC\.openclaw\workspace\final_send_error_v2.txt", "w", encoding="utf-8") as f: f.write(f"Error: {e}\n") import traceback f.write(traceback.format_exc()) print(f"Error: {e}") if __name__ == "__main__": main()