[Network] SMPP 정의서 SUBMIT_SM 패킷 format 이해하기

윤동환·2023년 5월 2일
0

Network

목록 보기
9/9

SUBMIT_SM을 보내기 위한 조건

  1. TCP 연결이 되어있어야 한다.
  2. transmitter bind를 해야한다.

SUBMIT_SM 구조

optional은 callback_num만 다룹니다.

command_length

  • Integer(Size octets : 4)
  • 패킷의 전체 길이를 나타냅니다.

command_id

  • Integer(Size octets : 4)
  • SMPP PDU가 나타내는 메시지 유형(예: submit_sm, query_sm 등) 을 식별합니다.
    Integer(Size octets : 4)

    submit_sm은 0x00000004값으로 되어있습니다.
    받는 값은 0x80000004입니다.

command_status

  • Integer(Size octets : 4)
  • SMPP 요청의 성공 또는 실패를 나타냅니다. SMPP 응답 메시지에서만 관련이
    있으며 SMPP 요청 메시지에서는 NULL로 설정해야 합니다.

sequence_number

  • Integer(Size octets : 4)
  • 통신한 패킷의 순서와 몇번째인지 확인하기 위해 사용합니다.

MANDATORY PARAMETERS

service_type

  • C-Octet String(Size octets : 6)
  • 메시지와 관련된 SMS 응용 프로그램 서비스를 나타내는 데 사용할 수 있습니다

    일반적으로 정의된 값
    "" : (NULL) 기본값
    "CMT" : 셀룰러 메시징
    "CPT" : 셀룰러 페이징
    "VMN" : 음성 메일 알림
    "VMA" : 음성 메일 알림
    "WAP" : 무선 애플리케이션 프로토콜
    "USSD" : 구조화되지 않은 부가 서비스 데이터
    다른 모든 값은 이동통신사에 따라 다르며 SMSC 서비스 공급자와 ESME 애플리케이션 간의 상호 합의에 의해 정의됩니다.

source_addr_ton, dest_addr_ton

  • Integer(Size octets : 1)
  • 전화번호가 국제번호 체계인지 국내 번호 체계인지 특징을 정해줍니다.

    ex) 82013378~, 53013378~, 혹은 알파벳 섞인번호인가(ydh) 등

source_addr_npi, dest_addr_npi

  • Integer(Size octets : 1)
  • 전화번호의 전체적인 규격을 정해줍니다.
  • 전화번호 할당 계획(telephone numbering plan)은 전화번호를 신청자에게 할당하고 전화 호출 경로를 망에서 우회하는 데 쓰이는 원거리 통신의 계획입니다.

source_addr

  • C-Octet String(Size octets : 21)
  • 보내는 사람의 번호입니다.

destination_addr

  • C-Octet String(Size octets : 21)
    받는 사람의 번호입니다.

esm_class

  • Integer(Size octets : 1)
  • 짧은 메시지와 관련된 특수 메시지 속성을 나타내는 데 사용됩니다

    submit_sm, submit_multi 및 data_sm 에서 다음과 같이 인코딩됩니다 .
    (ESME -> SMSC) PDU:
    Messaging Mode (bits 1-0)
    xxxxxx00 : default smsc 모드 (store and forward)
    xxxxxx01 : datagram 모드
    xxxxxx10 : Forward 모드 (tractaction 모드)
    xxxxxx11 : Store and forward 모드 (smsc가 store and forward방식이 아닐 경우 사용)
    Message Type (bits 5-2)
    xx0000xx : 기본 메시지 타입
    xx0010xx : short 메시지에 ESME delivery 승인이 포함되어있음
    xx0100xx : short 메시지에 ESME 메뉴얼/유저 승인이 포함되어있음
    GSM Network Specific Features (bits 7-6)
    00xxxxxx : 특정 기능을 선택하지 않음
    01xxxxxx : UDHI 표시기 (MT 단문 메시지에만 해당)
    10xxxxxx : 응답 경로 설정 (GSM 네트워크에만 해당)
    11xxxxxx : UDHI 및 회신 경로설정 (GSM 네트워크에만 해당)

