개요

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

목적

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

호출 방법

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

예) http://[Receiver IP]:[Receiver Port]/[API PATH]

  • 한글깨질경우 Content-Type에 charset=UTF-8 설정.

  • TLS Protocol은 TLSv1.2 이상 만 지원.

API키 생성 방법

API 호출방식을 사용하기 위해서는 API키를 발급 받아야 한다.

  • Step1. message.AI(https://www.message-ai.net)에 회원가입을 합니다.

  • Step2. 로그인 하신 후 서비스그룹으로 이동한다.

  • Step3. 서비스그룹 추가 후 요금제 선택/이용 상품을 선택한후 결제를 한다.

  • Step4. 생성된 서비스그룹의 API Key관리에서 API키를 생성한다.

참조 : 홈페이지 사용자 가이드에서 확인 하기

실패 처리 방법

① 인증키 시간만료 (인증키 요청 API 호출)

  • HTTP Error code = HTTP/1.1 200 OK

  • JSON Data parsing

  • HEADER - RESULT_CODE = 0000

  • BODY ? AUTHKEY 값 저장 및 이후 서버로 호출 시 항상 파라미터로 사용

전문 구성

UMS API 전문은 공통 전문 + 채널 전문으로 구성된다. 대체 발송을 위해 SEND_MACRO_CODE 값 입력 시 아래와 같이 발송 전문을 작성하여야 한다.

  • 예1) PUSH: 공통 전문 + PUSH 전문

  • 예2) SMS: 공통 전문 + SMS 전문

  • 예3) PUSH > SMS 전환 발송: 공통 전문 + PUSH 전문 + SMS 전문

  • 예4) PUSH > RCS > SMS 전환 발송 : 공통 전문 + PUSH 전문 + RCS 전문 + SMS 전문

필수 라이브러리

  <!-- MAVEN 필수 라이브러리 -->

  <dependencies>
    <!-- Apache HttpClient dependency -->
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.13</version>
    </dependency>

    <!-- Apache HttpMime dependency for multipart support -->
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpmime</artifactId>
        <version>4.5.13</version>
    </dependency>

    <!-- Additional dependencies if needed -->
</dependencies>

샘플

주의

chatGPT4.0 가입고객은 GPTs를 통해 샘플코드를 작성을 할 수 있습니다. - Chat GPT 바로가기

UMS 발송예제 JDK 1.8 이상
  package com.uracle.extention.test;

  import org.apache.http.client.methods.CloseableHttpResponse;
  import org.apache.http.client.methods.HttpPost;
  import org.apache.http.entity.mime.MultipartEntityBuilder;
  import org.apache.http.impl.client.CloseableHttpClient;
  import org.apache.http.impl.client.HttpClients;
  import org.apache.http.util.EntityUtils;

  import java.io.IOException;

  public class PushMessageSender {

     public static void main(String[] args) {

        String apiUrl = "https://api.message-ai.net/api/send/potalSendApi.ums";

        //발송 대상 서비스그룹에서 생성한 API Key를 입력하세요.
        String apiKey = "YOUR_API_KEY";
        //발송 대상 서비스그룹의 서비스그룹ID를 입력하세요.
        String projectId = "YOUR_PROJECT_ID";
        //발송자는 서버관리를 위한 회원님 고유의 아이디를 입력하세요.
        String senderId = "YOUR_SENDER_ID";
        //발송 대상 서비스그룹의 서비스그룹ID를 입력하세요.
        String appId = "YOUR_APP_ID";
        //푸시 발송 제목을 입력하세요.
        String messageTitle = "제목";
        //푸시 발송 내용을 입력하세요.
        String messageContent = "안녕하세요. 푸시 메시지를 보냅니다.";

        String cuids ="{\"user1\":[\"0100000000\",\"홍길동\"],\"user2\":[\"0100000000\",\"김철수\"]}";

        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {

              HttpPost postRequest = new HttpPost(apiUrl);

              // multipart/form-data를 사용하여 요청 엔티티를 생성합니다.
              MultipartEntityBuilder builder = MultipartEntityBuilder.create();
              builder.addTextBody("APIKEY", apiKey);
              builder.addTextBody("PROJECT_ID", projectId);
              builder.addTextBody("REQ_TRAN_TYPE", "REAL");  // 실시간 전송
              builder.addTextBody("TARGET_USER_TYPE", "NM");  // 일반 발송
              builder.addTextBody("SENDERID", senderId);
              builder.addTextBody("APP_ID", appId);
              builder.addTextBody("TITLE", messageTitle, ContentType.MULTIPART_FORM_DATA.withCharset("UTF-8"));
              builder.addTextBody("PUSH_MSG", messageContent, ContentType.MULTIPART_FORM_DATA.withCharset("UTF-8"));
              builder.addTextBody("CUIDS", cuids);

              postRequest.setEntity(builder.build());

              try (CloseableHttpResponse response = httpClient.execute(postRequest)) {
                 String responseBody = EntityUtils.toString(response.getEntity());
                 System.out.println("Response: " + responseBody);
              }
        } catch (IOException e) {
              e.printStackTrace();
        }
     }
}

