본문으로 건너뛰기

Class ASP 에서 알림톡 및 문자를 발송하고 리포트 처리하기

· 약 10분
Wiley Choi

Class ASP 에서 알림톡 및 문자를 발송하고 웹훅을 호출 받아 리포트(발송결과)처리까지 해보겠습니다.

소스코드

Classic ASP 예제 코드 에서 전체 코드를 다운 받을 수 있습니다.

환경 설정

솔라피 API Key 관리 페이지(로그인 필요)에서 API Key 를 발급받아 config.asp 파일에 설정해줍니다.

<%
Dim serviceHost, apiKey, apiSecret
serviceHost = "https://api.solapi.com"
apiKey = "API KEY 를 입력하세요"
apiSecret = "API SECRET 을 입력하세요"
webhookSecretKey = "웹훅 보안키를 입력하세요"
%>

SMS 문자 발송하기

먼저, 단건의 SMS 문자를 발송해 보겠습니다. 아래와 같이 코드를 입력하고 실행하면 1건의 SMS가 발송됩니다.

<%@Language="VBScript" CODEPAGE="65001" %>
<!--#include file="aspJSON1.19.asp" -->
<!--#include file="messages.asp" -->
<%
Set oJSON = New aspJSON
With oJSON.data
.Add "messages", oJSON.Collection()
With oJSON.data("messages")
.Add 0, oJSON.Collection()
With .item(0)
.Add "to", "01012345678"
.Add "from", "0212345678"
.Add "text", "Classic ASP 에서 SMS 문자 발송" '텍스트 길이가 90바이트(완성형 한글 기준) 초과하면 LMS로 자동 발송
End With
End With
End With

Dim resultJSON
resultJSON = SendMessages(oJSON)
Response.Write resultJSON.JSONoutput()
%>

두 건 이상의 문자를 한꺼번에 발송하려면 아래와 같이 순차적으로 추가해 줍니다.

<%@Language="VBScript" CODEPAGE="65001" %>
<!--#include file="aspJSON1.19.asp" -->
<!--#include file="messages.asp" -->
<%
Set oJSON = New aspJSON
With oJSON.data
.Add "messages", oJSON.Collection()
With oJSON.data("messages")
.Add 0, oJSON.Collection()
With .item(0)
.Add "to", "01000000001"
.Add "from", "0212345678"
.Add "text", "Classic ASP 에서 첫번째 SMS 문자 #1"
End With
.Add 1, oJSON.Collection()
With .item(1)
.Add "to", "01000000002"
.Add "from", "0212345678"
.Add "text", "Classic ASP 에서 두번째 SMS 문자 #2"
End With
.Add 2, oJSON.Collection()
With .item(2)
.Add "to", "01000000003"
.Add "from", "0212345678"
.Add "text", "Classic ASP 에서 세번째 SMS 문자 #3"
End With
End With
End With

Dim resultJSON
resultJSON = SendMessages(oJSON) ' 위에서 추가된 여러건의 문자가 한번의 요청(Request)으로 한꺼번에 발송됩니다.
Response.Write resultJSON.JSONoutput()
%>

LMS(장문) 문자 발송

제목과 함께 LMS 문자 발송 예시는 아래와 같습니다.

<%@Language="VBScript" CODEPAGE="65001" %>
<!--#include file="aspJSON1.19.asp" -->
<!--#include file="messages.asp" -->
<%
Set oJSON = New aspJSON
With oJSON.data
.Add "messages", oJSON.Collection()
With oJSON.data("messages")
.Add 0, oJSON.Collection()
With .item(0)
.Add "to", "01012345678"
.Add "from", "0212345678"
.Add "subject", "LMS 제목"
.Add "text", "LMS 문자 내용" ' 내용이 짧더라도 subject가 입력되면 LMS로 발송됩니다.
End With
End With
End With

Dim resultJSON
resultJSON = SendMessages(oJSON)
Response.Write resultJSON.JSONoutput()
%>

MMS(이미지) 문자 발송

아래는 이미지를 포함 문자를 발송하는 예시입니다. 한번 업로드한 이미지는 여러번 중복 사용이 가능합니다.

<%@Language="VBScript" CODEPAGE="65001" %>
<!--#include file="aspJSON1.19.asp" -->
<!--#include file="messages.asp" -->
<%
Dim fileInfo, fileId, resultJSON

