feat(系统设置): 飞书机器人

This commit is contained in:
wenyann 2021-04-09 15:56:06 +08:00 committed by 刘瑞斌
parent 2a5e13bfce
commit 80fa6cd4b6
11 changed files with 99 additions and 4 deletions

View File

@ -18,6 +18,7 @@ public interface NoticeConstants {
String EMAIL = "EMAIL"; String EMAIL = "EMAIL";
String NAIL_ROBOT = "NAIL_ROBOT"; String NAIL_ROBOT = "NAIL_ROBOT";
String WECHAT_ROBOT = "WECHAT_ROBOT"; String WECHAT_ROBOT = "WECHAT_ROBOT";
String LARK = "LARK";
} }
interface Event { interface Event {

View File

@ -0,0 +1,23 @@
package io.metersphere.notice.sender.impl;
import io.metersphere.notice.domain.MessageDetail;
import io.metersphere.notice.message.TextMessage;
import io.metersphere.notice.sender.AbstractNoticeSender;
import io.metersphere.notice.sender.NoticeModel;
import io.metersphere.notice.util.LarkClient;
import org.springframework.stereotype.Component;
@Component
public class LarkNoticeSender extends AbstractNoticeSender {
public void sendLark(MessageDetail messageDetail, String context) {
//TextMessage message = new TextMessage(context);
LarkClient.send(messageDetail.getWebhook(), context);
}
@Override
public void send(MessageDetail messageDetail, NoticeModel noticeModel) {
String context = super.getContext(messageDetail, noticeModel);
sendLark(messageDetail, context);
}
}

View File

@ -7,6 +7,7 @@ import io.metersphere.notice.domain.MessageDetail;
import io.metersphere.notice.sender.NoticeModel; import io.metersphere.notice.sender.NoticeModel;
import io.metersphere.notice.sender.NoticeSender; import io.metersphere.notice.sender.NoticeSender;
import io.metersphere.notice.sender.impl.DingNoticeSender; import io.metersphere.notice.sender.impl.DingNoticeSender;
import io.metersphere.notice.sender.impl.LarkNoticeSender;
import io.metersphere.notice.sender.impl.MailNoticeSender; import io.metersphere.notice.sender.impl.MailNoticeSender;
import io.metersphere.notice.sender.impl.WeComNoticeSender; import io.metersphere.notice.sender.impl.WeComNoticeSender;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -23,6 +24,8 @@ public class NoticeSendService {
@Resource @Resource
private DingNoticeSender dingNoticeSender; private DingNoticeSender dingNoticeSender;
@Resource @Resource
private LarkNoticeSender larkNoticeSender;
@Resource
private NoticeService noticeService; private NoticeService noticeService;
private NoticeSender getNoticeSender(MessageDetail messageDetail) { private NoticeSender getNoticeSender(MessageDetail messageDetail) {
@ -37,6 +40,8 @@ public class NoticeSendService {
case NoticeConstants.Type.NAIL_ROBOT: case NoticeConstants.Type.NAIL_ROBOT:
noticeSender = dingNoticeSender; noticeSender = dingNoticeSender;
break; break;
case NoticeConstants.Type.LARK:
noticeSender = larkNoticeSender;
default: default:
break; break;
} }

View File

@ -0,0 +1,57 @@
package io.metersphere.notice.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import io.metersphere.notice.message.Message;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
public class LarkClient {
public static SendResult send(String webhook, String context) {
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = null;
Map<String, Object> mp = new LinkedHashMap<>();
JSONObject js = new JSONObject();
js.put("text", context);
mp.put("msg_type", "text");
mp.put("content", js);
SendResult sendResult = new SendResult();
try {
// 创建Http Post请求
HttpPost httpPost = new HttpPost(webhook);
// 创建请求内容
StringEntity entity = new StringEntity(JSON.toJSONString(mp), ContentType.APPLICATION_JSON);
httpPost.setEntity(entity);
// 执行http请求
response = httpClient.execute(httpPost);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String result = EntityUtils.toString(response.getEntity());
JSONObject obj = JSONObject.parseObject(result);
Integer errcode = obj.getInteger("errcode");
sendResult.setErrorCode(errcode);
sendResult.setErrorMsg(obj.getString("errmsg"));
sendResult.setIsSuccess(errcode.equals(0));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
response.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sendResult;
}
}

View File

@ -182,7 +182,9 @@ export default {
receiveTypeOptions: [ receiveTypeOptions: [
{value: 'EMAIL', label: this.$t('organization.message.mail')}, {value: 'EMAIL', label: this.$t('organization.message.mail')},
{value: 'NAIL_ROBOT', label: this.$t('organization.message.nail_robot')}, {value: 'NAIL_ROBOT', label: this.$t('organization.message.nail_robot')},
{value: 'WECHAT_ROBOT', label: this.$t('organization.message.enterprise_wechat_robot')} {value: 'WECHAT_ROBOT', label: this.$t('organization.message.enterprise_wechat_robot')},
{value: 'LARK', label: this.$t('organization.message.lark')}
], ],
}; };
}, },

View File

@ -203,7 +203,8 @@ export default {
receiveTypeOptions: [ receiveTypeOptions: [
{value: 'EMAIL', label: this.$t('organization.message.mail')}, {value: 'EMAIL', label: this.$t('organization.message.mail')},
{value: 'NAIL_ROBOT', label: this.$t('organization.message.nail_robot')}, {value: 'NAIL_ROBOT', label: this.$t('organization.message.nail_robot')},
{value: 'WECHAT_ROBOT', label: this.$t('organization.message.enterprise_wechat_robot')} {value: 'WECHAT_ROBOT', label: this.$t('organization.message.enterprise_wechat_robot')},
{value: 'LARK', label: this.$t('organization.message.lark')}
], ],
} }
}, },

