Browse Source
			
			
			Merge pull request #46 from NiNiyas/slack-webhook
			
				Added Slack webhook notification
			
			
				pull/54/head
			
			
		 
		
			
				
					
						 Louis Lam
					
					4 years ago
						Louis Lam
					
					4 years ago
					
						
							committed by
							
								 GitHub
								GitHub
							
						 
					
				 
				
			 
		 
		
			
				
					
					No known key found for this signature in database
					
						
							GPG Key ID: 4AEE18F83AFDEB23
						
					
				
			
		
		
		
	
		
			
				 2 changed files with 
67 additions and 
1 deletions
			 
			
		 
		
			
				- 
					
					
					 
					server/notification.js
				
- 
					
					
					 
					src/components/NotificationDialog.vue
				
				
				
					
						
							
								
									
	
		
			
				
					|  |  | @ -124,6 +124,58 @@ class Notification { | 
			
		
	
		
			
				
					|  |  |  |             console.log(error) | 
			
		
	
		
			
				
					|  |  |  |             return false; | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |              | 
			
		
	
		
			
				
					|  |  |  |         } else if (notification.type === "slack") { | 
			
		
	
		
			
				
					|  |  |  |             try { | 
			
		
	
		
			
				
					|  |  |  |                 if (heartbeatJSON == null) { | 
			
		
	
		
			
				
					|  |  |  |                     let data = {'text': "Uptime Kuma Slack testing successful."} | 
			
		
	
		
			
				
					|  |  |  |                     let res = await axios.post(notification.slackwebhookURL, data) | 
			
		
	
		
			
				
					|  |  |  |                     return true; | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                 const time = heartbeatJSON["time"]; | 
			
		
	
		
			
				
					|  |  |  |                 let data = { | 
			
		
	
		
			
				
					|  |  |  |                     "blocks": [{ | 
			
		
	
		
			
				
					|  |  |  |                             "type": "header", | 
			
		
	
		
			
				
					|  |  |  |                             "text": { | 
			
		
	
		
			
				
					|  |  |  |                                 "type": "plain_text", | 
			
		
	
		
			
				
					|  |  |  |                                 "text": "Uptime Kuma Alert" | 
			
		
	
		
			
				
					|  |  |  |                             } | 
			
		
	
		
			
				
					|  |  |  |                         }, | 
			
		
	
		
			
				
					|  |  |  |                         { | 
			
		
	
		
			
				
					|  |  |  |                             "type": "section", | 
			
		
	
		
			
				
					|  |  |  |                             "fields": [{ | 
			
		
	
		
			
				
					|  |  |  |                                     "type": "mrkdwn", | 
			
		
	
		
			
				
					|  |  |  |                                     "text": '*Message*\n'+msg | 
			
		
	
		
			
				
					|  |  |  |                                 }, | 
			
		
	
		
			
				
					|  |  |  |                                 { | 
			
		
	
		
			
				
					|  |  |  |                                     "type": "mrkdwn", | 
			
		
	
		
			
				
					|  |  |  |                                     "text": "*Time (UTC)*\n"+time | 
			
		
	
		
			
				
					|  |  |  |                                 } | 
			
		
	
		
			
				
					|  |  |  |                             ] | 
			
		
	
		
			
				
					|  |  |  |                         }, | 
			
		
	
		
			
				
					|  |  |  |                         { | 
			
		
	
		
			
				
					|  |  |  |                                 "type": "actions", | 
			
		
	
		
			
				
					|  |  |  |                                 "elements": [ | 
			
		
	
		
			
				
					|  |  |  |                                     { | 
			
		
	
		
			
				
					|  |  |  |                                         "type": "button", | 
			
		
	
		
			
				
					|  |  |  |                                         "text": { | 
			
		
	
		
			
				
					|  |  |  |                                             "type": "plain_text", | 
			
		
	
		
			
				
					|  |  |  |                                             "text": "Visit Uptime Kuma", | 
			
		
	
		
			
				
					|  |  |  |                                         }, | 
			
		
	
		
			
				
					|  |  |  |                                         "value": "Uptime-Kuma", | 
			
		
	
		
			
				
					|  |  |  |                                         "url": notification.slackbutton | 
			
		
	
		
			
				
					|  |  |  |                                     } | 
			
		
	
		
			
				
					|  |  |  |                                 ] | 
			
		
	
		
			
				
					|  |  |  |                             } | 
			
		
	
		
			
				
					|  |  |  |                         ] | 
			
		
	
		
			
				
					|  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |                 let res = await axios.post(notification.slackwebhookURL, data) | 
			
		
	
		
			
				
					|  |  |  |                 return true; | 
			
		
	
		
			
				
					|  |  |  |             } catch (error) { | 
			
		
	
		
			
				
					|  |  |  |                 console.log(error) | 
			
		
	
		
			
				
					|  |  |  |                 return false; | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         } else { | 
			
		
	
		
			
				
					|  |  |  |             throw new Error("Notification type is not supported") | 
			
		
	
	
		
			
				
					|  |  | 
 | 
			
		
	
								
							
						
					 
					
				 
			 
		
			
			
			
			
			
			
				
				
					
						
							
								
									
	
		
			
				
					|  |  | @ -19,6 +19,7 @@ | 
			
		
	
		
			
				
					|  |  |  |                                     <option value="discord">Discord</option> | 
			
		
	
		
			
				
					|  |  |  |                                     <option value="signal">Signal</option> | 
			
		
	
		
			
				
					|  |  |  |                                     <option value="gotify">Gotify</option> | 
			
		
	
		
			
				
					|  |  |  |                                     <option value="slack">Slack</option> | 
			
		
	
		
			
				
					|  |  |  |                                 </select> | 
			
		
	
		
			
				
					|  |  |  |                             </div> | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | @ -175,7 +176,6 @@ | 
			
		
	
		
			
				
					|  |  |  |                                     <label for="gotify-application-token" class="form-label">Application Token</label> | 
			
		
	
		
			
				
					|  |  |  |                                     <input type="text" class="form-control" id="gotify-application-token" required v-model="notification.gotifyapplicationToken"> | 
			
		
	
		
			
				
					|  |  |  |                                 </div> | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                                 <div class="mb-3"> | 
			
		
	
		
			
				
					|  |  |  |                                     <label for="gotify-server-url" class="form-label">Server URL</label> | 
			
		
	
		
			
				
					|  |  |  |                                     <div class="input-group mb-3"> | 
			
		
	
	
		
			
				
					|  |  | @ -188,6 +188,20 @@ | 
			
		
	
		
			
				
					|  |  |  |                                     <input type="number" class="form-control" id="gotify-priority" v-model="notification.gotifyPriority" required min="0" max="10" step="1"> | 
			
		
	
		
			
				
					|  |  |  |                                 </div> | 
			
		
	
		
			
				
					|  |  |  |                             </template> | 
			
		
	
		
			
				
					|  |  |  |                              | 
			
		
	
		
			
				
					|  |  |  |                         <template v-if="notification.type === 'slack'"> | 
			
		
	
		
			
				
					|  |  |  |                             <div class="mb-3"> | 
			
		
	
		
			
				
					|  |  |  |                                 <label for="slack-webhook-url" class="form-label">Slack Webhook URL</label> | 
			
		
	
		
			
				
					|  |  |  |                                 <input type="text" class="form-control" id="slack-webhook-url" required v-model="notification.slackwebhookURL" autocomplete="false"> | 
			
		
	
		
			
				
					|  |  |  |                                 <label for="gotify-server-url" class="form-label">Uptime Kuma URL</label> | 
			
		
	
		
			
				
					|  |  |  |                                     <div class="input-group mb-3"> | 
			
		
	
		
			
				
					|  |  |  |                                         <input type="text" class="form-control" id="slack-button" required v-model="notification.slackbutton" autocomplete="false"> | 
			
		
	
		
			
				
					|  |  |  |                                     </div> | 
			
		
	
		
			
				
					|  |  |  |                                 <p style="margin-top: 8px;"> | 
			
		
	
		
			
				
					|  |  |  |                                         More info on: <a href="https://api.slack.com/messaging/webhooks" target="_blank">https://api.slack.com/messaging/webhooks</a> | 
			
		
	
		
			
				
					|  |  |  |                                 </p> | 
			
		
	
		
			
				
					|  |  |  |                             </div> | 
			
		
	
		
			
				
					|  |  |  |                         </template> | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                     </div> | 
			
		
	
		
			
				
					|  |  |  |                     <div class="modal-footer"> | 
			
		
	
	
		
			
				
					|  |  | 
 |