개요

본 문서는 (주)유라클에서 제공하는 “Uracle UMS-CLOUD”의 연동 API 정의서를 설명하고 있다. 본 문서는 성능 개선, 기능 추가 등의 사항으로 내용이 변경될 수 있다.

목적

본 문서는 UMS 서비스의 연동을 위한 제반 사항을 기술한다.

호출 방법

Receiver Server 에 HTTP (POST) 방식으로 연동 API URL 을 호출 하면 JSON Format으로 결과를 반환 합니다.

예) https://ums.morpheus.kr/[API_URL]

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();
        }


    }
}