Adds the Referral webhook and PostBacks's referral structure (#26)
This commit is contained in:
parent
998c23c3e9
commit
bbd304b464
@ -18,4 +18,6 @@ const (
|
|||||||
PostBackAction
|
PostBackAction
|
||||||
// OptInAction represents opting in through the Send to Messenger button
|
// OptInAction represents opting in through the Send to Messenger button
|
||||||
OptInAction
|
OptInAction
|
||||||
|
// ReferralAction represents ?ref parameter in m.me URLs
|
||||||
|
ReferralAction
|
||||||
)
|
)
|
||||||
|
@ -56,6 +56,8 @@ type PostBack struct {
|
|||||||
Time time.Time `json:"-"`
|
Time time.Time `json:"-"`
|
||||||
// PostBack ID
|
// PostBack ID
|
||||||
Payload string `json:"payload"`
|
Payload string `json:"payload"`
|
||||||
|
// Optional referral info
|
||||||
|
Referral Referral `json:"referral"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Watermark is the RawWatermark timestamp rendered as a time.Time.
|
// Watermark is the RawWatermark timestamp rendered as a time.Time.
|
||||||
|
19
messenger.go
19
messenger.go
@ -50,6 +50,9 @@ type PostBackHandler func(PostBack, *Response)
|
|||||||
// OptInHandler is a handler used to handle opt-ins.
|
// OptInHandler is a handler used to handle opt-ins.
|
||||||
type OptInHandler func(OptIn, *Response)
|
type OptInHandler func(OptIn, *Response)
|
||||||
|
|
||||||
|
// ReferralHandler is a handler used postback callbacks.
|
||||||
|
type ReferralHandler func(ReferralMessage, *Response)
|
||||||
|
|
||||||
// Messenger is the client which manages communication with the Messenger Platform API.
|
// Messenger is the client which manages communication with the Messenger Platform API.
|
||||||
type Messenger struct {
|
type Messenger struct {
|
||||||
mux *http.ServeMux
|
mux *http.ServeMux
|
||||||
@ -58,6 +61,7 @@ type Messenger struct {
|
|||||||
readHandlers []ReadHandler
|
readHandlers []ReadHandler
|
||||||
postBackHandlers []PostBackHandler
|
postBackHandlers []PostBackHandler
|
||||||
optInHandlers []OptInHandler
|
optInHandlers []OptInHandler
|
||||||
|
referralHandlers []ReferralHandler
|
||||||
token string
|
token string
|
||||||
verifyHandler func(http.ResponseWriter, *http.Request)
|
verifyHandler func(http.ResponseWriter, *http.Request)
|
||||||
}
|
}
|
||||||
@ -112,6 +116,11 @@ func (m *Messenger) HandlePostBack(f PostBackHandler) {
|
|||||||
m.postBackHandlers = append(m.postBackHandlers, f)
|
m.postBackHandlers = append(m.postBackHandlers, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// HandleReferral adds a new ReferralHandler to the Messenger
|
||||||
|
func (m *Messenger) HandleReferral(f ReferralHandler) {
|
||||||
|
m.referralHandlers = append(m.referralHandlers, f)
|
||||||
|
}
|
||||||
|
|
||||||
// Handler returns the Messenger in HTTP client form.
|
// Handler returns the Messenger in HTTP client form.
|
||||||
func (m *Messenger) Handler() http.Handler {
|
func (m *Messenger) Handler() http.Handler {
|
||||||
return m.mux
|
return m.mux
|
||||||
@ -295,6 +304,14 @@ func (m *Messenger) dispatch(r Receive) {
|
|||||||
message.Time = time.Unix(info.Timestamp/int64(time.Microsecond), 0)
|
message.Time = time.Unix(info.Timestamp/int64(time.Microsecond), 0)
|
||||||
f(message, resp)
|
f(message, resp)
|
||||||
}
|
}
|
||||||
|
case ReferralAction:
|
||||||
|
for _, f := range m.referralHandlers {
|
||||||
|
message := *info.ReferralMessage
|
||||||
|
message.Sender = info.Sender
|
||||||
|
message.Recipient = info.Recipient
|
||||||
|
message.Time = time.Unix(info.Timestamp/int64(time.Microsecond), 0)
|
||||||
|
f(message, resp)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -345,6 +362,8 @@ func (m *Messenger) classify(info MessageInfo, e Entry) Action {
|
|||||||
return PostBackAction
|
return PostBackAction
|
||||||
} else if info.OptIn != nil {
|
} else if info.OptIn != nil {
|
||||||
return OptInAction
|
return OptInAction
|
||||||
|
} else if info.ReferralMessage != nil {
|
||||||
|
return ReferralAction
|
||||||
}
|
}
|
||||||
return UnknownAction
|
return UnknownAction
|
||||||
}
|
}
|
||||||
|
24
receiving.go
24
receiving.go
@ -41,6 +41,8 @@ type MessageInfo struct {
|
|||||||
Read *Read `json:"read"`
|
Read *Read `json:"read"`
|
||||||
|
|
||||||
OptIn *OptIn `json:"optin"`
|
OptIn *OptIn `json:"optin"`
|
||||||
|
|
||||||
|
ReferralMessage *ReferralMessage `json:"referral"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type OptIn struct {
|
type OptIn struct {
|
||||||
@ -54,6 +56,28 @@ type OptIn struct {
|
|||||||
Ref string `json:"ref"`
|
Ref string `json:"ref"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ReferralMessage represents referral endpoint
|
||||||
|
type ReferralMessage struct {
|
||||||
|
*Referral
|
||||||
|
|
||||||
|
// Sender is the sender of the message
|
||||||
|
Sender Sender `json:"-"`
|
||||||
|
// Recipient is who the message was sent to.
|
||||||
|
Recipient Recipient `json:"-"`
|
||||||
|
// Time is when the message was sent.
|
||||||
|
Time time.Time `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Referral represents referral info
|
||||||
|
type Referral struct {
|
||||||
|
// Data originally passed in the ref param
|
||||||
|
Ref string `json:"ref"`
|
||||||
|
// Source type
|
||||||
|
Source string `json:"source"`
|
||||||
|
// The identifier dor the referral
|
||||||
|
Type string `json:"type"`
|
||||||
|
}
|
||||||
|
|
||||||
// Sender is who the message was sent from.
|
// Sender is who the message was sent from.
|
||||||
type Sender struct {
|
type Sender struct {
|
||||||
ID int64 `json:"id,string"`
|
ID int64 `json:"id,string"`
|
||||||
|
Loading…
Reference in New Issue
Block a user