This package provides the basic framework required to implement and run a Line Bot.
There are two main modules in this package:
1.`LineBot` provides helpers to call the various APIs, for example `LineBot.send_reply/3` to reply to an event. This module also defines callbacks for you to implement, which are called when your bot receives events from the Line server.
2.`LineBot.Webhook` provides a `Plug` for handling HTTP requests from the line server, and forwarding them to your callback module, which should implement the `LineBot` behaviour.
1. Defines callbacks (see `LineBot`) to handle all of the possible [events](https://developers.line.biz/en/reference/messaging-api/#webhook-event-objects) a bot can receive.
1. Provides a plug (`LineBot.Webhook`) to automatically verify, decode, and dispatch webhook requests a bot received.
1. Provides API helpers (see `LineBot`) for all of the documented Messaging API endpoints.
* Automatically retrieves, maintains, renews, and injects the access token into API requests a bot makes.
* When necessary, automatically handles encoding and decoding of JSON and adding the required HTTP headers.
1. Defines structs for all of the available message types, to allow for compile-time checking. See `LineBot.Message`.
## Getting Started
### 1. Configure OAuth credentials for your bot.
Credentials are available from the [Line Developers](https://developers.line.biz/) site. The credentials are called `Channel ID` and `Channel secret` on the developers site.
In `config/config.exs`:
```elixir
import Config
config :line_bot,
client_id: YOUR_CHANNEL_ID
client_secret: YOUR_CHANNEL_SECRET
```
### 2. Create a module that implements the `LineBot` behaviour to handle callbacks.
The recommended way to do this is to `use LineBot`, which will create default callbacks handlers, and then override the events you want to handle. The default implementations return without doing anything.
The [Rich Menu API](https://developers.line.biz/en/reference/messaging-api/#rich-menu) is not currently implemented, although `LineBot.APIClient` can be used to call the API manually.
For example, you can post to the rich menu API like this:
Documentation for this package is available online at [Hexdocs](https://hexdocs.pm/line_bot/) and interactively in iex via [`h/1`](https://hexdocs.pm/iex/IEx.Helpers.html#h/1), for example: