개요¶
본 문서는 (주)유라클에서 제공하는 “Uracle UMS-CLOUD”의 연동 API 정의서를 설명하고 있다. 본 문서는 성능 개선, 기능 추가 등의 사항으로 내용이 변경될 수 있다.
목적¶
본 문서는 UMS 서비스의 연동을 위한 제반 사항을 기술한다.
호출 방법¶
Receiver Server 에 HTTP (POST) 방식으로 연동 API URL 을 호출 하면 JSON Format으로 결과를 반환 합니다.
API키 생성 방법¶
API 호출방식을 사용하기 위해서는 API키를 발급 받아야 한다.
Step1. 클라우드 서비스(https://cloud.morpheus.kr)에 회원가입을 합니다.
Step2. 로그인 하신 후 개발자 콘솔로 이동합니다
Step3. 프로젝트관리 메뉴로 이동하여 프로젝트를 추가 생성한다.
Step4. 생성된 프로텍트관리에 API Key관리에서 API키를 생성한다.
참조 : 사용자 가이드에서 확인 하기
실패 처리 방법¶
① 인증키 시간만료 (인증키 요청 API 호출)
HTTP Error code = HTTP/1.1 200 OK
JSON Data parsing
HEADER - RESULT_CODE = 0000
BODY ? AUTHKEY 값 저장 및 이후 서버로 호출 시 항상 파라미터로 사용
필수 라이브러리¶
<!-- MAVEN 필수 라이브러리 --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.5</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.4.9</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>4.5.5</version> </dependency>
샘플¶
UMS회원 CSV발송예제¶
package com.uracle.push.test; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MIME; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.impl.client.HttpClientBuilder; import java.io.BufferedReader; import java.io.File; import java.io.InputStreamReader; import java.nio.charset.Charset; /** * UMS 푸시>알림톡>SMS CSV회원발송 예제 * */ public class UmsPushCsvSend { public static void main(String[] args){ HttpClient client = HttpClientBuilder.create().build(); HttpPost method = new HttpPost("http://cloud.morpheus.kr:포트/api/csvSendPushMnApi.ums"); try { //////////////////////////////////////////////////////////////////////////////////// //UMS로 회원등록 된 대상자 발송 예제. 파라미터에 상세설명은 API문서를 참고하시기 바랍니다 //////////////////////////////////////////////////////////////////////////////////// ContentType contentType = ContentType.create("text/plain", "UTF-8"); MultipartEntityBuilder reqEntityBuilder = MultipartEntityBuilder.create(); Charset chars = Charset.forName("UTF-8"); reqEntityBuilder.setCharset(chars); // CSV로 보낼 푸시발송 유저 첨부파일 full 경로. reqEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); FileBody csvFile = new FileBody(new File("C:/csv/csvTemplet.csv")); reqEntityBuilder.addPart("CSVFILE", csvFile); // 설명 : API 인증키. 프로젝트 생성 후 API키를 생성하신 정보를 입력해 주세요. reqEntityBuilder.addTextBody("APIKEY", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); // 설명 : 클라우드 프로젝트아이디. reqEntityBuilder.addTextBody("CLOUD_PROJECT_ID", "xxxxxxxxxxxxxxxxxxxxx"); //설명 : 푸시 메세지 정보 아래 예제 중 택 1 // reqEntityBuilder.addTextBody("PUSH_MSG", "안녕하세요. 테스트 발송입니다."); // 일반 스트링 reqEntityBuilder.addTextBody("PUSH_MSG", "{\"title\":\"안녕하세요.유라클 공지사항입니다.\",\"body\":\"#{아이디}님! 오늘 새벽에 정기점검 있습니다.\n 감사합니다.\"}",contentType); // //설명 : 발송대상자 타켓팅. reqEntityBuilder.addTextBody("TYPE", "MP"); //MU :UMS회원아이디로 타겟팅, MP : 푸시서비스가입 아이디로 타겟팅 //설명 : 서비스코드 정보 reqEntityBuilder.addTextBody("SERVICECODE", "ALL"); //설명 : 발송자 정보 reqEntityBuilder.addTextBody("SENDERID", "TEST_SYSTEM"); //설명 : 메세지 타입 (I: 정보성 메시지, A: 광고성 메시지 중 택일 ex) I) reqEntityBuilder.addTextBody("MSG_TYPE", "I"); //설명 : 부가정보 EXT값에 빈값이 아닌 Value를 넣을경우 반드시 EXT_KIND값을 D롤 세팅 //reqEntityBuilder.addTextBody("EXT_KIND", ""); // 아래의 값의 빈값이 아닐 경우 D로 세팅 //reqEntityBuilder.addTextBody("EXT", ""); // 기본 //reqEntityBuilder.addTextBody("EXT", ""); // 이미지 //reqEntityBuilder.addTextBody("EXT", ""); // 이미지+링크 //reqEntityBuilder.addTextBody("EXT", ""); // 동영상 //알림톡 대체발송을 할경우 아래값 셋팅 reqEntityBuilder.addTextBody("PLUS_ID", ""); //카카오톡 플러스친구 아이디 reqEntityBuilder.addTextBody("KKOALT_SVCID", ""); //카카오알림톡 서비스아이디 ex)1910028xxxx reqEntityBuilder.addTextBody("ALLIMTOLK_TEMPLCODE", ""); //카카오알림톡 등록 승인 처리된 메세지 템플릿코드 /* 카카오알림톡 템플릿 대체발송시 사용. - 알림톡 템플릿에 내용에 #{변수명}과 같은 치환변수가 템플릿 내용에 있을 경우 필수값. - 메시지 형태 JSON Object - ex) 메시지 내용 : 안녕하세요. 결제일은 #{날짜} 입니다. #{금액}이 청구됩니다. 넘겨야 될 파라미터값 : {“#{날짜}”:”2019-07-07”, “#{금액}”:”1,000”} */ reqEntityBuilder.addTextBody("REPLACE_VARS", ""); //SMS 대체발송을 할 경우 아래값 셋팅 reqEntityBuilder.addTextBody("SMS_TITLE", "" ,contentType); //MMS문자일 경우 타이틀 reqEntityBuilder.addTextBody("SMS_MSG", "" ,contentType); //보낼 문자내용. 90byte이상은 MMS로 발송됩니다 reqEntityBuilder.addTextBody("CALLBACK_NUM", ""); //회신번호. SMS대체발송일 경우 필수 reqEntityBuilder.addTextBody("MMS_IMGURL", ""); //MMS일 경우 이미지 URL: http://xxxx.com/sample.jpg HttpEntity multiPartEntity = reqEntityBuilder.build(); method.setEntity(multiPartEntity); HttpResponse upmcResponse = client.execute(method); if (upmcResponse.getStatusLine().getStatusCode() == 200) { // 성공 비즈니스 로직 처리 BufferedReader rd = new BufferedReader(new InputStreamReader(upmcResponse.getEntity().getContent())); StringBuffer result = new StringBuffer(); String line = ""; while ((line = rd.readLine()) != null) { result.append(line); } System.out.println(" 성공 응답 스트링 : "+result.toString()); }else{ // 실패 비즈니스 로직 처리 BufferedReader rd = new BufferedReader(new InputStreamReader(upmcResponse.getEntity().getContent())); StringBuffer result = new StringBuffer(); String line = ""; while ((line = rd.readLine()) != null) { result.append(line); } System.out.println(" 실패 응답 스트링 : "+result.toString()); } } catch (Exception e) { e.printStackTrace(); } } }
UMS회원 발송예제¶
package com.uracle.push.test; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.message.BasicNameValuePair; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; /** * UMS 푸시>알림톡>SMS 회원발송 예제 */ public class UmsPushSend { public static void main(String[] args){ HttpClient client = HttpClientBuilder.create().build(); HttpPost postMethod = new HttpPost("cloud.morpheus.kr:포트/api/umsSendPushApi.ums"); try { // 헤더 셋팅 postMethod.setHeader("Content-Type", "application/x-www-form-urlencoded"); // 푸시 발송 파라미터 셋팅 List<NameValuePair> urlParameters = new ArrayList<NameValuePair>(); // 설명 : API 인증키. 프로젝트 생성 후 API키를 생성하신 정보를 입력해 주세요. urlParameters.add(new BasicNameValuePair("APIKEY", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")); // 설명 : 클라우드 프로젝트아이디. urlParameters.add(new BasicNameValuePair("CLOUD_PROJECT_ID", "xxxxxxxxxxxxxxxxxxxxx")); //설명 : 푸시 메세지 정보 아래 예제 중 택 1 urlParameters.add(new BasicNameValuePair("PUSH_MSG", "안녕하세요. 테스트 발송입니다.")); // 일반 스트링 //urlParameters.add(new BasicNameValuePair("PUSH_MSG", "{\"title\":\"안녕하세요.유라클 공지사항입니다.\",\"body\":\"오늘 새벽에 정기점검 있습니다.\n 감사합니다.\"}")); //설명 : 발송대상자 타켓팅 urlParameters.add(new BasicNameValuePair("TYPE", "MP")); //MU :UMS회원아이디로 타겟팅, MP : 푸시서비스가입 아이디로 타겟팅 urlParameters.add(new BasicNameValuePair("CUIDS", "choiyj@uracle.co.kr")); // 한명 보낼 경우 //urlParameters.add(new BasicNameValuePair("CUIDS", "[\"testuser1\",\"testuser2\",\"testuser3\"]")); //여러명 보낼 경우 //설명 : 서비스코드 정보 urlParameters.add(new BasicNameValuePair("SERVICECODE", "ALL")); //설명 : 발송자 정보 urlParameters.add(new BasicNameValuePair("SENDERID", "TEST_SYSTEM")); //설명 : 메세지 타입 (I: 정보성 메시지, A: 광고성 메시지 중 택일 ex) I) urlParameters.add(new BasicNameValuePair("MSG_TYPE", "I")); //설명 : 부가정보 EXT값에 빈값이 아닌 Value를 넣을경우 반드시 EXT_KIND값을 D롤 세팅 //urlParameters.add(new BasicNameValuePair("EXT_KIND", "")); // 아래의 값의 빈값이 아닐 경우 D로 세팅 //urlParameters.add(new BasicNameValuePair("EXT", "")); // 기본 //urlParameters.add(new BasicNameValuePair("EXT", "")); // 이미지 //urlParameters.add(new BasicNameValuePair("EXT", "")); // 이미지+링크 //urlParameters.add(new BasicNameValuePair("EXT", "")); // 동영상 //알림톡 대체발송을 할경우 아래값 셋팅 urlParameters.add(new BasicNameValuePair("PLUS_ID", "")); //카카오톡 플러스친구 아이디 urlParameters.add(new BasicNameValuePair("KKOALT_SVCID", "")); //카카오알림톡 서비스아이디 ex)1910028xxxx urlParameters.add(new BasicNameValuePair("ALLIMTOLK_TEMPLCODE", "")); //카카오알림톡 등록 승인 처리된 메세지 템플릿코드 /* 카카오알림톡 템플릿 대체발송시 사용. - 알림톡 템플릿에 내용에 #{변수명}과 같은 치환변수가 템플릿 내용에 있을 경우 필수값. - 메시지 형태 JSON Object - ex) 메시지 내용 : 안녕하세요. 결제일은 #{날짜} 입니다. #{금액}이 청구됩니다. 넘겨야 될 파라미터값 : {“#{날짜}”:”2019-07-07”, “#{금액}”:”1,000”} */ urlParameters.add(new BasicNameValuePair("REPLACE_VARS", "")); //SMS 대체발송을 할 경우 아래값 셋팅 urlParameters.add(new BasicNameValuePair("SMS_TITLE", "")); //MMS문자일 경우 타이틀 urlParameters.add(new BasicNameValuePair("SMS_MSG", "")); //보낼 문자내용. 90byte이상은 MMS로 발송됩니다 urlParameters.add(new BasicNameValuePair("CALLBACK_NUM", "")); //회신번호. SMS대체발송일 경우 필수 urlParameters.add(new BasicNameValuePair("MMS_IMGURL", "")); //MMS일 경우 이미지 URL: http://xxxx.com/sample.jpg postMethod.setEntity(new UrlEncodedFormEntity(urlParameters, "UTF-8")); HttpResponse upmcResponse = client.execute(postMethod); if (upmcResponse.getStatusLine().getStatusCode() == 200) { // 성공 비즈니스 로직 처리 BufferedReader rd = new BufferedReader(new InputStreamReader(upmcResponse.getEntity().getContent())); StringBuffer result = new StringBuffer(); String line = ""; while ((line = rd.readLine()) != null) { result.append(line); } System.out.println(" 응답 스트링 : " + result.toString()); }else{ // 실패 비즈니스 로직 처리 } } catch (Exception e) { e.printStackTrace(); } } }