Skip to content

Commit

Permalink
Merge pull request #6 from strangeworks/add-postback-support
Browse files Browse the repository at this point in the history
Add postback support
  • Loading branch information
nsomar committed Jan 16, 2017
2 parents 7c1b859 + 8ee9684 commit f75e022
Show file tree
Hide file tree
Showing 14 changed files with 312 additions and 145 deletions.
24 changes: 24 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Editor configuration file
# For Sublime Text install package `EditorConfig`
# For Atom install package `editorconfig`
root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = false

[*.md]
indent_style = space
indent_size = 2

[*.yml]
indent_style = space
indent_size = 2

[*.json]
indent_style = space
indent_size = 2
37 changes: 30 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ ExFacebookMessenger is a library that helps you create facebook messenger bots e

## Installation

```
```elixir
def deps do
[{:facebook_messenger, "~> 0.3.0"}]
end
Expand All @@ -23,7 +23,7 @@ To create an echo back bot, do the following:

In your `Plug.Router` define a `forward` with a route to `FacebookMessenger.Router`

```
```elixir
defmodule Sample.Router do
use Plug.Router
...
Expand All @@ -33,19 +33,42 @@ defmodule Sample.Router do
message_received: &Sample.Router.message/1

def message(msg) do
text = FacebookMessenger.Response.message_texts(msg) |> hd
sender = FacebookMessenger.Response.message_senders(msg) |> hd
message = FacebookMessenger.Response.parse(msg)

case message.type do
"postback" -> YourApplication.process_postback(message)
"message" -> YourApplication.proccess_text_message(message)
_ -> YourApplication.handle_default(message)
end
end
end

defmodule YourApplication do
def process_postback(message) do
sender = FacebookMessenger.Response.message_senders(message) |> hd

case message.payload do
"USER_CLICKED_BUTTON" -> FacebookMessenger.Sender.send(sender, text)
_ -> FacebookMessenger.Sender.send(sender, "I can't handle this message")
end
end


def process_text_message(message) do
text = FacebookMessenger.Response.message_texts(message) |> hd
sender = FacebookMessenger.Response.message_senders(message) |> hd
FacebookMessenger.Sender.send(sender, text)
end
enda
end

```

This defines a webhook endpoint at:
`http://your-app-url/messenger/webhook`

Go to your `config/config.exs` and add the required configurations
```

```elixir
config :facebook_messenger,
facebook_page_token: "Your facebook page token",
challenge_verification_token: "the challenge verify token"
Expand All @@ -65,6 +88,6 @@ If you use phoenix framework in your project, then you need the phoenix version

## Future Improvements

- [ ] Handle other types of facebook messages
- [x] Handle other types of facebook messages
- [ ] Support sending facebook structure messages
- [ ] Handle facebook postback messages
124 changes: 0 additions & 124 deletions lib/facebook_messenger_models.ex

This file was deleted.

13 changes: 13 additions & 0 deletions lib/models/facebook_messenger_entry.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
defmodule FacebookMessenger.Entry do
@moduledoc """
Facebook entry structure
"""
@derive [Poison.Encoder]
defstruct [:id, :time, :messaging]

@type t :: %FacebookMessenger.Entry{
id: String.t,
messaging: FacebookMessenger.Messaging.t,
time: integer
}
end
14 changes: 14 additions & 0 deletions lib/models/facebook_messenger_message.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
defmodule FacebookMessenger.Message do
@moduledoc """
Facebook message structure
"""

@derive [Poison.Encoder]
defstruct [:mid, :seq, :text]

@type t :: %FacebookMessenger.Message{
mid: String.t,
seq: integer,
text: String.t
}
end
15 changes: 15 additions & 0 deletions lib/models/facebook_messenger_messaging.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
defmodule FacebookMessenger.Messaging do
@moduledoc """
Facebook messaging structure, contains the sender, recepient and message info
"""
@derive [Poison.Encoder]
defstruct [:sender, :recipient, :timestamp, :message, :postback, :type]

@type t :: %FacebookMessenger.Messaging{
type: String.t,
sender: FacebookMessenger.User.t,
recipient: FacebookMessenger.User.t,
timestamp: integer,
message: FacebookMessenger.Message.t
}
end
13 changes: 13 additions & 0 deletions lib/models/facebook_messenger_postback.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
defmodule FacebookMessenger.Postback do
@moduledoc """
Facebook postback structure
"""

@derive [Poison.Encoder]
defstruct [:payload, :referral]

@type t :: %FacebookMessenger.Postback{
payload: String.t,
referral: FacebookMessenger.Referral
}
end
14 changes: 14 additions & 0 deletions lib/models/facebook_messenger_referral.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
defmodule FacebookMessenger.Referral do
@moduledoc """
Facebook referral structure
"""

@derive [Poison.Encoder]
defstruct [:ref, :source, :type]

@type t :: %FacebookMessenger.Referral{
ref: String.t,
source: String.t,
type: String.t
}
end
Loading

0 comments on commit f75e022

Please sign in to comment.