[转载]微信企业号不同消息类型发送

我们知道,企业号主要是面向企业需求而生的,因此内部消息的交流显得非常重要,而且发送、回复消息数量应该很可观,对于大企业尤其如此,因此可以结合企业号实现内部消息的交流。企业号具有关注安全、消息无限制等特点,很适合企业内部的环境。本文主要介绍如何利用企业号实现文本、图片、文件、语音、视频、图文消息等消息的发送操作。

1、企业号特点

对于企业号,有以下一些特点:

1)关注更安全

–只有企业通讯录的成员才能关注企业号,分级管理员、保密消息等各种特性确保企业内部信息的安全。

企业可以设置自行验证关注者身份,进行二次安全验证,保证企业信息使用和传递安全。

若员工离职,企业管理员可在通讯录中删除该成员,该成员即自动取消关注企业号,同时微信中的企业号历史记录也会被清除。

2)应用可配置

–企业可自行在企业号中可配置多个服务号,可以连接不同的企业应用系统,只有授权的企业成员才能使用相应的服务号。

3)消息无限制

–发送消息无限制,并提供完善的的管理接口及微信原生能力,以适应企业复杂、个性化的应用场景。

企业可以主动发消息给员工,消息量不受限制

4)使用更便捷

–企业号在微信中有统一的消息入口,用户可以更方便地管理企业号消息。微信通讯录也可以直接访问企业号中的应用。

2、企业号的管理接口内容

目前企业号的内容可以用下面的分层图来展示,分别包含素材管理、被动响应消息、通讯录管理、自定义菜单等内容,详细可以看下面图示。

3、企业号消息和事件的处理

企业号和公众号一样,可以分为消息处理和事件处理,下面是他们两种类型的处理操作,也就发送的消息有文本消息、图片消息、文件消息、视频消息、语音消息、地理文字消息、图文和多媒体消息等。

事件处理主要就是关注、取消关注事件,以及菜单click类型和view类型两种操作,还有就是地理位置上报事件等。

两种类型的处理图如下所示。

4、企业号消息管理

在企业的管理后台,和公众号一样,可以看到对应信息交流记录,包括文字、图片、地理位置等等,如下所示。

由于消息分为几种类型,包括文本(Text)、图片(Image)、文件(File)、语音(Voice)、视频(Video)、图文消息等(News)、MpNews等。

因此我们需要分别对它们进行一定的定义和封装处理,如下是它们的信息对象设计图。

企业号发送消息的官方定义如下:

企业可以主动发消息给员工,消息量不受限制

调用接口时,使用Https协议、JSON数据包格式,数据包不需做加密处理。

目前支持文本、图片、语音、视频、文件、图文等消息类型。除了news类型,其它类型的消息可在发送时加上保密选项,保密消息会被打上水印,并且只有接收者才能阅读。

我们以发送的文本消息为例进行说明,它的定义如下所示。

  • text消息
{
   "touser": "UserID1|UserID2|UserID3",
   "toparty": " PartyID1 | PartyID2 ",
   "totag": " TagID1 | TagID2 ",
   "msgtype": "text",
   "agentid": "1",
   "text": {
       "content": "Holiday Request For Pony(http://xxxxx)"
   },
   "safe":"0"
}
参数 必须 说明
touser UserID列表(消息接收者,多个接收者用‘|’分隔)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送
toparty PartyID列表,多个接受者用‘|’分隔。当touser为@all时忽略本参数
totag TagID列表,多个接受者用‘|’分隔。当touser为@all时忽略本参数
msgtype 消息类型,此时固定为:text
agentid 企业应用的id,整型。可在应用的设置页面查看
content 消息内容
safe 表示是否是保密消息,0表示否,1表示是,默认0

其中每种消息都会包含以下消息所示,也就是它们共同的属性:

    touser": "UserID1|UserID2|UserID3",
   "toparty": " PartyID1 | PartyID2 ",
   "totag": " TagID1 | TagID2 ",
   "msgtype": "text",
   "agentid": "1",

因此我们可以定义一个基类用来方便承载这些共同的信息。

    /// <summary>
    /// 企业号发送消息的基础消息内容
    /// </summary>
    public class CorpSendBase
    {
        /// <summary>
        /// UserID列表(消息接收者,多个接收者用‘|’分隔)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送
        /// </summary>
        public string touser { get; set; }

        /// <summary>
        /// PartyID列表,多个接受者用‘|’分隔。当touser为@all时忽略本参数
        /// </summary>
        public string toparty { get; set; }

        /// <summary>
        /// TagID列表,多个接受者用‘|’分隔。当touser为@all时忽略本参数
        /// </summary>
        public string totag { get; set; }

        /// <summary>
        /// 消息类型
        /// </summary>
        public string msgtype { get; set; }

        /// <summary>
        /// 企业应用的id,整型。可在应用的设置页面查看
        /// </summary>
        public string agentid { get; set; }

        /// <summary>
        /// 表示是否是保密消息,0表示否,1表示是,默认0
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
        public string safe { get; set; }

    }

