##概述
  消息自定义按钮支持业务模块发送消息时，同时消息中包含有按钮.
  
  1,发送消息时传递按钮信息. 消息渠道根据参数显示按钮.
  2,在消息中点击按钮是触发请求回调.
  3,请求回调支持两种模式,1 支持打开e10的页面组件(仅im消息渠道支持),2 支持发送http请求到消息中心(企业微信,钉钉,飞书,im都支持).
  4,http模式,通过dubbo接口将请求发送到业务模块.
  5,打开e10组件模式,  业务模块在组件中处理业务,处理完成之后如果需要修改消息状态,后台调用消息中心dubbo接口修改按钮状态.
  6,对于用户不通过消息,直接到业务模块处理数据时, 如果需要调整消息,调用消息中心dubbo接口处理.
  
  
 整体过程如下:
  - 1,消息发送接口支持传递自定义按钮参数.
  
  - 2,消息按钮处理时，支持两种模式： 1http请求模式； 2 消息打开一个e10组件
  
  - 3，http请求模式 ：   im，企业微信，钉钉都支持
	   企业微信，钉钉：  发送http请求到云桥,然后将请求通过dubbo接口传递到消息中心
	   im： 发送http请求到消息中心
	   由消息中心调用业务模块实现的dubbo接口（com.weaver.mc.api.rest.ImExecuteRest#execute，dubbo接口的group为MessageModule枚举的YqModule字段。）

  - 4，组件模式: 只支持im
       点击按钮，打开一个e10前端组件（组件支持业务模块自定义开发）。

  - 5，消息按钮处理完成之后，支持对消息改动：
        1 修改消息内容(仅im支持).2 隐藏按钮(仅im支持)，3 标记已读（仅im支持）,4 标记已处理(im,云桥都支持，并且此时云桥支持修改替换按钮).
		
      消息改动的方式由两种方式支持:
       1,对于按钮支持http请求模式， 业务模块实现dubbp接口时，可以将需要做改动的通过接口返回到消息中心，后续由消息中心处理。
       2,对于e10组件这种模式。 业务模块可以调用消息中心的接口，对特定消息做改动。（com.weaver.mc.api.async.AsyncSystemMessageRest#executeButtonMsg(ExecuteButtonMsgReq req)）
	   
   
  
  ### 发送按钮消息.
   [消息发送接口](https://im.teamsyun.com/web/#/26/1661 "消息发送接口")  参考接口文档。 
    传递 参数
     private List<ImComponentEntity> buttons;
    //非必填，与buttons配合使用，1代表个人按钮，处理独立，2代表单个按钮处理时，所有接受人都处理了
    // 针对场景， 会议回执，单个用户填写的回执只包含自己的.此时msgShareType=1
    //针对 加入申请，只要有一个管理员同意，所有管理员都认为已经处理了。此时msgShareType=2
     private int msgShareType = 1;
  
  ### 按钮处理.
    按钮处理时，im支持两种模式： 1 Http请求， 2 打开e10组件， 云桥只支持 发送http请求
	
####1,http模式：
业务模块实现消息中心的 com.weaver.mc.api.rest.ImExecuteRest #execute 方法,电脑按钮时消息中心将请求到业务模块的实现代码上.
请求参数由消息发送时业务模块传递过来.
		 请求参数: 消息中心会调用请求参数到业务模块
		  com.weaver.mc.api.entity.im.ImExecuteEntity
		  
		  ```
    @ApiModelProperty("操作模块ID")
    private Integer moduleId;
    @ApiModelProperty("操作事件ID")
    private Integer eventId;
    @ApiModelProperty("消息中心ID")
    private long msgId;
    @ApiModelProperty("消息发送人")
    private UserEntity sender;
    @ApiModelProperty("操作人")
    private UserEntity operator;
    @ApiModelProperty("按钮类型")
    private String buttonFlag;
    @ApiModelProperty("自定义参数")
    private Map<String, String> params;
	```
	
请求应答： 
com.weaver.mc.api.entity.im.ImExecuteEntity#ImExecuteResult
	```
	//执行完成之后对消息的后续处理,1 代表隐藏按钮(仅对im有效，企业微信，钉钉不支持，可以通过包含3标记已处理时，返回buttonI18n按钮替换)，2 标记已读(仅im支持)，3 标记已处理(企业微信,im标记处理时都会隐藏按钮)，4修改消息内容（仅im支持）
	private List<Integer> statues;
    //statues包含4时，才会使用
    @ApiModelProperty("事项信息")
    private Entity entity;
    @ApiModelProperty("国际化对象")
    private I18nEntity i18n;
    @ApiModelProperty("修改消息内容")
     private String text = "";
     /**
      * 按钮国际化，用户处理完成之后，企业微信，钉钉等第三方消息渠道 替换按钮。statues包含3 才会生效
    */
    private long buttonI18n;
```
		 
		 
#### 2.组件模式

[消息发送接口](https://im.teamsyun.com/web/#/3/1036 "消息发送接口")  参考接口文档实现组件

业务组件实现业务逻辑中，需要调用消息中心的接口完成消息状态的变更.

com.weaver.mc.api.async.AsyncSystemMessageRest#executeButtonMsg(ExecuteButtonMsgReq req)

```
     //消息id，调用发送接口返回的data
     private long msgId;
     //模块
     private MessageModule module;
         //MessageModule.code
      private Integer moduleId;
      //事件
     private MessageEvent event;
     //messageEvent.code
	 private Integer eventId;
     //处理人
	 //private UserEntity operator;
	 	//执行完成之后对消息的后续处理,1 代表隐藏按钮(仅对im有效，企业微信，钉钉不支持，可以通过包含3标记已处理时，返回buttonI18n按钮替换)，2 标记已读(仅im支持)，3 标记已处理(企业微信,im标记处理时都会隐藏按钮)，4修改消息内容（仅im支持）
	private List<Integer> statues;
    //statues包含4时，才会使用
    @ApiModelProperty("事项信息")
    private Entity entity;
    @ApiModelProperty("国际化对象")
    private I18nEntity i18n;
    @ApiModelProperty("修改消息内容")
     private String text = "";
     /**
      * 按钮国际化，用户处理完成之后，企业微信，钉钉等第三方消息渠道 替换按钮。statues包含3 才会生效
    */
    private long buttonI18n;
	 

```
