# 문자메시지 발송

이 문서는 문자전송 소스와 방법에 대해 다룹니다.

첫 번째로는 Config 설정 방법 및 확인에 대해 설명합니다.

두 번째로 각 업무단 작성 방법을 설명합니다.

{% hint style="info" %}
**\<update>**<br>

2023.08.03

* MMS 이미지 업로드 관련 내용이 추가되었습니다.
* 문자 전송시 Api Common을 호출을 지향합니다.
  {% endhint %}

***

## Config 설정

**application.yml**

{% code title="application.yml" %}

```yaml
spring:
  bizMessage:
    accessKey: VHIZ4hLLrhf6uyRIrk4F
    secretKey: pHvcggk52DXYOYYUDvXyLi5RkcmwneeMoOx8xoTd
    sms:
      smsNum: T010-9341-7470 # 발신자 번호 T***-****-****
      serviceId: ncp:sms:kr:309485696868:x2bee
```

{% endcode %}

* `accessKey`, `secretKey`, `serviceId` 속성들은 NCP(Naver Cloud Platform) 에서 발급받아 작성합니다.
* `smsNum` 속성은 NCP(Naver Cloud Platform) 에 등록하여 허가받은 발신자 번호를 작성합니다.

## Sample 소스 및 설명

* [x2bee-api-sample-vanilla](https://gitlab.x2bee.com/x2bee-venus-beta/venus-x2bee-api-sample-vanilla) 프로젝트

**BizMessageController**&#x20;

{% code title="BizMessageController (핵심 발췌)" %}

```java
@Autowired
private MessageSender messageSender;

@PostMapping("/sendSms")
public ResponseEntity<Response> sendSms() throws Exception {
    ...
    List<MessagesRequest> messagesList = new ArrayList<>();
    for(int i=0;i<10;i++) {
        messagesList.add(MessagesRequest.builder()
            .receiverPhoneNumber("01012341234")
            .subject("LMS, MMS에서만 사용 가능한 제목") //BizMessageRequest.subject 보다 우선적용
            .content("X2BEE 테스트 플래티어님 환영합니다.") //BizMessageRequest.content 보다 우선적용
            .build());
    }

    // 이미지 업로드시
    String image1 = ".jpg, .jpeg 이미지를 Base64로 인코딩한 값, 파일 기준 최대 300Kbyte, 해상도 최대 1500 * 1440";
    String image2 = ".jpg, .jpeg 이미지를 Base64로 인코딩한 값, 파일 기준 최대 300Kbyte, 해상도 최대 1500 * 1440";

    // 이미지 파일은 최대3개까지만 전송 가능
    List<String> images = new ArrayList<>();
    images.add(image1);
    images.add(image2);
    images.add(image2);

    BizMessageRequest request = BizMessageRequest.builder()
        .messages(messagesList)
        .subject("기본 LMS, MMS에서만 사용 가능한 메시지 제목") //MessagesRequest.subject 에 값이 있으면 무시됨
        .content("기본 메시지 내용") //MessagesRequest.content 에 값이 있으면 무시됨
        .images(images)
        .type("SMS")
        .build();

    //======================================================
    // API-COMMON 호출
    BizMessageResponse response = restApiUtil.post(
        this.commonApiUrl + "/api/common/interface/bizmessage/sendsms",
        request,
        new ParameterizedTypeReference<Response<BizMessageResponse>>() {}
    ).getPayload();
    //======================================================
    // API-COMMON 에서 직접 호출시
    // messageSender.sendSms(request);
    ...
}
```

{% endcode %}

**BizMessageRequest** 를 생성하여 예제와 아래 표를 참조하여 파라미터를 입력합니다.

* **LMS, MMS 전송 시에는 아래 표의 비고란을 참조하여 작성합니다.**

| 항목                                  | Mandatory | Type   | 설명                                  | 비고                                                                                                                                                                                                                   |
| ----------------------------------- | --------- | ------ | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| BizMessageRequest.type              | NOT NULL  | String | SMS Type                            | SMS, LMS, MMS (소문자 가능)                                                                                                                                                                                               |
| BizMessageRequest.subject           | Optional  | String | 기본 메시지 제목                           | <p><strong>LMS, MMS에서만 사용 가능</strong></p><ul><li>LMS, MMS: 최대 40byte</li></ul>                                                                                                                                       |
| BizMessageRequest.content           | Optional  | String | 기본 메시지 내용                           | <ul><li>SMS: 최대 80byte</li><li>LMS, MMS: 최대 2000byte</li></ul>                                                                                                                                                       |
| BizMessageRequest.messages          | NOT NULL  | List   | 메시지 정보                              | <ul><li>아래 항목 참조 (<a href="http://messages.xxx/">messages.XXX</a>)</li><li>최대 100개</li></ul>                                                                                                                         |
| MessagesRequest.receiverPhoneNumber | NOT NULL  | String | 수신번호                                | 붙임표 ( - )를 제외한 숫자만 입력 가능                                                                                                                                                                                             |
| MessagesRequest.subject             | Optional  | String | 개별 메시지 제목 상위 subject를 무시하고 우선적용됩니다. | <p><strong>LMS, MMS에서만 사용 가능</strong></p><ul><li>LMS, MMS: 최대 40byte</li><li>상위 subject를 무시합니다.</li></ul>                                                                                                            |
| MessagesRequest.content             | NOT NULL  | String | 개별 메시지 내용 상위 content를 무시하고 우선적용됩니다. | <ul><li>SMS: 최대 80byte</li><li>LMS, MMS: 최대 2000byte</li><li>상위 content를 무시합니다.</li></ul>                                                                                                                            |
| BizMessageRequest.images            | Optional  | List   | 파일 바이너리를 Base64로 인코딩한 값             | <ul><li><code>.jpg</code>, <code>.jpeg</code> 이미지를 <strong>Base64</strong>로 인코딩한 값</li><li>파일 하나당 최대 300Kbyte</li><li>해상도 최대 1500 \* 1440</li><li>MMS 전송 용량 <strong>2000byte 이하</strong>까지 최대 3개 이미지 전송 가능</li></ul> |

{% hint style="info" %}
Builder가 익숙치 않다면 Setter 도 사용 가능합니다.
{% endhint %}

예시 (Setter 사용)

{% code title="Setter 예시" %}

```java
for(int i=0;i<10;i++) {
    MessagesRequest messagesRequest = new MessagesRequest();
    messagesRequest.setReceiverPhoneNumber("01012341234");
    messagesRequest.setContent("X2BEE 테스트 플래티어님 환영합니다.");
    messagesList.add(messagesRequest);
}
```

{% endcode %}

{% hint style="info" %}

### 다른 프로젝트에서 SMS 전송 시 (권장 방식)

(1) `x2bee-api-common-vanilla` 가 아닌 다른 프로젝트에서 SMS를 전송하는 경우 api-common API를 호출합니다.

예제 소스와 같이 `BizMessageRequest` 객체에 필요 파라미터들을 담아 POST 방식으로 `/api/common/interface/bizmessage/sendsms` End Point를 호출합니다.

* `messages` 와 `type` 변수는 필수 파라미터입니다.
* `commonApiUrl` 은 application.yml 에 명시된 URL 입니다.
  {% endhint %}