protocol_id

  • Integer(Size octets : 1)

    GSM
    GSM 03.40에 따라 설정 (39page0x00)
    ANSI-136 (TDMA)
    ANSI-136 모바일 발신 메시지의 경우 SMSC는 이 값을 NULL로 설정해야 합니다.
    모바일 종료 메시지의 경우 이 필드는 사용되지 않으므로 SMSC에서 무시됩니다.
    IS-95 (CDMA)
    IS-95 모바일 발신 메시지의 경우 SMSC는 이 값을 NULL로 설정해야 합니다.
    모바일 종료 메시지의 경우 이 필드는 사용되지 않으므로 SMSC에서 무시됩니다.

priority_flag

  • Integer(Size octets : 1)
  • 발신 SME가 짧은 메시지 네가지 우선순위 수준이 지원됩니다.

    우선순위 단계
    0(낮음) < 1 < 2 < 3(높음)
    3보다 큰 값은 예약됨

schedule_delivery_time

  • C-Octet String(Size octets : 1 or 17)
  • 메시지 배달을 처음 시도해야 하는 예약 시간을 지정합니다
    SMSC에서 이 메시지 배달을 시도할 현재 SMSC 시간의 절대 날짜 및 시간 또는 상대 시간을 정의합니다.

    Time Format
    “YYMMDDhhmmsstnnp" 형식으로
    ‘YY’ : last two digits of the year (00-99)
    ‘MM’ : month (01-12)
    ‘DD’ : day (01-31)
    ‘hh’ : hour (00-23)
    ‘mm’ : minute (00-59)
    ‘ss’ : second (00-59)
    ‘t’ : tenths of second (0-9)
    ‘nn’ : Time difference in quarter hours between local time (as expressed in the first 13 octets) and UTC (Universal Time Constant) time (00-48).
    ‘p’ -
    “+” : Local time is in quarter hours advanced in relation
    to UTC time.
    “-” : Local time is in quarter hours retarded in relation
    to UTC time.
    “R” : Local time is relative to the current SMSC time
    참고 : SMSC에서 응답을 보고하는 경우 SMSC의 현지 시간이 제공되며 형식은 위와 동일한 정의로
    "YYMMDDhhmmss"입니다

validity_period

  • C-Octet String(Size octets : 1 or 17)
  • SMSC 만료 시간을 나타내며, 그 이후에는 메시지가 목적지로 전달되지 않으면 폐기
    되어야 합니다. 절대 시간 형식 또는 상대 시간 형식으로 정의할 수 있습니다.

registered_delivery

  • Integer(Size octets : 1)
  • SMSC delivery receipt and/or SME에서 생성된 승인을 요청하는 데 사용됩니다.
    SMSC delivery receipt란? submit 한메시지를 smsc에서 처리한 결과 내역입니다.

    submit_sm, submit_multi 및 data_sm 에서 다음과 같이 인코딩됩니다 .
    (ESME -> SMSC) PDU:
    SMSC Delivery Receipt (bits 1 and 0)
    xxxxxx00 : SMSC delivery receipt 요청되지 않음 (default)
    xxxxxx01 : 최종 배송결과가 성공 또는 실패인 경우 결과서 요청
    xxxxxx10 : 최종 배송 결과가 실패인경우 결과서 요청
    xxxxxx11 : 예약됨
    SME originated Acknowledgement (bits 3 and 2)
    xxxx00xx : SME 확인 요청하지 않음(default)
    xxxx01xx : SME 배송 확인 요청
    xxxx10xx : SME manual/user 승인 요청
    xxxx11xx : 배송과 manual/user 확인 둘다 요청
    Intermediate Notification (bit 5)
    xxx0xxxx : 중간 알림 요청하지 않음
    xxx1xxxx : 중간 알림 요청
    참고 : 배달 확인은 메시지가 취소 또는 배달 불가 등 배달되지 않은 최종 상태에 도달한 경우에만 반환됩니다.
    중간 알림 기능에 대한 지원은 SMSC 구현에 따라 다르며 SMPP 프로토콜 사양의 범위를 벗어납니다.

replace_if_present_flag

  • Integer(Size octets : 1)
  • SMSC에 이전에 제출된 메시지(아직 pending 상태일때)를 교체하도록 요청하는 데 사용됩니다. SMSC는 원본 주소, 대상 주소 및 service_type 이 새 메시지의 동일한 필드와 일치하는 경우 기존 메시지를 대체합니다.

    0 : 교체하지 않습니다. (default)
    1 : 교체합니다.
    2~155 : 예약됨
    SMSC 메시징 기능을 사용하는 ESME 응용프로그램은 replace 값을 1로 주어야 합니다. 그래야만 SME당 최대 하나의 메시지 보류를 보장합니다.

