# 发送微信消息使用说明 文档类型:模块 API 事实页 是否可直接用于生成代码:是,但 `userid`、`username`、模板标题、模板关键字含义和真实通知内容必须来自用户需求或项目上下文 遇到不确定时:[index.md](index.md)、调用侧账户体系文档、项目实际接口说明、天软科技服务号模板列表 本页整理通过“天软科技服务号”发送微信模板消息的接口事实。它负责告诉智能体“该调用哪个函数、参数顺序是什么、同步和异步怎么选择、状态如何查询”,不负责替用户创造账户、授权关系、模板映射或通知内容。 ## 智能体微信消息决策规则 - 用户要“发送微信通知 / 微信消息 / 微信告警 / 微信模板消息 / 查询微信发送状态”时,优先使用本页。 - 紧急通知、需要立刻知道发送结果时,默认使用 `send_wechat_message(...)`。 - 非紧急通知、批量通知、发送后可稍后查询状态时,默认使用 `send_wechat_message_async(...)`。 - 用户要求查询异步状态时,生成 `get_wechat_message_status(userid, username, wechat_message_id)`;三个实参必须来自参数、已知变量或项目上下文。 - 参数必须严格按接口顺序传入;所有参数按字符串处理。 - `url` 是固定位置参数;无详情地址时传空字符串 `""`。 - `k1` 到 `k6` 的含义由模板标题决定;只按模板映射或用户输入填充,不要发明关键字含义。 - 用户要求“通知第一眼看到”的内容时,放入带字段名的 `kN` 参数;`first` 和 `remark` 只作为点入通知后的详情文本。 - 给他人发消息时,必须使用接收者授权给发送者的 `userid`,不要把发送者自己的 `userid` 当成接收者标识。 - 不要发明 `userid`、`username`、项目封装函数、模板标题、模板关键字、授权关系或账号映射。 ## 前置条件 | 条件 | 说明 | | ------------------------------- | -------------------------------------------------------------------------------------- | | 已绑定服务号 | 首次使用需要关注并绑定“天软科技服务号”,绑定后取得 `userid` | | 已取得 `userid` | `userid` 与用户账户和微信绑定关系相关,应由调用侧提供 | | 给他人发送时已授权 | 接收者绑定后在服务号 `userid` 页面授权发送者账号,发送者使用接收者提供的 `userid` 发送 | | 查询异步状态时已取得 `username` | `username` 是账号名,脚本查询发送状态时需要;来源以项目账户体系为准 | ## 接口总览 | 函数 | 用途 | 返回值 | | ---------------------------------------------------------------------------------------- | ---------------- | ------------------------------------------------- | | `send_wechat_message(userid, url, title, first, remark[, k1, k2, k3, k4, k5, k6])` | 同步发送模板消息 | 成功返回字符串 `success`;失败返回错误信息 | | `send_wechat_message_async(userid, url, title, first, remark[, k1, k2, k3, k4, k5, k6])` | 异步发送模板消息 | 返回 16 位字符串消息 ID | | `get_wechat_message_status(userid, username, wechat_message_id)` | 查询异步发送结果 | 成功返回字符串 `成功`;否则返回状态信息或错误信息 | ## 同步发送 签名: ```text send_wechat_message(userid, url, title, first, remark[, k1, k2, k3, k4, k5, k6]) ``` 参数表: | 参数位置 | 参数名 | 必填 | 接收类型 | 说明 | | -------- | -------- | -------- | -------- | ----------------------------------------------------------------- | | 1 | `userid` | 是 | 字符串 | 绑定账户后取得的用户标识;给他人发送时使用接收者授权后的 `userid` | | 2 | `url` | 是 | 字符串 | 详情地址;没有详情地址时传 `""` | | 3 | `title` | 是 | 字符串 | 模板消息标题,例如 `监控报告通知` | | 4 | `first` | 是 | 字符串 | 详情页开头文本;不作为通知列表首屏字段 | | 5 | `remark` | 是 | 字符串 | 详情页结尾备注;不作为通知列表首屏字段 | | 6 | `k1` | 条件必填 | 字符串 | 模板关键字 1;带字段名的 `kN` 行属于首屏展示字段 | | 7 | `k2` | 条件必填 | 字符串 | 模板关键字 2;带字段名的 `kN` 行属于首屏展示字段 | | 8 | `k3` | 否 | 字符串 | 模板关键字 3;部分模板需要 | | 9 | `k4` | 否 | 字符串 | 模板关键字 4;部分模板需要 | | 10 | `k5` | 否 | 字符串 | 模板关键字 5;部分模板需要 | | 11 | `k6` | 否 | 字符串 | 模板关键字 6;部分模板需要 | 返回值: | 返回值 | 含义 | | ---------- | ------------ | | `success` | 同步发送成功 | | 其他字符串 | 错误信息 | 使用规则: - 同步发送会阻塞当前程序,必须等待发送函数执行完毕后才进入下一步。 - 紧急通知优先使用同步发送。 - 返回值不是 `success` 时,按错误信息处理。 ## 异步发送 签名: ```text send_wechat_message_async(userid, url, title, first, remark[, k1, k2, k3, k4, k5, k6]) ``` 参数表: | 参数位置 | 参数名 | 必填 | 接收类型 | 说明 | | -------- | -------- | -------- | -------- | ----------------------------------------------------------------- | | 1 | `userid` | 是 | 字符串 | 绑定账户后取得的用户标识;给他人发送时使用接收者授权后的 `userid` | | 2 | `url` | 是 | 字符串 | 详情地址;没有详情地址时传 `""` | | 3 | `title` | 是 | 字符串 | 模板消息标题 | | 4 | `first` | 是 | 字符串 | 详情页开头文本;不作为通知列表首屏字段 | | 5 | `remark` | 是 | 字符串 | 详情页结尾备注;不作为通知列表首屏字段 | | 6 | `k1` | 条件必填 | 字符串 | 模板关键字 1;带字段名的 `kN` 行属于首屏展示字段 | | 7 | `k2` | 条件必填 | 字符串 | 模板关键字 2;带字段名的 `kN` 行属于首屏展示字段 | | 8 | `k3` | 否 | 字符串 | 模板关键字 3;部分模板需要 | | 9 | `k4` | 否 | 字符串 | 模板关键字 4;部分模板需要 | | 10 | `k5` | 否 | 字符串 | 模板关键字 5;部分模板需要 | | 11 | `k6` | 否 | 字符串 | 模板关键字 6;部分模板需要 | 返回值: | 返回值 | 含义 | | ----------- | ---------------------------------------------------------- | | 16 位字符串 | 异步消息 ID;前 10 位为 1900 年以来的秒数,后 6 位为随机数 | 使用规则: - 异步发送把命令提交给服务器后立即返回,不等待最终发送结果。 - 非紧急通知优先使用异步发送。 - 需要最终结果时,保存返回的 `wechat_message_id`,再调用 `get_wechat_message_status(...)` 查询。 ## 查询异步发送状态 签名: ```text get_wechat_message_status(userid, username, wechat_message_id) ``` 参数表: | 参数位置 | 参数名 | 必填 | 接收类型 | 说明 | | -------- | ------------------- | ---- | -------- | ---------------------------------------------------- | | 1 | `userid` | 是 | 字符串 | 发送时使用的用户标识 | | 2 | `username` | 是 | 字符串 | 账号名;脚本执行查询时需要,来源以项目账户体系为准 | | 3 | `wechat_message_id` | 是 | 字符串 | `send_wechat_message_async(...)` 返回的 16 位消息 ID | 返回值: | 返回值 | 含义 | | ---------- | ------------------ | | `成功` | 异步消息发送成功 | | 其他字符串 | 状态信息或错误信息 | 调用规则: - 状态查询用于异步发送后的结果确认。 - `username` 按账号名参数、已知变量或项目上下文传入,不写字面量 `"username"`。 - `wechat_message_id` 使用 `send_wechat_message_async(...)` 的返回值。 ## 模板展示规则 | 模板片段 | 展示位置 | 生成规则 | | ----------------------------------- | ---------------------- | ------------------------------------------------ | | `字段名:{{kN}}` | 通知列表首屏可见 | 用户要求“第一眼看到”的信息放到对应 `kN` | | `{{first}}` | 点入通知后的详情页开头 | 放说明、背景、摘要引导;不承载首屏必须展示的信息 | | `{{remark}}` | 点入通知后的详情页结尾 | 放补充说明、处理建议、联系人等尾部信息 | | 字面标题行,例如 `监控报告通知` | 模板固定内容 | 不作为接口参数;接口参数 `title` 仍使用模板标题 | | 动态标签行,例如 `{{k5}}幅:{{k6}}` | 通知列表首屏可见 | `k5` 填字段标签的一部分,`k6` 填对应数值 | 生成规则: - `title` 决定模板,`k1` 到 `k6` 按模板字段名依次填入。 - 有名称的 `kN` 行是首屏展示字段;需要首屏展示的信息优先放入 `kN`。 - `first` 和 `remark` 是详情页内容;不要把“第一眼必须看到”的核心字段放入 `first` 或 `remark`。 - 模板未列出的 `kN` 不主动传入;需要扩展字段时先换模板或由用户提供模板映射。 ## 模板关键字映射 ### 系统监控类 | 模板标题 | `k1` | `k2` | `k3` | `k4` | `k5` | `k6` | | -------------------- | ------------ | ------------ | ------------ | ---- | ---- | ---- | | `系统运行简报` | 系统名称 | 简报内容 | 发布时间 | | | | | `监控报告通知` | 运行状态 | 时间 | | | | | | `监控结果通知` | 监控项目 | 内容 | 时间 | | | | | `告警通知` | 告警内容 | 告警发生时间 | | | | | | `故障恢复通知` | 故障信息 | 恢复时间 | | | | | | `服务器异常监控通知` | 监控通知 | 监控通知类型 | 监控通知内容 | | | | | `服务器宕机通知` | 故障时间 | 故障原因 | | | | | | `服务器恢复通知` | 故障停止时间 | 故障持续时间 | | | | | ### 交易通知类 | 模板标题 | `k1` | `k2` | `k3` | `k4` | `k5` | `k6` | | -------------- | -------- | -------- | -------- | -------- | -------- | -------- | | `交易成功通知` | 交易金额 | 交易类型 | 交易时间 | 交易单号 | | | | `交易完成通知` | 股票简称 | 股票代码 | 股票价格 | 交易状态 | 股票数量 | | | `交易下单通知` | 交易品种 | 下单方向 | 下单价格 | 止损价格 | 下单时间 | | | `成交回报提示` | 证券名称 | 证券代码 | 买卖标识 | 成交价格 | 成交数量 | 成交时间 | | `委托成交提醒` | 数量 | 价格 | 时间 | | | | ### 策略通知类 | 模板标题 | `k1` | `k2` | `k3` | `k4` | `k5` | `k6` | | ------------------ | -------- | ---------- | ------------ | ---------- | ------------------------- | ------ | | `投资策略更新提醒` | 策略名称 | 操作风格 | 目前策略收益 | | | | | `股票调仓通知` | 股票名称 | 操作类型 | 调仓时间 | 调仓价格 | 调仓仓位 | | | `实时建仓提醒` | 品种 | 方向 | 仓位 | 价格 | 止盈止损 | | | `个股到价通知` | 股票名 | 当前成交价 | 预警价 | | | | | `个股涨跌幅通知` | 股票名 | 当前成交价 | 对比日期 | 对比收盘价 | 动态标签,组成 `{{k5}}幅` | 动态值 | ### 其他通知类 | 模板标题 | `k1` | `k2` | `k3` | `k4` | `k5` | `k6` | | ------------------ | -------- | -------- | ---- | ---- | ---- | ---- | | `账号绑定成功通知` | 账号名称 | 绑定时间 | | | | | | `服务开启通知` | | | | | | | | `授权请求通知` | 申请人 | 请求权限 | | | | | `服务开启通知` 当前只记录模板标题,未固定 `k1` 到 `k6` 的字段映射。 ## 发送示例 同步发送系统运行简报: ```tsl function SendSystemBrief(user_id); begin url := ""; title := "系统运行简报"; first := "系统运行情况如下。"; k1 := "风控服务"; k2 := "运行正常"; dateTimeToString(k3, "YYYY-MM-DD HH:NN:SS", now()); remark := "如有疑问请联系值班人员。"; return send_wechat_message(user_id, url, title, first, remark, k1, k2, k3); end; ``` 异步发送并保留消息 ID: ```tsl function SendSystemBriefAsync(user_id); begin url := ""; title := "系统运行简报"; first := "系统运行情况如下。"; k1 := "风控服务"; k2 := "运行正常"; dateTimeToString(k3, "YYYY-MM-DD HH:NN:SS", now()); remark := "如有疑问请联系值班人员。"; return send_wechat_message_async(user_id, url, title, first, remark, k1, k2, k3); end; ``` 查询异步发送结果: ```tsl function QueryWechatMessageStatus(user_id, username, wechat_message_id); begin return get_wechat_message_status(user_id, username, wechat_message_id); end; ```