企业微信模板卡片消息

投票选择型和多项选择型卡片仅企业微信3.1.12及以上版本支持

文本通知型、图文展示型和按钮交互型三种卡片仅企业微信3.1.6及以上版本支持(但附件下载功能仍需更新至3.1.12)

微工作台(原企业号)不支持展示模板卡片消息

文本通知型

官网示例效果

 参数示例

{
    "touser":"UserID1|UserID2|UserID3",
    "toparty":"PartyID1 | PartyID2",
    "totag":"TagID1 | TagID2",
    "msgtype":"template_card",
    "agentid":1,
    "template_card":{
        "card_type":"text_notice",
        "source":{
            "icon_url":"图片的url",
            "desc":"企业微信",
            "desc_color":1
        },
        "action_menu":{
            "desc":"卡片副交互辅助文本说明",
            "action_list":[
                {
                    "text":"接受推送",
                    "key":"A"
                },
                {
                    "text":"不再推送",
                    "key":"B"
                }
            ]
        },
        "task_id":"task_id",
        "main_title":{
            "title":"欢迎使用企业微信",
            "desc":"您的好友正在邀请您加入企业微信"
        },
        "quote_area":{
            "type":1,
            "url":"https://work.weixin.qq.com",
            "title":"企业微信的引用样式",
            "quote_text":"企业微信真好用呀真好用"
        },
        "emphasis_content":{
            "title":"100",
            "desc":"核心数据"
        },
        "sub_title_text":"下载企业微信还能抢红包!",
        "horizontal_content_list":[
            {
                "keyname":"邀请人",
                "value":"张三"
            },
            {
                "type":1,
                "keyname":"企业微信官网",
                "value":"点击访问",
                "url":"https://work.weixin.qq.com"
            },
            {
                "type":2,
                "keyname":"企业微信下载",
                "value":"企业微信.apk",
                "media_id":"文件的media_id"
            },
            {
                "type":3,
                "keyname":"员工信息",
                "value":"点击查看",
                "userid":"zhangsan"
            }
        ],
        "jump_list":[
            {
                "type":1,
                "title":"企业微信官网",
                "url":"https://work.weixin.qq.com"
            },
            {
                "type":2,
                "title":"跳转小程序",
                "appid":"小程序的appid",
                "pagepath":"/index.html"
            }
        ],
        "card_action":{
            "type":2,
            "url":"https://work.weixin.qq.com",
            "appid":"小程序的appid",
            "pagepath":"/index.html"
        }
    },
    "enable_id_trans":0,
    "enable_duplicate_check":0,
    "duplicate_check_interval":1800
}

 

参数说明

参数

是否必须

说明

touser

成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送

toparty

部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数

totag

标签ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数

msgtype

消息类型,此时固定为:template_card

agentid

企业应用的id,整型。企业内部开发,可在应用的设置页面查看;第三方服务商,可通过接口 获取企业授权信息 获取该参数值

card_type

模板卡片类型,文本通知型卡片填写 "text_notice"

source

卡片来源样式信息,不需要来源样式可不填写

source.icon_url

来源图片的url,来源图片的尺寸建议为72*72

source.desc

来源图片的描述,建议不超过20个字,(支持id转译)

source.desc_color

来源文字的颜色,目前支持:0(默认) 灰色,1 黑色,2 红色,3 绿色

action_menu

卡片右上角更多操作按钮

action_menu.desc

更多操作界面的描述

action_menu.action_list

操作列表,列表长度取值范围为 [1, 3]

action_menu.action_list.text

操作的描述文案

action_menu.action_list.key

操作key值,用户点击后,会产生回调事件将本参数作为EventKey返回,回调事件会带上该key值,最长支持1024字节,不可重复

main_title.title

一级标题,建议不超过36个字,文本通知型卡片本字段非必填,但不可本字段和sub_title_text都不填,(支持id转译)

main_title.desc

标题辅助信息,建议不超过44个字,(支持id转译)

quote_area

引用文献样式

quote_area.type

引用文献样式区域点击事件,0或不填代表没有点击事件,1 代表跳转url,2 代表跳转小程序

quote_area.url

点击跳转的url,quote_area.type是1时必填

quote_area.appid

点击跳转的小程序的appid,必须是与当前应用关联的小程序,quote_area.type是2时必填

quote_area.pagepath

点击跳转的小程序的pagepath,quote_area.type是2时选填

quote_area.title

引用文献样式的标题

quote_area.quote_text

引用文献样式的引用文案

emphasis_content

关键数据样式

emphasis_content.title

关键数据样式的数据内容,建议不超过14个字

emphasis_content.desc

关键数据样式的数据描述内容,建议不超过22个字

sub_title_text

二级普通文本,建议不超过160个字,(支持id转译)

horizontal_content_list

二级标题+文本列表,该字段可为空数组,但有数据的话需确认对应字段是否必填,列表长度不超过6

horizontal_content_list.type

链接类型,0或不填代表不是链接,1 代表跳转url,2 代表下载附件,3 代表点击跳转成员详情

horizontal_content_list.keyname

二级标题,建议不超过5个字

horizontal_content_list.value