' 이미지 업로드 (200KB 이하 JPG 이미지만 가능)
Set fileInfo = UploadMMSImage("test.jpg")
fileId = fileInfo.data("fileId")

Set oJSON = New aspJSON
With oJSON.data
.Add "messages", oJSON.Collection()
With oJSON.data("messages")
.Add 0, oJSON.Collection()
With .item(0)
.Add "to", "01000000001"
.Add "from", "0212345678"
.Add "subject", "MMS 제목 #1"
.Add "text", "MMS 문자 내용 #1"
.Add "imageId", fileId ' 이미지ID에 fileId값을 입력
End With
.Add 1, oJSON.Collection()
With .item(1)
.Add "to", "01000000002"
.Add "from", "0212345678"
.Add "subject", "MMS 제목 #2"
.Add "text", "MMS 문자 내용 #2"
.Add "imageId", fileId ' 첫번째 문자와 동일한 이미지로 발송
End With
End With
End With

Set resultJSON = SendMessages(oJSON)
Response.Write resultJSON.JSONoutput()
%>

알림톡 발송하기

아래는 알림톡 발송 예시입니다. 문자 발송 시 사용되었던 text 필드를 사용하지 않고 kakaoOptions 아래 pfId(채널아이디), templateId(템플릿아이디), variables(변수값) 으로 구성하여 서버로 요쳥합니다.

<%@Language="VBScript" CODEPAGE="65001" %>
<!--#include file="aspJSON1.19.asp" -->
<!--#include file="messages.asp" -->
<%
Dim oJSON, resultJSON

Set oJSON = New aspJSON
With oJSON.data
.Add "messages", oJSON.Collection()
With oJSON.data("messages")
.Add 0, oJSON.Collection()
With .item(0)
' .Add "from", "0212345678" 알림톡 실패 시 문자 대체 발송을 원할 경우 등록된 발신번호 입력
.Add "to", "01012345678" ' 수신번호 입력
.Add "kakaoOptions", oJSON.Collection()
With .item("kakaoOptions")
.Add "pfId", "KA01PF1903260033550428GGGGGGGGab" ' 실제 PFID 값으로 수정
.Add "templateId", "KA01TP2301260109382045fWJtLZUIab" ' 실제 템플릿ID 값으로 수정
.Add "disableSms", True ' False: 실패시 문자 대체발송, True: 대체발송 안함
.Add "variables", oJSON.Collection()
With .item("variables")
.Add "#{변수1}", "값1" ' 실제 변수, 값으로 입력
.Add "#{변수2}", "값2"
End With
End With
End With
End With
End With

Set resultJSON = SendMessages(oJSON)
Response.Write resultJSON.JSONoutput()

Set oJSON = Nothing
Set resultJSON = Nothing
%>

대체 발송 최적화 하기

아래와 같이 replacements 파라메터를 구성하여 기본 대체 발송 문구가 아니라 원하는 문구로 대체 발송을 최적화 할 수 있습니다.
꼭 문자 타입으로, 같은 수신번호로 발송해야 하는 강제사항이 없으므로 다양한 응용이 가능합니다.

<%@Language="VBScript" CODEPAGE="65001" %>
<!--#include file="aspJSON1.19.asp" -->
<!--#include file="messages.asp" -->
<%
Dim oJSON, resultJSON

Set oJSON = New aspJSON
With oJSON.data
.Add "messages", oJSON.Collection()
With oJSON.data("messages")
.Add 0, oJSON.Collection()
With .item(0)
.Add "to", "01012345678" ' 수신번호 입력
.Add "kakaoOptions", oJSON.Collection()
With .item("kakaoOptions")
.Add "pfId", "KA01PF1903260033550428GGGGGGGGab" ' 실제 PFID 값으로 수정
.Add "templateId", "KA01TP2301260109382045fWJtLZUIab" ' 실제 템플릿ID 값으로 수정
.Add "variables", oJSON.Collection()
With .item("variables")
.Add "#{변수1}", "값1" ' 실제 변수, 값으로 입력
.Add "#{변수2}", "값2"
End With
End With
.Add "replacements", oJSON.Collection()
With .item("replacements")
.Add 0, oJSON.Collection()
With .item(0)
.Add "from", "021112222"
.Add "to", "01011112222"
.Add "text", "대체 문자 발송"
End With
End With
End With
End With
End With