data_coding

  • Integer(Size octets : 1)

    note
    a. 이러한 코딩 방식은 GSM, TDMA 및 CDMA에 공통입니다. SMPP 프로토콜을 사용하면 ESME 애플리케이션이 세 가지 기술 모두에 대해 동일한 DCS 값(즉, GSM 03.38 값)을 사용할 수 있습니다.
    b. Data Coding Scheme이 TDMA 및/또는 CDMA에 대해 정의되었지만 GSM에 대해 정의되지 않은 경우 SMPP는 GSM 03.38 예약 값을 사용합니다.
    d. data_coding 매개변수는 문자 코드 설정만 지정하도록 진화합니다. 따라서 GSM MWI 제어를 지정하는 권장 방법은 선택적 매개변수 _ms_msg_wait_facilities 및 ms_validity에서 관련 설정을 지정하는 것입니다.
    e. data_coding 매개변수는 문자 코드 설정만 지정하도록 진화합니다. 따라서 GSM 메시지 클래스 제어를 지정하는 권장 방법은 선택적 매개변수 dest_addr_subunit에 관련 설정을 지정하는 것입니다.

sm_default_msg_id

  • Integer(Size octets : 1)
  • 미리 정의된('준비된') 메시지의 SMSC 인덱스를 지정합니다.

    0 : 예약됨
    1 ~ 254 : 사용 가능
    255 : 예약됨

sm_length

  • Integer(Size octets : 1)
  • short_message 매개변수 의 길이를 옥텟 단위로 지정합니다.
    message_payload 매개변수가 254옥텟보다 큰 사용자 데이터를 전송하는데 사용되는 경우 sm_length 는 submit_sm, submit_multi 및 deliver_sm PDU에서 0으로 설정되어야 합니다.

    0 : short message filed에 사용자 데이터가 없음
    1 ~ 254 : 허용됨
    255 : 허용되지 않음

short_message

  • Octet String(Size octets : 0 ~ 254)
  • short_message 매개변수는 사용자 데이터를 포함합니다. 최대 254 옥텟을 보낼 수 있습니다
    ESME는 submit_sm, submit_multi 및 deliver_sm 에서 선택적 message_payload 매개변수를 사용하여 더 큰 사용자 데이터 크기를 전송할 수 있습니다.

SUBMIT_SM_RESP 구조

HEADER

command_length

  • Integer(Size octets : 4)
  • 패킷의 전체 길이를 나타냅니다.

command_id

  • Integer(Size octets : 4)
  • SMPP PDU가 나타내는 메시지 유형(예: submit_sm, query_sm 등) 을 식별합니다.
    Integer(Size octets : 4)

    submit_sm은 0x00000004값으로 되어있습니다.
    받는 값은 0x80000004입니다.

command_status

  • Integer(Size octets : 4)
  • SMPP 요청의 성공 또는 실패를 나타냅니다. SMPP 응답 메시지에서만 관련이
    있으며 SMPP 요청 메시지에서는 NULL로 설정해야 합니다.

sequence_number

  • Integer(Size octets : 4)
  • 통신한 패킷의 순서와 몇번째인지 확인하기 위함

BODY

message_id

  • C-Octet String(Size octets : 65)
  • 제출된 각 단문 메시지에 대해 SMSC에서 할당한 고유한 메시지 식별자 참조입니다.

    참고
    command_status값이 0이 아닌 값이면 body는 오지않습니다.
    header의 16바이트만 온것을 알 수 있습니다.
    status에 c2는 invalid length입니다.

OPTIONAL PARAMETERS for SUBMIT_SM

callback_num

단문 메시지와 관련된 콜백 번호입니다.
이 매개변수는 여러 콜백 주소에 대해 여러 번 포함될 수 있습니다.

FieldSize octetsTypeDescription
Parameter Tag2Integer
Length2Integervalue의 길이
ValueVar 4 - 19Octet String아래에서 자세히 설명

Value처리 방법
0000000D (octet 1) : 콜백 숫자 인코딩 방식 (0: DTMF 숫자, 1: ASCII 숫자)
00000TTT (octet 2) : TON
0000NNNN (octet 3) : NPI
XXXXXXXX (octet 4) : 이후부턴 콜백 할 숫자 번호 기입
:
:
XXXXXXXX (octet N)

profile
모르면 공부하고 알게되면 공유하는 개발자

0개의 댓글