26 changed files with 112 additions and 0 deletions
			
			
		| @ -0,0 +1,41 @@ | |||||
|  | const NotificationProvider = require("./notification-provider"); | ||||
|  | const axios = require("axios"); | ||||
|  | 
 | ||||
|  | class PromoSMS extends NotificationProvider { | ||||
|  | 
 | ||||
|  |     name = "promosms"; | ||||
|  | 
 | ||||
|  |     async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { | ||||
|  |         let okMsg = "Sent Successfully."; | ||||
|  | 
 | ||||
|  |         try { | ||||
|  |             let config = { | ||||
|  |                 headers: { | ||||
|  |                     "Content-Type": "application/json", | ||||
|  |                     "Authorization": "Basic " + Buffer.from(notification.promosmsLogin + ":" + notification.promosmsPassword).toString('base64'), | ||||
|  |                     "Accept": "text/json", | ||||
|  |                 } | ||||
|  |             }; | ||||
|  |             let data = { | ||||
|  |                 "recipients": [ notification.promosmsPhoneNumber ], | ||||
|  |                 //Lets remove non ascii char
 | ||||
|  |                 "text": msg.replace(/[^\x00-\x7F]/g, ""), | ||||
|  |                 "type": Number(notification.promosmsSMSType), | ||||
|  |                 "sender": notification.promosmsSenderName | ||||
|  |             }; | ||||
|  | 
 | ||||
|  |             let resp = await axios.post("https://promosms.com/api/rest/v3_2/sms", data, config); | ||||
|  | 
 | ||||
|  |             if (resp.data.response.status !== 0) { | ||||
|  |                 let error = "Something gone wrong. Api returned " + resp.data.response.status + "."; | ||||
|  |                 this.throwGeneralAxiosError(error); | ||||
|  |             } | ||||
|  |              | ||||
|  |             return okMsg; | ||||
|  |         } catch (error) { | ||||
|  |             this.throwGeneralAxiosError(error); | ||||
|  |         } | ||||
|  |     } | ||||
|  | } | ||||
|  | 
 | ||||
|  | module.exports = PromoSMS; | ||||
| @ -0,0 +1,39 @@ | |||||
|  | <template> | ||||
|  |     <div class="mb-3"> | ||||
|  |         <label for="promosms-login" class="form-label">API LOGIN</label> | ||||
|  |         <input id="promosms-login" v-model="$parent.notification.promosmsLogin" type="text" class="form-control" required> | ||||
|  |         <label for="promosms-key" class="form-label">API PASSWORD</label> | ||||
|  |         <HiddenInput id="promosms-key" v-model="$parent.notification.promosmsPassword" :required="true" autocomplete="one-time-code"></HiddenInput> | ||||
|  |     </div> | ||||
|  |     <div class="mb-3"> | ||||
|  |         <label for="promosms-type-sms" class="form-label">{{ $t("SMS Type") }}</label> | ||||
|  |         <select id="promosms-type-sms" v-model="$parent.notification.promosmsSMSType" class="form-select"> | ||||
|  |             <option value="0">{{ $t("promosmsTypeFlash") }}</option> | ||||
|  |             <option value="1">{{ $t("promosmsTypeEco") }}</option> | ||||
|  |             <option value="2">{{ $t("promosmsTypeFull") }}</option> | ||||
|  |             <option value="3">{{ $t("promosmsTypeSpeed") }}</option> | ||||
|  |         </select> | ||||
|  |         <i18n-t tag="div" keypath="Check PromoSMS prices" class="form-text"> | ||||
|  |             <a href="https://promosms.com/cennik/" target="_blank">https://promosms.com/cennik/</a> | ||||
|  |         </i18n-t> | ||||
|  |     </div> | ||||
|  |     <div class="mb-3"> | ||||
|  |         <label for="promosms-phone-number" class="form-label">{{ $t("promosmsPhoneNumber") }}</label> | ||||
|  |         <input id="promosms-phone-number" v-model="$parent.notification.promosmsPhoneNumber" type="text" class="form-control" required> | ||||
|  |     </div> | ||||
|  |     <div class="mb-3"> | ||||
|  |         <label for="promosms-sender-name" class="form-label">{{ $t("promosmsSMSSender") }}</label> | ||||
|  |         <input id="promosms-sender-name" v-model="$parent.notification.promosmsSenderName" type="text" minlength="3" maxlength="11" class="form-control"> | ||||
|  |     </div> | ||||
|  | 
 | ||||
|  | </template> | ||||
|  | 
 | ||||
|  | <script> | ||||
|  | import HiddenInput from "../HiddenInput.vue"; | ||||
|  | 
 | ||||
|  | export default { | ||||
|  |     components: { | ||||
|  |         HiddenInput, | ||||
|  |     }, | ||||
|  | }; | ||||
|  | </script> | ||||
					Loading…
					
					
				
		Reference in new issue