二级文本,如果horizontal_content_list.type是2,该字段代表文件名称(要包含文件类型),建议不超过30个字,(支持id转译)

horizontal_content_list.url

链接跳转的url,horizontal_content_list.type是1时必填

horizontal_content_list.media_id

附件的media_id,horizontal_content_list.type是2时必填

horizontal_content_list.userid

成员详情的userid,horizontal_content_list.type是3时必填

jump_list

跳转指引样式的列表,该字段可为空数组,但有数据的话需确认对应字段是否必填,列表长度不超过3

jump_list.type

跳转链接类型,0或不填代表不是链接,1 代表跳转url,2 代表跳转小程序

jump_list.title

跳转链接样式的文案内容,建议不超过18个字

jump_list.url

跳转链接的url,jump_list.type是1时必填

jump_list.appid

跳转链接的小程序的appid,必须是与当前应用关联的小程序,jump_list.type是2时必填

jump_list.pagepath

跳转链接的小程序的pagepath,jump_list.type是2时选填

card_action

整体卡片的点击跳转事件,text_notice必填本字段

card_action.type

跳转事件类型,1 代表跳转url,2 代表打开小程序。text_notice卡片模版中该字段取值范围为[1,2]

card_action.url

跳转事件的url,card_action.type是1时必填

card_action.appid

跳转事件的小程序的appid,必须是与当前应用关联的小程序,card_action.type是2时必填

card_action.pagepath

跳转事件的小程序的pagepath,card_action.type是2时选填

task_id

任务id,同一个应用任务id不能重复,只能由数字、字母和“_-@”组成,最长128字节,填了action_menu字段的话本字段必填

enable_id_trans

表示是否开启id转译,0表示否,1表示是,默认0

enable_duplicate_check

表示是否开启重复消息检查,0表示否,1表示是,默认0

duplicate_check_interval

表示是否重复消息检查的时间间隔,默认1800s,最大不超过4小时

调用企业微信API

卡片文本通知消息是企业应用消息中的一种类型,也是需要获取授权企业的access_token,

不清楚的可查看《企业微信应用文本》篇的获取【企业凭证】。

参数是根据实际调用设定的,去掉了部分非必须的参数。

实例如下:

/**
 * 发起企业微信应用消息
 * @param $access_token :授权企业access_token
 * @param $params :消息参数
 * @return array|mixed
 */
public function sendAppMsg($access_token, $params)
{
    $url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' . $access_token;
    $info = $this->linkCurl($url, 'POST', $params);
    $res = djson($info);
    if (isset($res['errcode']) && $res['errcode'] != 0) {
        return toFail($res['errmsg']);
    }
    return toSuccess('success', $res);
}

/**
 * 发送卡片文本消息
 * @param $authInfo
 * @param $userid
 * @param $res
 * @return array|bool|mixed|string
 */
public function sendCardTextMsg($authInfo, $userid, $res)
{
    $authInfo = [
        'corpid' => '授权企业id',
        'permanent_code' => '授权企业永久授权码',
        'agentid' => '授权应用id'
    ];
    $userid = '企业微信用户userid';

    $res = [
        'url' => '项目在浏览器中的路径',
        'pagepath' => '小程序跳转路径',
        'title' => '合同需处理',
        'items' => [
            '消息内容' => '与河北天翔服务有限公司的合同未完成签署,即将过期,请及时处理!',
            '操作人员' => '于总',
            '合同编号' => '20231205143706434243',
        ],
    ];
    $url = $res['url'] ?? '';
    $pagepath = $res['pagepath'] ?? '';
    $title = $res['title'];
    if (empty($res['items'])) {
        return toFail('请输入消息内容参数');
    }
    $get_token = $this->getCompanyToken($authInfo['corpid'], $authInfo['permanent_code']);
    if ($get_token['status'] != 1) {
        return $get_token;
    }
    $access_token = $get_token['data']['token'] ?? '';
    // 消息体处理
    $content_list = [];
    foreach ($res['items'] as $k => $v) {
        $content_list[] = ['keyname' => $k, 'value' => $v];
    }
    $params = json([
        "touser" => $userid,
        "msgtype" => "template_card",
        "agentid" => $authInfo['agentid'],
        "template_card" => [
            "card_type" => "text_notice",
            "task_id" => "task_id",
            "main_title" => [
                "title" => "欢迎使用索服电子签",
                "desc" => "您的好友正在邀请您加入索服电子签"
            ],
            "sub_title_text" => $title,
            "horizontal_content_list" => $content_list,
            "jump_list" => [
                [
                    "type" => 1,
                    "title" => "打开桌面应用",
                    "url" => $url,
                ],
                [
                    "type" => 2,
                    "title" => "跳转小程序",
                    "appid" => "跳转小程序的appid",
                    "pagepath" => $pagepath
                ]
            ],
            "card_action" => [
                "type" => 1,
                "url" => "官网地址"
            ]
        ]
    ]);

    return $this->sendAppMsg($access_token, $params);
}

/**
 * 请求接口返回内容
 * @param $url : 请求的URL地址
 * @param $method : 请求方式POST|GET
 * @param bool $params : 请求的参数
 * @param bool $header : 请求头
 * @return bool|string
 */
