README.md

# MessengerBot

Facebook Messenger Chatbot client

## Installation

The package can be installed by adding `messenger_bot` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [{:messenger_bot, "~> 1.0.0-beta4"}]
end
```

The docs can be found at [https://hexdocs.pm/messenger](https://hexdocs.pm/messenger).

## Usage

### Configuration

Update your `config.exs` file and set processor for each input data type, default is Log.

```elixir
# Configure messenger_bot

config :messenger_bot,
  setup_token: {:system, "MESSENGER_SETUP_TOKEN", ""},
  app_id: {:system, "MESSENGER_APP_ID", ""},
  app_token: {:system, "MESSENGER_APP_TOKEN", ""},
  pages: %{
    "1334609009956145" => %{
      id: "1334609009956145", name: "Support Bot",
      token: {:system, "MESSENGER_PAGE_TOKEN_1334609009956145", ""}
    }
  }

# Register messenger_bot 'event_bus event topics'

config :event_bus,
  topics: [:mb_message_sent_request_failed,
    :mb_message_sent_failed,
    :mb_message_sent_succeeded,
    :mb_webhook_received,
    :mb_delivery_received,
    :mb_read_received,
    :mb_message_echo_received,
    :mb_message_attachments_received,
    :mb_message_quick_reply_received,
    :mb_message_received,
    :mb_optin_received,
    :mb_postback_received,
    :mb_referral_received,
    :mb_payment_received,
    :mb_checkout_update_received,
    :mb_pre_checkout_received,
    :mb_account_linking_received,
    :mb_policy_enforcement_received,
    :mb_app_roles_received,
    :mb_standby_received,
    :mb_pass_thread_control_received,
    :mb_take_thread_control_received,
    :mb_na_received]
```

### Subscribe to event topics

`messenger_bot` package uses [event_bus library](https://github.com/mustafaturan/event_bus) to sent/process Messenger events. Please refer to `event_bus` docs to learn more. You can subscribe registered events. To subscribe and log all events you can use `EventBus.subscribe({MessengerBot.Processor.Log, [".*"]})`.

### Set Get Started Button

```elixir
  alias MessengerBot.Payload.MessengerProfileSetRequest
  alias MessengerBot.Service.MessagengerProfile

  page_id = ""
  request = MessengerProfileSetRequest.build_get_started_button()
  response = MessagengerProfile.setup_get_started_button(page_id, request)
  # %MessengerBot.Payload.MessengerProfileSetResponse{result: "success"}
```

### Set Persistent Menu

```elixir
  alias MessengerBot.Payload.MessengerProfileSetRequest
  alias MessengerBot.Service.MessagengerProfile

  page_id = "123456"
  menu_items = [persistent_menu()]
  request = MessengerProfileSetRequest.build_persistent_menu(menu_items)
  response = MessagengerProfile.setup_get_started_button(page_id, request)
  # %MessengerBot.Payload.MessengerProfileSetResponse{result: "success"}
```