-
Notifications
You must be signed in to change notification settings - Fork 1
/
payload.go
177 lines (145 loc) · 5.76 KB
/
payload.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
package valuefirst
import (
"github.com/fairyhunter13/phone"
"strconv"
)
// RequestSendSMS is the request of SendSMS.
type RequestSendSMS struct {
Version string `json:"@VER"`
User struct{} `json:"USER"`
DLR RequestSendSMSDLR `json:"DLR"`
SMS RequestSendSMSMessages `json:"SMS"`
}
// RequestSendSMSDLR is the DLR part of the RequestSendSMS.
type RequestSendSMSDLR struct {
URL string `json:"@URL"`
}
// Default sets the default values for the RequestSendSMS.
func (r *RequestSendSMS) Default() *RequestSendSMS {
if r.Version == "" {
r.Version = DefaultPayloadVersion
}
r.SMS = r.SMS.Default()
return r
}
// RequestSendSMSMessages is a collection of RequestSendSMSMessage.
type RequestSendSMSMessages []RequestSendSMSMessage
// Default sets the default values for each RequestSendSMSMessage.
func (r RequestSendSMSMessages) Default() RequestSendSMSMessages {
for idx, val := range r {
r[idx] = *val.Default(idx)
}
return r
}
// RequestSendSMSMessage is the message part of the RequestSendSMS.
type RequestSendSMSMessage struct {
// UDH is used for sending binary messages. For text message the value should be 0.
UDH string `json:"@UDH"`
// Extended type of messages. For text message the value should be 1.
Coding string `json:"@CODING"`
// This field describe the message text to be sent to receiver.
// SMS can contain up to 160 characters in Message Text.
// API allows user to send Message text of more than 160 characters.
// Credits will be deducted in the multiple of 160 characters according to the length of SMS.
Text string `json:"@TEXT"`
// New Parameter TEMPLATEINFO has been added for above functionality
// which will contain the template id and variables value to be replaced in template text.
// Template info parameter will have ~ separated values.
//
// If both TEXT and TEMPLATEINFO is given then priority will be given to Text.
//
// New error code i.e. INVALID_TEMPLATEINFO = 28694; has been created for error if occurred any,
// related to TEMPLATEINFO parameter, which include like invalid templateid is provided,
// variables count mismatch than the template Text variables count,
// template text not found for the given template id.
TemplateInfo string `json:"@TEMPLATEINFO"`
// Unique property of message. Default value is 0. For sending Flash SMS the value should be 1.
Property string `json:"@PROPERTY"`
// Unique ID of message. The client sends this value.
// In future communication, server sends this value back to the client.
// This value is used in future to check status of the message.
ID string `json:"@ID"`
// It is now possible to schedule a message.
// To schedule message to go at a later time,
// user can specify “SEND_ON” date as attribute of SMS tag.
// Only absolute date is supported.
// The value should be given in “YYYY-MM-DD HH:MM:SS TIMEZONE” format.
// Time zone is difference w.r.t. to GMT.
// Please refer Scheduling Support for more information on this feature.
SendOn string `json:"@SEND_ON"`
// Describe the Sender as well as Receiver address.
Address RequestSendSMSMessageAddresses `json:"ADDRESS"`
}
// Default sets the default values for the RequestSendSMSMessage.
func (r *RequestSendSMSMessage) Default(id int) *RequestSendSMSMessage {
if r.UDH == "" {
r.UDH = DefaultUDHText
}
if r.Coding == "" {
r.Coding = DefaultCodingText
}
if r.Property == "" {
r.Property = DefaultPropertyText
}
if r.ID == "" {
r.ID = strconv.Itoa(id + 1)
}
r.Address = r.Address.Default()
return r
}
// RequestSendSMSMessageAddresses is a collection of RequestSendSMSMessageAddress.
type RequestSendSMSMessageAddresses []RequestSendSMSMessageAddress
// Default sets the default values for each RequestSendSMSMessageAddress.
func (r RequestSendSMSMessageAddresses) Default() RequestSendSMSMessageAddresses {
for idx, val := range r {
r[idx] = *val.Default(idx)
}
return r
}
// RequestSendSMSMessageAddress is the address part of the RequestSendSMSMessage.
type RequestSendSMSMessageAddress struct {
// The Sender of the message.
// This field should conform to Sender Phone Number guidelines.
From string `json:"@FROM"`
// Person receiving the SMS, should confirm to Receiver Phone Number guidelines.
To string `json:"@TO"`
// Unique Sequence ID.
// Must be an integer and must be unique to each SMS.
// While checking message status, you must send this value.
Sequence string `json:"@SEQ"`
// A text that identify message.
// This is an optional parameter.
Tag string `json:"@TAG"`
}
// Normalize normalizes the RequestSendSMSMessageAddress.
func (r *RequestSendSMSMessageAddress) Normalize() *RequestSendSMSMessageAddress {
r.To = phone.NormalizeID(r.To, 0)
return r
}
// Default sets the default values for the RequestSendSMSMessageAddress.
func (r *RequestSendSMSMessageAddress) Default(id int) *RequestSendSMSMessageAddress {
if r.Sequence == "" {
r.Sequence = strconv.Itoa(id + 1)
}
return r.Normalize()
}
// GetMessageGUID return the GUID of the ResponseMessageAck.
func (r *ResponseMessageAck) GetMessageGUID() (res *ResponseMessageAckGUID, ok bool) {
res, ok = r.GUID.(*ResponseMessageAckGUID)
return
}
// GetMessageGUIDs return the GUIDs of the ResponseMessageAck.
func (r *ResponseMessageAck) GetMessageGUIDs() (res *ResponseMessageAckGUIDs, ok bool) {
res, ok = r.GUID.(*ResponseMessageAckGUIDs)
return
}
// GetMessageError return the Error of the ResponseMessageAckGUID.
func (r *ResponseMessageAckGUID) GetMessageError() (res *ResponseMessageAckGUIDError, ok bool) {
res, ok = r.Error.(*ResponseMessageAckGUIDError)
return
}
// GetMessageErrors return the Errors of the ResponseMessageAckGUID.
func (r *ResponseMessageAckGUID) GetMessageErrors() (res *ResponseMessageAckGUIDErrors, ok bool) {
res, ok = r.Error.(*ResponseMessageAckGUIDErrors)
return
}