const appkey = '我的appkey';const appsecret = '我的appsecret';let accessToken = null;let expiresAt = 0;var cell = _g().getCellValue("A1", null);const message = "这是来自帆软报表的通知消息。";const atMobiles = ;if(cell=='2'){sendDingTalkMessage(message, atMobiles);}// 获取 access_tokenasync function getAccessToken() {alert(accessToken && Date.now()); const tokenUrl = "https://oapi.dingtalk.com/gettoken?appkey='"+appkey+"'&appsecret='"+appsecret+"'"; try { const response = await fetch(tokenUrl); if (!response.ok) { throw new Error(`请求 access_token 出错,状态码: ${response.status}`); } const result = await response.json(); if (result.errcode === 0) { accessToken = result.access_token; // 提前 10 秒过期,避免边界问题 expiresAt = Date.now() + (result.expires_in - 10) * 1000; return accessToken; } else { throw new Error(`获取 access_token 失败,错误信息: ${result.errmsg}`); } } catch (error) { return null; }}// 发送钉钉消息async function sendDingTalkMessage(message, atMobiles = ) { const token = await getAccessToken(); if (!token) { return; } const webhook = "https://oapi.dingtalk.com/robot/send?access_token='"+token+"'"; const data = { "msgtype": "text", "text": { "content": message }, "at": { "atMobiles": atMobiles, "isAtAll": false } }; try { const response = await fetch(webhook, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }); if (!response.ok) { throw new Error(`请求出错,状态码: ${response.status}`); } const result = await response.json(); if (result.errcode === 0) { console.log("消息发送成功"); } else { console.log(`消息发送失败,错误信息: ${result.errmsg}`); } } catch (error) { console.error(error.message); }}