View File

@ -192,7 +192,8 @@ export default {
receiveTypeOptions: [ receiveTypeOptions: [
{value: 'EMAIL', label: this.$t('organization.message.mail')}, {value: 'EMAIL', label: this.$t('organization.message.mail')},
{value: 'NAIL_ROBOT', label: this.$t('organization.message.nail_robot')}, {value: 'NAIL_ROBOT', label: this.$t('organization.message.nail_robot')},
{value: 'WECHAT_ROBOT', label: this.$t('organization.message.enterprise_wechat_robot')} {value: 'WECHAT_ROBOT', label: this.$t('organization.message.enterprise_wechat_robot')},
{value: 'LARK', label: this.$t('organization.message.lark')}
], ],
}; };
}, },

View File

@ -192,7 +192,9 @@ export default {
receiveTypeOptions: [ receiveTypeOptions: [
{value: 'EMAIL', label: this.$t('organization.message.mail')}, {value: 'EMAIL', label: this.$t('organization.message.mail')},
{value: 'NAIL_ROBOT', label: this.$t('organization.message.nail_robot')}, {value: 'NAIL_ROBOT', label: this.$t('organization.message.nail_robot')},
{value: 'WECHAT_ROBOT', label: this.$t('organization.message.enterprise_wechat_robot')} {value: 'WECHAT_ROBOT', label: this.$t('organization.message.enterprise_wechat_robot')},
{value: 'LARK', label: this.$t('organization.message.lark')}
], ],
}; };
}, },

View File

@ -298,6 +298,7 @@ export default {
mail: 'mail', mail: 'mail',
nail_robot: 'Nail robot', nail_robot: 'Nail robot',
enterprise_wechat_robot: 'Enterprise wechat robot', enterprise_wechat_robot: 'Enterprise wechat robot',
lark: "Flying Book Robot",
notes: '1. Nail and create a custom robot in the enterprise group, and then copy the webhook address on our platform;\n' + notes: '1. Nail and create a custom robot in the enterprise group, and then copy the webhook address on our platform;\n' +
'\n' + '\n' +
'2. Robots are selected as swarm robots, and "custom keyword" is selected for security verification: "task notification";\n' + '2. Robots are selected as swarm robots, and "custom keyword" is selected for security verification: "task notification";\n' +

View File

@ -299,6 +299,7 @@ export default {
mail: '邮件', mail: '邮件',
nail_robot: '钉钉机器人', nail_robot: '钉钉机器人',
enterprise_wechat_robot: '企业微信机器人', enterprise_wechat_robot: '企业微信机器人',
lark: '飞书机器人',
notes: '1.钉钉和企业群里新建一个自定义机器人,然后复制 webhook 地址在我们平台上;\n' + notes: '1.钉钉和企业群里新建一个自定义机器人,然后复制 webhook 地址在我们平台上;\n' +
' 2.机器人选择为群机器人,安全验证选择“自定义关键词” "任务通知";\n' + ' 2.机器人选择为群机器人,安全验证选择“自定义关键词” "任务通知";\n' +
' 3.选择接收人时必须是你所建的群里包含的人,接收人手机号为必填项且为钉钉企业所使用的手机号,', ' 3.选择接收人时必须是你所建的群里包含的人,接收人手机号为必填项且为钉钉企业所使用的手机号,',

View File

@ -299,6 +299,7 @@ export default {
mail: '郵件', mail: '郵件',
nail_robot: '釘釘機器人', nail_robot: '釘釘機器人',
enterprise_wechat_robot: '企業微信機器人', enterprise_wechat_robot: '企業微信機器人',
lark: '飛書機器人',
notes: '1.釘釘和企業群裏新建壹個自定義機器人,然後復制 webhook 地址在我們平臺上;\n' + notes: '1.釘釘和企業群裏新建壹個自定義機器人,然後復制 webhook 地址在我們平臺上;\n' +
' 2.機器人選擇為群機器人,安全驗證選擇“自定義關鍵詞” "任務通知";\n' + ' 2.機器人選擇為群機器人,安全驗證選擇“自定義關鍵詞” "任務通知";\n' +
' 3.選擇接收人時必須是妳所建的群裏包含的人,接收人手機號為必填項且為釘釘企業所使用的手機號,', ' 3.選擇接收人時必須是妳所建的群裏包含的人,接收人手機號為必填項且為釘釘企業所使用的手機號,',