UMS 발송예제 JDK 1.7 이하

package com.uracle.extention.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.security.KeyStore;
import java.util.HashMap;
import java.util.Map.Entry;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;

import java.io.IOException;

public class PushMessageSender {

   public static void main(String[] args) throws IOException {

      BufferedReader in = null;
      String apiUrl = "https://api.message-ai.net/api/send/potalSendApi.ums";

      //발송 대상 서비스그룹에서 생성한 API Key를 입력하세요.
      String apiKey = "YOUR_API_KEY";
      //발송 대상 서비스그룹의 서비스그룹ID를 입력하세요.
      String projectId = "YOUR_PROJECT_ID";
      //발송자는 서버관리를 위한 회원님 고유의 아이디를 입력하세요.
      String senderId = "YOUR_SENDER_ID";
      //발송 대상 서비스그룹의 서비스그룹ID를 입력하세요.
      String appId = "YOUR_APP_ID";
      //푸시 발송 제목을 입력하세요.
      String messageTitle = "제목";
      //푸시 발송 내용을 입력하세요.
      String messageContent = "안녕하세요. 푸시 메시지를 보냅니다.";

      String cuids ="{\"user1\":[\"0100000000\",\"홍길동\"],\"user2\":[\"0100000000\",\"김철수\"]}";

      try {
         SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
         TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
         trustManagerFactory.init((KeyStore) null);
         sslContext.init(null, (TrustManager[]) trustManagerFactory.getTrustManagers(), null);
         javax.net.ssl.SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();

         HashMap<String, Object> params = new HashMap<String, Object>();

         params.put("APIKEY", apiKey);
         params.put("PROJECT_ID", projectId);
         params.put("REQ_TRAN_TYPE", "REAL");
         params.put("TARGET_USER_TYPE", "NM");
         params.put("SENDERID", senderId);
         params.put("APP_ID", appId);
         params.put("TITLE", messageTitle);
         params.put("PUSH_MSG", messageContent);
         params.put("CUIDS", cuids);
         StringBuilder postData = new StringBuilder();
         for(Entry<String, Object> param : params.entrySet())
         {
            if(postData.length() != 0)
               postData.append('&');
            postData.append(param.getKey());
            postData.append('=');
            postData.append(String.valueOf(param.getValue()));
         }


         System.out.println("Send Data " + postData.toString());

         byte[] postDataBytes = postData.toString().getBytes();

         URL obj = new URL(apiUrl); // 호출할 URL
         HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
         con.setSSLSocketFactory(sslSocketFactory);
         con.setRequestMethod("POST");
         con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
         con.setDoOutput(true);
         con.getOutputStream().write(postDataBytes); // POST 호출

         in = new BufferedReader(new InputStreamReader(con.getInputStream(), StandardCharsets.UTF_8));
         String line;
         while ((line = in.readLine()) != null) {
            System.out.println(line);
         }
      } catch (Exception e) {
         e.printStackTrace();
      } finally {
         if (in != null) {
            try {
               in.close();
            } catch (Exception e) {
               e.printStackTrace();
            }
         }
      }
   }
}