/*! Woowa Addon v1.9.15 | (c) Woowa | mhgufron | https://app.woo-wa.com/terms-conditions | https://app.woo-wa.com/privacy-policy */ var ADDON_TITLE = 'Woowa'; function onOpen(e) { FormApp.getUi() .createAddonMenu() .addItem("Woowa Settings", "showSidebar") .addItem('About', 'showAbout') .addToUi(); } function onInstall(e) { onOpen(e); } function setTrigger() { adjustFormSubmitTrigger(); var text = 'Trigger is ready, please refresh the page to get started'; var ui = HtmlService.createHtmlOutput(text) .setWidth(420) .setHeight(270); FormApp.getUi().showModalDialog(ui, 'Set Trigger'); } function unsetTrigger() { deleteSubmitTrigger(); var text = 'Trigger is unset, please refresh the page to finish the process'; var ui = HtmlService.createHtmlOutput(text) .setWidth(420) .setHeight(270); FormApp.getUi().showModalDialog(ui, 'Unset Trigger'); } function cekTrigger() { var form = FormApp.getActiveForm(); allTriggers = ScriptApp.getUserTriggers(form); for (var i = 0; i < allTriggers.length; i++) { if (allTriggers[i].getEventType() == ScriptApp.EventType.ON_FORM_SUBMIT) { return true; } else { return false; } } } function deleteSubmitTrigger() { var allTriggers = ScriptApp.getProjectTriggers(); var form = FormApp.getActiveForm(); allTriggers = ScriptApp.getUserTriggers(form); for (var i = 0; i < allTriggers.length; i++) { ScriptApp.deleteTrigger(allTriggers[i]); Logger.log(allTriggers[i]); } } function showSidebar(e) { var btnTriggers = ''; if (cekTrigger()) { btnTriggers = ' Trigger is already set'; } else { btnTriggers = ``; } var ui = HtmlService.createTemplate(` `) .evaluate() .setTitle("Woowa Settings"); FormApp.getUi().showSidebar(ui); } function showAbout() { var ui = HtmlService.createHtmlOutput('plugin integrasi woowa dan google form') .setWidth(420) .setHeight(270); FormApp.getUi().showModalDialog(ui, 'About Woowa'); } function saveSettings(settings) { PropertiesService.getDocumentProperties().setProperties(settings); } function getSettings() { var settings = PropertiesService.getDocumentProperties().getProperties(); if (!settings.creatorEmail) { settings.creatorEmail = Session.getEffectiveUser().getEmail(); } var form = FormApp.getActiveForm(); var TEXT = form.getItems(FormApp.ItemType.TEXT); var PARAGRAPH_TEXT = form.getItems(FormApp.ItemType.PARAGRAPH_TEXT); var CHECKBOX = form.getItems(FormApp.ItemType.CHECKBOX); var MULTIPLE_CHOICE = form.getItems(FormApp.ItemType.MULTIPLE_CHOICE); var LIST = form.getItems(FormApp.ItemType.LIST); var SCALE = form.getItems(FormApp.ItemType.SCALE); var GRID = form.getItems(FormApp.ItemType.GRID); var CHECKBOX_GRID = form.getItems(FormApp.ItemType.CHECKBOX_GRID); var allItems = TEXT.concat(PARAGRAPH_TEXT,CHECKBOX,CHECKBOX_GRID,GRID,MULTIPLE_CHOICE,LIST,SCALE); settings.allItems = []; for (var i = 0; i < allItems.length; i++) { settings.allItems.push({ title: allItems[i].getTitle(), id: allItems[i].getId() }); } return settings; } function adjustFormSubmitTrigger() { var form = FormApp.getActiveForm(); var triggers = ScriptApp.getUserTriggers(form); var triggerNeeded = 'true'; var existingTrigger = null; for (var i = 0; i < triggers.length; i++) { if (triggers[i].getEventType() == ScriptApp.EventType.ON_FORM_SUBMIT) { existingTrigger = triggers[i]; break; } } if (triggerNeeded && !existingTrigger) { var trigger = ScriptApp.newTrigger('respondToFormSubmit') .forForm(form) .onFormSubmit() .create(); } else if (!triggerNeeded && existingTrigger) { ScriptApp.deleteTrigger(existingTrigger); } } function respondToFormSubmit(e) { var authInfo = ScriptApp.getAuthorizationInfo(ScriptApp.AuthMode.FULL); if (authInfo.getAuthorizationStatus() == ScriptApp.AuthorizationStatus.REQUIRED) { sendReauthorizationRequest(); } else { sendRespondentNotification(e); } } function sendReauthorizationRequest() { var settings = PropertiesService.getDocumentProperties(); var authInfo = ScriptApp.getAuthorizationInfo(ScriptApp.AuthMode.FULL); var lastAuthEmailDate = settings.getProperty('lastAuthEmailDate'); var today = new Date().toDateString(); if (lastAuthEmailDate != today) { if (MailApp.getRemainingDailyQuota() > 0) { var template = HtmlService.createTemplate(`

The Google Form add-on is set to run automatically whenever a form is submitted. The add-on was recently updated and it needs you to re-authorize it to run on your behalf.

The add-on's automatic functions are temporarily disabled until you re-authorize it. To do so, open Google Form and run the add-on from the Add-ons menu. Alternatively, you can click this link to authorize it:

Re-authorize the add-on.

This notification email will be sent to you at most once per day until the add-on is re-authorized.

`); template.url = authInfo.getAuthorizationUrl(); template.notice = NOTICE; var message = template.evaluate(); MailApp.sendEmail(Session.getEffectiveUser().getEmail(), 'Authorization Required', message.getContent(), { name: ADDON_TITLE, htmlBody: message.getContent() }); } settings.setProperty('lastAuthEmailDate', today); } } function sendRespondentNotification(e) { var response = e.response; var form = FormApp.getActiveForm(); var settings = PropertiesService.getDocumentProperties(); var no_wa_property = settings.getProperty('no_wa'); var no_wa_item = form.getItemById(parseInt(no_wa_property)); var no_wa = response.getResponseForItem(no_wa_item).getResponse(); no_wa = validatePhone(no_wa); if (no_wa == "") { Logger.log("No Wa is empty"); return; } var template = settings.getProperty('template'), matches = [],find = [], replace = [], curMatch, no_wa, rxp = /\[([^\]]+)\]/g; while( curMatch = rxp.exec( template ) ) { matches.push( curMatch[1] ); } var setting = getSettings(); if (setting.integrasi) { if (matches) { matches.forEach(function (item, index) { var formData = objectifyForm(); if (formData[item]) { find.push('['+item+']'); replace.push(formData[item]); } var timestamp = new Date().toISOString().split('T').join(' ').slice(0,10); var date = new Date().toISOString().split('T').join(' ').slice(0,19); if (item=="Timestamp") { find.push('[Timestamp]'); replace.push(timestamp); } if (item=="timestamp") { find.push('[timestamp]'); replace.push(timestamp); } if (item=="Date") { find.push('[Date]'); replace.push(date); } if (item=="date") { find.push('[date]'); replace.push(date); } }); var msg = template.replaceArray(find, replace); } Logger.log(no_wa); switch (setting.integrasi) { case "woowaeco": woowaEcoSendWa(no_wa,msg,setting.key); break; case "woowacrmv2": woowaCrmV2SendWa(no_wa,msg,setting.key); break; case "woowandroidv1": woowaAndroidV1SendWa(no_wa,msg,setting.key); break; case "woowandroidv2": woowaAndroidV2SendWa(no_wa,msg,setting.key); break; case "woowamultics": woowaMulticsSendWa(no_wa,msg,setting.key); break; default: Logger.log('Error: integrasi value is ' + setting.integrasi); break; } return; } } String.prototype.replaceArray = function(find, replace) { var replaceString = this; for (var i = 0; i < find.length; i++) { replaceString = replaceString.replace(find[i], replace[i]); } return replaceString; }; function objectifyForm() { var myform = FormApp.getActiveForm(); var formResponses = myform.getResponses(); var currentResponse = formResponses[formResponses.length-1]; var responseArray = currentResponse.getItemResponses(); var form = {}; form.user = currentResponse.getRespondentEmail(); form.timestamp = currentResponse.getTimestamp(); form.formName = myform.getTitle(); for (var i = 0; i < responseArray.length; i++){ var response = responseArray[i].getResponse(); var item = responseArray[i].getItem().getTitle(); form[item] = response; } return form; } function validatePhone(no_wa) { if (typeof no_wa == "string") { var no_wa = no_wa.split(/[^0-9]/).join(""); no_wa = no_wa.replace(/^[0]/, "62"); no_wa = "+" + no_wa; } else { no_wa = ""; } return no_wa; } function spinText(msg) { if(msg.indexOf("{") == 0) { var get_spintext = msg.substring(0, msg.indexOf("}")); var explode_kurawal_buka = msg.split("{"); var explode_kurawal_tutup = explode_kurawal_buka[1].split("}"); var explode = explode_kurawal_tutup[0].split("|"); var spintext = explode[Math.floor(Math.random() * explode.length)]; msg = msg.replace(get_spintext, spintext); msg = msg.replace("}", "", spintext); msg = msg.replace("|", "", spintext); } if (msg.indexOf('{') > 0) { var get_spintext = msg.substring(0, msg.indexOf("}")); var get_spintext1 = get_spintext.substring(msg.indexOf("{")); var explode_kurawal_buka = msg.split("{"); var explode = explode_kurawal_buka[1].split("|"); var spintext = explode[Math.floor(Math.random() * explode.length)]; msg = msg.replace(get_spintext1, spintext); msg = msg.replace("}", "", spintext); msg = msg.replace("|", "", spintext); } return msg; } function woowaEcoSendWa(no_wa, msg, key) { var msg = spinText(msg); var param = { "phone_no" : no_wa, "message" : msg, "key" : key, }; var url = "http://116.203.92.59/api/async_send_message", payload = JSON.stringify(param), headers = { "contentType": "application/json" }, options = { 'method':'post', 'payload':payload, 'headers': headers, 'contentType':'application/json', 'muteHttpExceptions': true }; var response = UrlFetchApp.fetch(url, options); var result = response.getContentText(); Logger.log(options); Logger.log(result); return; } function woowaAndroidV1SendWa(no_wa,msg,player_id) { var msg = spinText(msg); var param = { 'type': 'Reminder', 'message': msg, 'no_wa': no_wa }; var url = 'https://onesignal.com/api/v1/notifications'; var data = { 'app_id': '429d3472-da0f-4b2b-a63e-4644050caf8f', 'include_player_ids': [player_id], 'data': param, 'contents': { 'en': 'Woowa Title' }, 'headings': { 'en': 'Woowa Title' } }; var payload = JSON.stringify(data); var headers = { 'Content-Type': 'application/json', 'Authorization': 'Basic NjY0NzE3MTYtMzc3ZC00YmY5LWJhNzQtOGRiMWM1ZTNhNzBh' }; var options = { 'method': 'post', 'payload': payload, 'headers': headers, 'muteHttpExceptions': !![] }; var response = UrlFetchApp.fetch(url, options); var result = response.getContentText(); Logger.log(options); Logger.log(result); return; } function woowaAndroidV2SendWa(no_wa,msg,player_id) { var msg = spinText(msg); var url = 'https://fcm.googleapis.com/fcm/send'; var data = { "to": player_id, "data": { "number": no_wa, "message": msg } }; var payload = JSON.stringify(data); var headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer AIzaSyCyXH1aC4rWgMQhaJuQLUTDXfWRBgrCZF4' }; var options = { 'method': 'post', 'payload': payload, 'headers': headers, 'muteHttpExceptions': !![] }; var response = UrlFetchApp.fetch(url, options); var result = response.getContentText(); Logger.log(options); Logger.log(result); return; } function woowaCrmV2SendWa(no_wa,msg,deviceid) { var msg = spinText(msg); var url = 'https://crm.woo-wa.com/send/message-text'; var data = { "deviceId": deviceid, "number": no_wa, "message": msg }; var headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'Cache-Control': 'no-cache' }; var options = { 'method': 'post', 'payload': data, 'headers': headers, 'muteHttpExceptions': !![] }; var response = UrlFetchApp.fetch(url, options); var result = response.getContentText(); Logger.log(result); return; } function woowaMulticsSendWa(no_wa,msg,deviceKey) { var msg = spinText(msg); var url = 'https://multics.woo-wa.com/api/srv1/send-text'; var data = { "number": no_wa, "message": msg }; var headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'device-key': deviceKey, 'Cache-Control': 'no-cache' }; var options = { 'method': 'post', 'payload': data, 'headers': headers, 'muteHttpExceptions': !![] }; var response = UrlFetchApp.fetch(url, options); var result = response.getContentText(); Logger.log(result); return; }