微信企业号的消息发送

转载 2017年02月28日 23:55:02

转载:http://www.csdn.net/article/a/2014-10-13/15820372

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

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);                 }             }         }

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

 


微信企业号(三)-发送消息给企业号指定成员

1、通过代码控制微信企业号向指定成员发送消息。 发送消息的URL:https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCES...
  • u014520797
  • u014520797
  • 2015年11月08日 21:56
  • 12804

微信企业号开发:主动发送消息

主企业号主动发送消息,也就是企业号主动推送的消息,适合于企业的通知,通告等。因此如果公司有通知,要求通知到所有员工,就应该使用主动发送消息。 格式是json格式,而且微信很灵活,当touser,...
  • yelin042
  • yelin042
  • 2017年04月17日 14:23
  • 888

[企业公众号]升级到[企业微信]之后发送消息失败

最近,看到消息,说是微信把企业公众号升级到企业微信。当时并没有在意,但是后来发现之前用企业公众号的接口来发通知消息的程序发不出去消息了。于是,我又打开升级消息,仔细的读了一下:企业号将迁移至企业微信管...
  • felix_yujing
  • felix_yujing
  • 2017年06月06日 19:56
  • 2339

微信企业号,发送消息

//微信企业号,调用发送消息接口,简单的,复杂的图文可以重新定义一个List解析成json后丢进去 public void sendMsg(HttpSession session,String ms...
  • zhuyu19911016520
  • zhuyu19911016520
  • 2015年03月15日 17:13
  • 3936

微信企业号验证/发送/接收消息

1.  内网映射    由于微信企业号回调模式的URL尽支持域名方式访问,估需要注册花生壳,做一个内网穿透(需要花16块钱,购买一个免费版,购买之后,第二天才能添加上域名) 2.  微信企业号 ...
  • hichinamobile
  • hichinamobile
  • 2016年07月01日 17:44
  • 7191

微信企业号开发:主动发送消息

主企业号主动发送消息,也就是企业号主动推送的消息,适合于企业的通知,通告等。因此如果公司有通知,要求通知到所有员工,就应该使用主动发送消息。格式是json格式,而且微信很灵活,当touser,topa...
  • xuexiaodong2009
  • xuexiaodong2009
  • 2015年07月24日 09:05
  • 6620

C#微信企业号发送消息Sample

  • 2016年08月23日 14:31
  • 3.65MB
  • 下载

微信企业号开发—发送消息

开始回调模式后我们就要实现聊天功能了。平时使用微信聊天可以发送文本消息、语音、图片、视频等,这里只实现了其中的一些功能和大家分享。 一、与微信企业号建立连接  1、企业应用调用企业号提供的接口,管...
  • qq877507054
  • qq877507054
  • 2016年05月13日 15:37
  • 3914

通过sql语句发送微信消息(转)

通过sql语句发送微信消息? 您可以使用EasySQLMAIL的接口功能来实现你的需求。具体做法如下: 1、在您的数据源配置中勾选相应数据源上的“外部接口功能”中的“允许从该数据源上的...
  • pb90001
  • pb90001
  • 2017年11月17日 11:29
  • 587

json和map以及javabean之间的转换

在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别。下面接着介绍用org.json构造和解析Jso...
  • dongfengkuayue
  • dongfengkuayue
  • 2015年06月04日 15:18
  • 4637
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:微信企业号的消息发送
举报原因:
原因补充:

(最多只允许输入30个字)