然后其他消息逐一继承这个基类即可,如下所示。

最终会构成下面这个继承关系图。 

5、消息接口的定义和实现

定义好相关的发送对象后,我们就可以定义它的统一发送接口了,如下所示。

    /// <summary>
    /// 企业号消息管理接口定义
    /// </summary>
    public interface ICorpMessageApi
    {
        /// <summary>
        /// 发送消息。
        /// 需要管理员对应用有使用权限,对收件人touser、toparty、totag有查看权限,否则本次调用失败。
        /// </summary>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        CommonResult SendMessage(string accessToken, CorpSendBase data);
    }

最终,文本等类型的消息会根据接口定义进行实现,实现代码如下所示。注意,发送过程不需要调用加密类进行加密。

    /// <summary>
    /// 企业号消息管理实现类
    /// </summary>
    public class CorpMessageApi : ICorpMessageApi
    {
        /// <summary>
        /// 发送消息。
        /// 需要管理员对应用有使用权限,对收件人touser、toparty、totag有查看权限,否则本次调用失败。
        /// </summary>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public CommonResult SendMessage(string accessToken, CorpSendBase data)
        {
            CommonResult result = new CommonResult();

            string urlFormat = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={0}";
            var url = string.Format(urlFormat, accessToken);
            var postData = data.ToJson();

            //数据不用加密发送
            CorpSendResult sendResult = CorpJsonHelper<CorpSendResult>.ConvertJson(url, postData);
            if (sendResult != null)
            {
                result.Success = (sendResult.errcode == CorpReturnCode.请求成功);
                result.ErrorMessage = string.Format("invaliduser:{0},invalidparty:{1},invalidtag:{2}",
                    sendResult.invaliduser, sendResult.invalidparty, sendResult.invalidtag);
            }

            return result;
        }
    }

6、消息的发送操作和实际效果

定义好相应的发送对象后,我们就可以进行统一的消息发送操作,包括文本、图片、文件、语音等等类型的消息,注意有些消息是需要上传到服务器上,然后在根据mediaId进行发送出去的。

发送文本和图片的操作代码如下所示。

        private void btnSendText_Click(object sender, EventArgs e)
        {
            //发送文本内容
            ICorpMessageApi bll = new CorpMessageApi();

            CorpSendText text = new CorpSendText("API 中文测试(http://www.iqidi.com)");
            text.touser = "wuhuacong";
            text.toparty = "4";//部门ID
            text.totag = "0";

            text.safe = "0";
            text.agentid = "0";

            CommonResult result = bll.SendMessage(token, text);
            if (result != null)
            {
                Console.WriteLine("发送消息:{0} {1} {2}", text.text.content, (result.Success ? "成功" : "失败"), result.ErrorMessage);
            }
        }
        private void btnSendImage_Click(object sender, EventArgs e)
        {
            btnUpload_Click(sender, e);

            if (!string.IsNullOrEmpty(image_mediaId))
            {
                //发送图片内容
                ICorpMessageApi bll = new CorpMessageApi();

                CorpSendImage image = new CorpSendImage(image_mediaId);
                CommonResult result = bll.SendMessage(token, image);
                if (result != null)
                {
                    Console.WriteLine("发送图片消息:{0} {1} {2}", image_mediaId, (result.Success ? "成功" : "失败"), result.ErrorMessage);
                }
            }
        }

最后在微信企业号上截图效果如下所示,包括了文本测试、文件测试、图文测试、语音测试均正常。

 

伍华聪的微信开发的系列课程很不错,推荐学习
另附,微信企业号官方API:http://qydev.weixin.qq.com/wiki/index.php

博客转自:《C#开发微信门户及应用(19)-微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)

时间: 2024-10-24 07:00:01

[转载]微信企业号不同消息类型发送的相关文章

微信企业号开发:消息类型与差别

微信企业号的消息.分成两种,调用微信接口发送的消息在接口文档中叫做发送消息,这样的消息是json格式的.在微信server给我们配置的URL post数据时发送的消息叫做接收消息和事件,须要加密解密,不须要调用微信接口,这样的消息的格式是XML格式的. 两种消息的差别和联系: 发送消息是json格式的,不须要加密解密.须要调用微信的接口,须要AccessToken,这样的消息适用于公众号主动推送下发消息. 接收消息和事件的格式是XML格式的,须要加密,不须要调用微信接口,不须要AccessTok