protected function linkCurl($url, $method, $params = false, $header = false)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
    curl_setopt($ch, CURLOPT_URL, $url);
    //curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_FAILONERROR, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    if (strpos("$" . $url, "https://") == 1) {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    }
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    if ($method == "POST") {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
    } else if ($params) {
        curl_setopt($ch, CURLOPT_URL, $url . '?' . http_build_query($params));
    }
    $response = curl_exec($ch);
    if ($response === FALSE) return false;

    curl_close($ch);
    return $response;
}

最终效果

总结

本篇主要是对企业微信应用消息-卡片模板消息的简单介绍和应用。之前项目中要使用应用模板消息通知用户,但是模板消息参数设置是:优先小程序跳转,其次如果没有小程序路径才会执行pc路径跳转;而我们要达到的效果是pc打开pc路径,手机端打开小程序;所以换成模板卡片-通知型消息。

<think>好的,我现在需要帮助用户了解如何通过企业微信API实现定时发送消息。首先,用户提到了他们之前的问题和回答,所以我要参考之前的引用内容,但可能这些引用并不是完全相关。不过,根据用户的问题,我需要结合企业微信API和定时任务来实现这个功能。 首先,我应该回顾企业微信API的基本使用流程。根据引用[2],发送消息需要企业ID、应用密钥和AgentId。用户需要创建一个企业微信应用,获取这些凭证。然后,调用API获取access_token,再使用这个token发送消息。这一步是关键,因为所有的API调用都需要有效的access_token。 接下来是定时任务的实现。用户提到的引用[3]展示了使用Node.js的node-schedule库来定时执行任务。其他语言可能有不同的库,比如Python的APScheduler或者Java的Quartz。用户可能需要选择他们熟悉的编程语言来实现定时功能。 然后,我需要整合这两个部分。首先编写获取access_token的函数,然后编写发送消息的函数,最后设置定时任务来触发发送。需要注意access_token的有效期是2小时,所以可能需要定时刷新,或者在每次发送前获取新的token,避免过期。 另外,用户可能希望消息内容能够灵活配置,比如发送文本、图文或卡片消息。根据企业微信API文档,不同的消息类型有不同的格式,需要正确构造POST请求的body。 还要考虑错误处理,比如网络请求失败、token失效等情况,需要添加重试机制或日志记录,确保消息发送的可靠性。 最后,部署到服务器或云平台,保持程序长期运行,这样才能保证定时任务持续执行。可能需要使用PM2(Node.js)或类似的进程管理工具来维护应用运行。 现在需要把这些步骤整理成结构化的回答,分步骤说明,并确保符合用户的要求:使用中文,正确格式的LaTeX,生成相关问题等。同时检查是否有遗漏的细节,比如权限配置、应用创建步骤,以及具体的代码示例是否清晰。</think>### 企业微信 API 定时发送消息教程 以下是分步骤实现方案(以 **Node.js** 为例,其他语言逻辑类似): --- #### 一、准备工作 1. **创建企业微信应用** - 登录企业微信后台 ➡ 进入「应用管理」➡ 创建新应用,记录 `AgentId` 和 `Secret` - 在「我的企业」页面获取 `企业ID`(CorpID)[^2] 2. **配置可信域名** - 若需发送图文或卡片消息,需在「企业微信后台」配置可信域名 --- #### 二、获取 Access Token 企业微信 API 调用需使用动态令牌 `access_token`,有效期 2 小时,需定时刷新。 请求地址: $$ \text{https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET} $$ **代码示例**: ```javascript const axios = require('axios'); let corpId = '企业ID'; let agentSecret = '应用Secret'; let accessToken = ''; async function getAccessToken() { const url = `https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=${corpId}&corpsecret=${agentSecret}`; const response = await axios.get(url); accessToken = response.data.access_token; } ``` --- #### 三、发送消息 API 企业微信支持文本、图文、卡片消息类型,以下为文本消息示例: 请求地址: $$ \text{https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=TOKEN} $$ **消息体结构**: ```json { "touser": "@all", // 接收人,如指定用户则填 "UserID1|UserID2" "msgtype": "text", "agentid": 1000002, "text": { "content": "Hello, 这是定时消息" } } ``` **代码示例**: ```javascript async function sendMessage(content) { const url = `https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=${accessToken}`; const data = { touser: "@all", msgtype: "text", agentid: 1000002, text: { content: content } }; await axios.post(url, data); } ``` --- #### 四、定时任务实现 使用 `node-schedule` 模块设置定时规则(Cron 表达式): ```javascript const schedule = require('node-schedule'); // 每天上午9点发送 schedule.scheduleJob('0 0 9 * * *', async () => { await getAccessToken(); // 刷新 Token await sendMessage("今日工作提醒:请提交日报"); }); ``` --- #### 五、部署与优化 1. **服务器部署** - 使用 `PM2` 等工具保持 Node.js 进程常驻 2. **Token 管理** - 定时每 1.5 小时刷新一次 Token,避免过期 3. **消息模板扩展** - 支持 Markdown、图文卡片等格式[^1] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值