from java.lang import String from java.io import BufferedReader, InputStreamReader from java.net import URL, URLEncoder from java.nio.charset import StandardCharsets from com.ibm.json.java import JSONObject, JSONArray from psdi.server import MXServer from psdi.util.logging import MXLoggerFactory logger = MXLoggerFactory.getLogger("maximo.script") logger.debug("Entering SEND_SMS script") BASEURL = "https://api.skebby.it/API/v1.0/REST/" SMS_SENDER = "Maximo" SMS_DEST = "+3933511111111" sms_text = "Ticket " + mbo.getString("WONUM") + " - " + mbo.getString("DESCRIPTION") properties = MXServer.getMXServer().getConfig() username = properties.getProperty("sms.username") password = properties.getProperty("sms.password") urltxt = BASEURL + "login?username=" + URLEncoder.encode(username, "UTF-8") + "&password=" + URLEncoder.encode(password, "UTF-8") logger.debug("Authenticating: " + urltxt) url = URL(urltxt) conn = url.openConnection() conn.setRequestMethod("GET") if conn.getResponseCode() != 200: conn.disconnect() msg = "HTTP Error: " + str(conn.getResponseCode()) + " - " + str(conn.getResponseMessage()) logger.error(msg) service.error("asts", "SmsSendError", [str(conn.getResponseCode()), str(conn.getResponseMessage()), "Authentication failed"]) br = BufferedReader(InputStreamReader(conn.getInputStream())) authResp = br.readLine() conn.disconnect() #logger.debug("Authentication output:" + authResp) # auth tokens are returned separated by a ';' character user_key,session_key = authResp.split(';') logger.debug("Authentication tokens:" + user_key + "," + session_key) logger.info("Sending SMS to " + SMS_DEST + " - " + sms_text) url = URL(BASEURL + "sms") conn = url.openConnection() conn.setRequestMethod("POST") conn.setRequestProperty("user_key", user_key) conn.setRequestProperty("Session_key", session_key) conn.setRequestProperty("content-type", "application/json") conn.setDoOutput(True) recipients = JSONArray() recipients.add(SMS_DEST) obj = JSONObject() obj.put("message_type", "TI") obj.put("returnCredits", False) obj.put("sender", SMS_SENDER) obj.put("recipient", recipients) obj.put("message", sms_text) jsonStr = obj.serialize(False) logger.debug("SMS Json Request=" + jsonStr) os = conn.getOutputStream() postData = String.getBytes(jsonStr, StandardCharsets.UTF_8) os.write(postData) os.flush() if conn.getResponseCode() != 201: br = BufferedReader(InputStreamReader(conn.getErrorStream())) output = br.readLine() logger.error("Error: " + output) conn.disconnect() msg = "HTTP Error: " + str(conn.getResponseCode()) + " - " + str(conn.getResponseMessage() + " - " + output) logger.error(msg) service.error("asts", "SmsSendError", [str(conn.getResponseCode()), str(conn.getResponseMessage()), output]) br = BufferedReader(InputStreamReader(conn.getInputStream())) output = br.readLine() logger.info("OK: " + output) conn.disconnect() service.setWarning("asts", "SmsSendOk", None)
Labels: advanced, integration, java, rest, scripting