Set resultJSON = SendMessages(oJSON)
Response.Write resultJSON.JSONoutput()

Set oJSON = Nothing
Set resultJSON = Nothing
%>

웹훅 예시

솔라피 콘솔페이지에서 웹훅을 설정해줍니다. 새 웹훅 등록

시크릿키를 확인하여 config.asp 파일에 webhookSecretKey 에 설정해줍니다. 시크릿키 확인

아래는 메시지리포트 웹훅 처리 예시입니다.
발송 시 커스텀 필드 (customFields) 값을 입력하면 리포트 처리 때 참조 값으로 사용할 수 있습니다.
아래 이어서 설명하는 커스텀 필드 예시를 참고하세요.

<%@Language="VBScript" CODEPAGE="65001" %>
<!--#include file="../aspJSON1.19.asp" -->
<!--#include file="../messages.asp" -->
<%
' 보안을 위해 솔라피에서 보내온 것이 맞는지 체크한다.
Dim eventName, secret
eventName = Trim(Request.ServerVariables("HTTP_X_SOLAPI_EVENT_NAME"))
secret = Trim(Request.ServerVariables("HTTP_X_SOLAPI_SECRET"))
If eventName <> "SINGLE-REPORT" Then
Response.End
End If
If StrComp(secret, webhookSecretKey, vbTextCompare) <> 0 Then
Response.End
End If

If Request.TotalBytes > 0 Then
Dim lngBytesCount, body
lngBytesCount = Request.TotalBytes
body = BytesToStr(Request.BinaryRead(lngBytesCount))

Dim rJSON
Set rJSON = New aspJSON
rJSON.loadJSON(body)

For Each index In rJSON.data
Set message = rJSON.data(index)
' 알림톡이고 발송실패인 경우
If message.item("type") = "ATA" And message.item("statusCode") <> "4000" Then
' 여기에 리포트 처리 로직 삽입
Set customFields = message.item("customFields")
' Custom Fields 값 가져오기
Dim key1, key2
key1 = customFields("key1")
key2 = customFields("key2")
End If
Next
End If

Function BytesToStr(bytes)
Dim Stream
Set Stream = Server.CreateObject("ADODB.Stream")
Stream.Type = 1 'adTypeBinary
Stream.Open
Stream.Write bytes
Stream.Position = 0
Stream.Type = 2 'adTypeText
Stream.Charset = "UTF-8"
BytesToStr = Stream.ReadText
Stream.Close
Set Stream = Nothing
End Function
%>

데이터 형식은 아래 레퍼런스를 참고해 주세요.

커스텀 필드 사용하여 필요한 값 전달 받기

<%@Language="VBScript" CODEPAGE="65001" %>
<!--#include file="aspJSON1.19.asp" -->
<!--#include file="messages.asp" -->
<%
Dim oJSON, resultJSON

Set oJSON = New aspJSON
With oJSON.data
.Add "messages", oJSON.Collection()
With oJSON.data("messages")
.Add 0, oJSON.Collection()
With .item(0)
' .Add "from", "0212345678" 알림톡 실패 시 문자 대체 발송을 원할 경우 등록된 발신번호 입력
.Add "to", "01012345678" ' 수신번호 입력
.Add "kakaoOptions", oJSON.Collection()
With .item("kakaoOptions")
.Add "pfId", "KA01PF1903260033550428GGGGGGGGab" ' 실제 PFID 값으로 수정
.Add "templateId", "KA01TP2301260109382045fWJtLZUIab" ' 실제 템플릿ID 값으로 수정
.Add "disableSms", True ' False: 실패시 문자 대체발송, True: 대체발송 안함
.Add "variables", oJSON.Collection()
With .item("variables")
.Add "#{변수1}", "값1" ' 실제 변수, 값으로 입력
.Add "#{변수2}", "값2"
End With
End With
.Add "customFields", oJSON.Collection()
With .item("customFields") ' 확장 필드로 사용. 키는 30자, 값은 100자 제한
.Add "key1", "value1"
.Add "key2", "value2"
.Add "unique", "uniquevalue"
End With
End With
End With

Set resultJSON = SendMessages(oJSON)
Response.Write resultJSON.JSONoutput()

Set oJSON = Nothing
Set resultJSON = Nothing
%>