package com.malk.service.dingtalk;

import java.util.Map;

public interface DDClient_Extension {

    /**
     * 发送钉钉互动卡片 [微应用机器人创建后, 需要次日才能使用, 期间会出现机器人不存在提示]
     *
     * @param cardTemplateId   互动卡片的消息模板ID
     * @param outTrackId       是由开发者自己生成并作为入参传递给钉钉的，钉钉只在对应使用到outTrackId的场景，帮助开发者对TrackId进行记录
     * @param conversationType 0：单聊 1：群聊 [ fixme: openConversationId 必须填写, 通过钉钉事件回调\机器人消息回调\酷应用快捷入口进行获取. 微应用是否配置会话推送不强制 ]
     * @param robotCode        场景群使用     [ 非场景群的企业内部开发-机器人发送单聊：chatBotId和robotCode都不填写，直接用支持单聊的机器人应用来发送 ]
     * @param chatBotId        非场景群的企业内部开发-机器人发送群聊 [ fixme: cardData 内数据参考酷应用卡片内的 mock 格式, 若是表格需要传递 meta 表头 ]
     * @param cardData         卡片数据 { cardData: { cardParamMap : { sys_full_json_obj: JSONString } } }: sys_full_json_obj, 将所有非 String 参数构建成一个 JSONObject
     * @param extInfo          extInfo.put("atOpenIds", UtilMap.map("key", UtilMap.map("**@ALL**", "**@ALL**"))); // 所有人。UtilMap.map("cardOptions", UtilMap.map("supportForward", true)); // 允许转发
     * @implSpec fixme: 注意检查是否没有更换 outTrackId。一般情况下，如果使用了新的 cardTemplateId 或 cardData 等参数，则需要生成一个全新的 outTrackId，否则更改不会生效
     */
    Map sendInteractiveCards(String accessToken, String cardTemplateId, String outTrackId, int conversationType, String robotCode, String chatBotId, String openConversationId, Map cardData, Map extInfo);

    /**
     * 注册互动卡片回调地址
     */
    Map registerInterActiveCard(String access_token, String callback_url, Map extInfo);

    /**
     * 机器人发送群聊消息 [其它参数公司, 参考 发送钉钉互动卡片]
     *
     * @param coolAppCode 当使用群聊酷应用的方式安装机器人时，必须传入此参数
     */
    Map sendGroupMessages(String accessToken, Map msgParam, String msgKey, String openConversationId, String robotCode, String coolAppCode);

    /**
     * 自定义机器人发送群消息
     *
     * @param extInfo 区分消息类型作为不同参数. 另 at { isAtAll: bool } 是否@所有人。
     */
    Map sendMessages(String accessToken, Map msgType, Map extInfo);

}
