增加自定义hook通知

This commit is contained in:
whyour 2022-09-20 01:16:36 +08:00
parent 4d9bbcfd3f
commit 931638b687
4 changed files with 60 additions and 3 deletions

View File

@ -1,3 +1,5 @@
import { IncomingHttpHeaders } from 'http';
export enum NotificationMode {
'gotify' = 'gotify',
'goCqHttpBot' = 'goCqHttpBot',
@ -12,6 +14,7 @@ export enum NotificationMode {
'iGot' = 'iGot',
'pushPlus' = 'pushPlus',
'email' = 'email',
'webhook' = 'webhook',
}
abstract class NotificationBaseInfo {
@ -87,6 +90,13 @@ export class EmailNotification extends NotificationBaseInfo {
public emailPass: string = '';
}
export class WebhookNotification extends NotificationBaseInfo {
public webhookHeaders: IncomingHttpHeaders = {};
public webhookBody: any = {};
public webhookUrl: string = '';
public webhookMethod: 'GET' | 'POST' | 'PUT' = 'GET';
}
export interface NotificationInfo
extends GoCqHttpBotNotification,
GotifyNotification,
@ -100,4 +110,5 @@ export interface NotificationInfo
WeWorkAppNotification,
IGotNotification,
PushPlusNotification,
EmailNotification {}
EmailNotification,
WebhookNotification {}

View File

@ -26,6 +26,7 @@ export default class NotificationService {
['iGot', this.iGot],
['pushPlus', this.pushPlus],
['email', this.email],
['webhook', this.webhook],
]);
private timeout = 10000;
@ -383,4 +384,19 @@ export default class NotificationService {
return !!info.messageId;
}
private async webhook() {
const { webhookUrl, webhookBody, webhookHeaders, webhookMethod } =
this.params;
const { statusCode } = await got(webhookUrl, {
method: webhookMethod,
headers: webhookHeaders,
body: webhookBody,
timeout: this.timeout,
retry: 0,
});
return String(statusCode).includes('20');
}
}

View File

@ -58,7 +58,9 @@ const NotificationSetting = ({ data }: any) => {
>
<Select onChange={notificationModeChange}>
{config.notificationModes.map((x) => (
<Option value={x.value}>{x.label}</Option>
<Option key={x.value} value={x.value}>
{x.label}
</Option>
))}
</Select>
</Form.Item>
@ -71,7 +73,10 @@ const NotificationSetting = ({ data }: any) => {
rules={[{ required: x.required }]}
style={{ maxWidth: 400 }}
>
<Input.TextArea autoSize={true} placeholder={`请输入${x.label}`} />
<Input.TextArea
autoSize={true}
placeholder={x.placeholder || `请输入${x.label}`}
/>
</Form.Item>
))}
<Button type="primary" htmlType="submit">

View File

@ -92,6 +92,7 @@ export default {
{ value: 'pushPlus', label: 'PushPlus' },
{ value: 'chat', label: '群辉chat' },
{ value: 'email', label: '邮箱' },
{ value: 'webhook', label: '自定义通知' },
{ value: 'closed', label: '已关闭' },
],
notificationModeMap: {
@ -222,6 +223,30 @@ export default {
{ label: 'emailUser', tip: '邮箱地址', required: true },
{ label: 'emailPass', tip: '邮箱SMTP授权码', required: true },
],
webhook: [
{
label: 'webhookMethod',
tip: '请求方法',
required: true,
placeholder: '请输入 GET/POST/PUT',
},
{
label: 'webhookUrl',
tip: '请求链接',
required: true,
placeholder: 'https://xxx.cn/api?query=xxx',
},
{
label: 'webhookHeaders',
tip: '请求头',
placeholder: '{"Custom-Header": "$Header"}',
},
{
label: 'webhookBody',
tip: '请求体',
placeholder: '{"status": "$STATUS"}',
},
],
},
documentTitleMap: {
'/login': '登录',