syntax = "proto3";


import "base.proto";

package com.ywt.gapi.message;

option java_multiple_files = true;
option java_package = "com.ywt.gapi.message";
option java_outer_classname = "MessageProto";


// 通用微信公众号模板消息发送方法，使用内部定义的模板消息编号，需要指定发送的公众号
// 发送微信模板消息请求
// refer: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277
message SendTemplateMessageRequest {
    message Keyword {
        string value = 1;
        string color = 2;
    }
    message MiniProgramParam {
        string appid = 1;
        string pagepath = 2;
    }
    string templateCode = 1; // 内部定义的模板消息编号，定义在template_msg_config表
    string toUser = 2; // 接受模板消息的用户openId
    string url = 3; // 模板跳转链接（可选）
    string miniProgram = 4; // 跳小程序所需数据（可选）包含参数：appid - 所需跳转到的小程序appid（该小程序appid必须与发模板消息的公众号是绑定关联关系，暂不支持小游戏）; pagepath - 所需跳转到小程序的具体页面路径，支持带参数,（示例index?foo=bar），暂不支持小游戏
    string data = 5; // 模板数据，json格式，参数内可以通过value设定值，通过color设置颜色（可选）
    int32 userId = 6;//用户id
    repeated Keyword keywords = 7;
    Keyword firstKeyword = 8;
    Keyword remarkKeyword = 9;
    MiniProgramParam mpParam = 10;
}

// 发送微信模板消息响应
message SendTemplateMessageResponse {
    int32 code = 1;
    string info = 2;
}

//发送小程序订阅消息请求结构体
message SendMPSubscribeMessageRequest{
    message Keyword {
        string key = 1;
        string value = 2;
        string color = 3;
    }
    int32 terminal = 1;
    string touser = 2; //接收者（用户）的 openid
    string templateId = 3; //所需下发的模板消息的id
    string page = 4; //点击模板卡片后的跳转页面，仅限本小程序内的页面。支持带参数,（示例index?foo=bar）。该字段不填则模板无跳转
    repeated Keyword keywords = 5;
}
//发送小程序订阅消息响应结构体
message SendMPSubscribeMessageResponse{
    int32 code = 1;
    string info = 2;
}

// 微信消息相关服务     // 对应 MsgService 项目的 WeChatMsgProvider 类
service WeChatMessageService {
    // 发送微信模板消息
    //Edit on 2018-10-22 17:15:37 by Walker
    //修改内容:MessageService中模板消息记录入库和发送两个方法拆分，这个方法只做消息记录，真正的发送方法是sendTemplateMessageAsync
    rpc sendTemplateMessage (SendTemplateMessageRequest) returns (SendTemplateMessageResponse);
    //发送小程序订阅消息（新）
    rpc sendMPSubscribeMessage (SendMPSubscribeMessageRequest) returns (SendMPSubscribeMessageResponse);
   }
