Add message sending
This commit is contained in:
parent
5006304edf
commit
7fed4ecf28
@ -13,6 +13,7 @@ var (
|
|||||||
conf = configure.New()
|
conf = configure.New()
|
||||||
verifyToken = conf.String("verify-token", "mad-skrilla", "The token used to verify facebook")
|
verifyToken = conf.String("verify-token", "mad-skrilla", "The token used to verify facebook")
|
||||||
verify = conf.Bool("should-verify", false, "Whether or not the app should verify itself")
|
verify = conf.Bool("should-verify", false, "Whether or not the app should verify itself")
|
||||||
|
pageToken = conf.String("page-token", "not skrilla", "The token that is used to verify the page on facebook")
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@ -25,10 +26,12 @@ func main() {
|
|||||||
m := messenger.New(messenger.MessengerOptions{
|
m := messenger.New(messenger.MessengerOptions{
|
||||||
Verify: *verify,
|
Verify: *verify,
|
||||||
VerifyToken: *verifyToken,
|
VerifyToken: *verifyToken,
|
||||||
|
Token: *pageToken,
|
||||||
})
|
})
|
||||||
|
|
||||||
m.Handle(messenger.TextAction, func(m messenger.Message) {
|
m.Handle(messenger.TextAction, func(m messenger.Message, r *messenger.Response) {
|
||||||
fmt.Printf("%v (Sent, %v)\n", m.Text, m.Time.Format(time.UnixDate))
|
fmt.Printf("%v (Sent, %v)\n", m.Text, m.Time.Format(time.UnixDate))
|
||||||
|
fmt.Println(r.Text("Hello, World!"))
|
||||||
})
|
})
|
||||||
|
|
||||||
fmt.Println("Serving messenger bot on localhost:8080")
|
fmt.Println("Serving messenger bot on localhost:8080")
|
||||||
|
16
messenger.go
16
messenger.go
@ -14,19 +14,22 @@ const (
|
|||||||
type MessengerOptions struct {
|
type MessengerOptions struct {
|
||||||
Verify bool
|
Verify bool
|
||||||
VerifyToken string
|
VerifyToken string
|
||||||
|
Token string
|
||||||
}
|
}
|
||||||
|
|
||||||
type MessageHandler func(Message)
|
type MessageHandler func(Message, *Response)
|
||||||
|
|
||||||
type Messenger struct {
|
type Messenger struct {
|
||||||
mux *http.ServeMux
|
mux *http.ServeMux
|
||||||
handlers map[Action]MessageHandler
|
handlers map[Action]MessageHandler
|
||||||
|
token string
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(mo MessengerOptions) *Messenger {
|
func New(mo MessengerOptions) *Messenger {
|
||||||
m := &Messenger{
|
m := &Messenger{
|
||||||
mux: http.NewServeMux(),
|
mux: http.NewServeMux(),
|
||||||
handlers: make(map[Action]MessageHandler),
|
handlers: make(map[Action]MessageHandler),
|
||||||
|
token: mo.Token,
|
||||||
}
|
}
|
||||||
|
|
||||||
if mo.Verify {
|
if mo.Verify {
|
||||||
@ -76,12 +79,19 @@ func (m *Messenger) dispatch(r Receive) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if f := m.handlers[a]; f != nil {
|
if f := m.handlers[a]; f != nil {
|
||||||
f(Message{
|
message := Message{
|
||||||
Sender: info.Sender.ID,
|
Sender: info.Sender.ID,
|
||||||
Recipient: info.Recipient.ID,
|
Recipient: info.Recipient.ID,
|
||||||
Time: time.Unix(info.Timestamp, 0),
|
Time: time.Unix(info.Timestamp, 0),
|
||||||
Text: info.Message.Text,
|
Text: info.Message.Text,
|
||||||
})
|
}
|
||||||
|
|
||||||
|
response := &Response{
|
||||||
|
to: Recipient{info.Sender.ID},
|
||||||
|
token: m.token,
|
||||||
|
}
|
||||||
|
|
||||||
|
f(message, response)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
54
response.go
Normal file
54
response.go
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
package messenger
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
SendMessageURL = "https://graph.facebook.com/v2.6/me/messages"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Response struct {
|
||||||
|
token string
|
||||||
|
to Recipient
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *Response) Text(message string) error {
|
||||||
|
m := SendMessage{
|
||||||
|
Recipient: r.to,
|
||||||
|
Message: MessageData{
|
||||||
|
Text: message,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
data, err := json.Marshal(m)
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := http.NewRequest("POST", SendMessageURL, bytes.NewBuffer(data))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
req.URL.RawQuery = "access_token=" + r.token
|
||||||
|
|
||||||
|
client := &http.Client{}
|
||||||
|
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
type SendMessage struct {
|
||||||
|
Recipient Recipient `json:"recipient"`
|
||||||
|
Message MessageData `json:"message"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type MessageData struct {
|
||||||
|
Text string `json:"text,omitempty"`
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user