C#开发微信门户及应用(21)-微信企业号的消息和事件的接收处理及解密

原文:C#开发微信门户及应用(21)-微信企业号的消息和事件的接收处理及解密 在上篇随笔<C#开发微信门户及应用(19)-微信企业号的消息发送(文本.图片.文件.语音.视频.图文消息等)>介绍了有关企业号的消息发送,官方特别声明消息是不用加密发送的.但是在回调的服务器上,也就是我们网站的服务器上,微信传过来的消息是加密的,需要我们调用类库对消息和事件进行解密操作,由于官方的例子不全,因此摸索了不少时间,最终顺利解密收到的各种消息和事件.本文主要介绍 微信企业号的消息和事件的接收处理及解密操作.

C#开发微信门户及应用(19)-微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)

我们知道,企业号主要是面向企业需求而生的,因此内部消息的交流显得非常重要,而且发送.回复消息数量应该很可观,对于大企业尤其如此,因此可以结合企业号实现内部消息的交流.企业号具有关注安全.消息无限制等特点,很适合企业内部的环境.本文主要介绍如何利用企业号实现文本.图片.文件.语音.视频.图文消息等消息的发送操作. 1.企业号特点 对于企业号,有以下一些特点: 1)关注更安全 –只有企业通讯录的成员才能关注企业号,分级管理员.保密消息等各种特性确保企业内部信息的安全. 企业可以设置自行验证关注者身份

[转载]微信企业号开发如何建立连接

连接将使你的企业号更具价值,你可以使用以下三种方式,连接你的企业号及企业应用: 1.企业应用调用企业号提供的接口,管理或查询企业号后台所管理的资源.或给成员发送消息等,以下称主动调用模式. 2.企业号把用户发送的消息或用户触发的事件推送给企业应用,由企业应用处理,以下称回调模式. 3.用户在微信中阅读企业应用下发的H5页面,该页面可以调用微信提供的原生接口,使用微信开放的终端能力,以下称JSAPI模式. 通过这三种连接方式的结合,你可以在企业号中建立功能强大的移动轻应用,并依托微信数亿活跃用户,

微信企业号:shell定时发送图片 到 指定人

#!/bin/bash #返回access token function getToken(){ #传入参数$1为corpid,参数$2为corpsecret     curl -s "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$1&corpsecret=$2" | awk -F '"' '{print $4}' } #返回media_id function getMediaId(){ #传入参数$1为ac

zabbix通过微信企业号发送图文消息

我有篇博客写到如何用微信发送告警消息,实现了发送文字消息,不能带图片,这样不是很直观,最近又研究了一下如何发送图片,写了脚本实现了发送文字+图片的告警. 效果如下: 先发送文字消息,下面挨着graph. 这里只提供脚本和思路,具体配置请看我的另一篇博客:(http://wuhf2015.blog.51cto.com/8213008/1688614#662543) 实现方式: 在Action中设置Default Subject的格式为"状态:#{TRIGGER.STATUS}#主机:#{HOST.

centos6.5编译安装zabbix2.4及微信企业号告警

在centos6.5上编译安装zabbix2.4 zabbix server安装节点为:192.168.1.36 被监控主机节点为:192.168.1.37 本来想在centos6.5上安装zabbix3.0,没想到装到第一步就进行不下去了,百度.谷歌好半天也没搜到答案,好多人也遇到同样的问题:就是进入zabbix的web页面,第一步点击下一步时,现象是页面刷新后,没有进行下一步,所以,只好作罢,改装了zabbix2.4. 还有一个失败是,本来打算使用企业公众号进行微信的zabbix告警实验,但

C#开发微信门户及应用(25)-微信企业号的客户端管理功能

我们知道,微信公众号和企业号都提供了一个官方的Web后台,方便我们对微信账号的配置,以及相关数据的管理功能,对于微信企业号来说,有通讯录中的组织架构管理.标签管理.人员管理.以及消息的发送等功能,其中微信企业号的组织架构和标签可以添加相应的人员,消息发送可以包含文本.图片.语音.视频.图文.文件等内容.对于企业号来说,官方的接口几乎可以无限的发送消息,因此构建一个管理后台,管理企业号的人员,以及用来给企业成员发送消息就是一个很好的功能亮点,有时候可以提高我们企业内部的消息通讯效率和日常工作管理效

java与微信企业号交互

微信企业号接收消息(使用SpringMVC): http://blog.csdn.net/omsvip/article/details/39480577 微信企业号api: http://qydev.weixin.qq.com/wiki/index.php?title=首页 实现步骤简介: http://www.th7.cn/Program/java/201409/286579.shtml