An Elixir package for creating chatbots with the Line messenger. https://hex.pm/packages/line_bot
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
Adam Millerchip dbc2a91b15 Use a binary comprehension 3 years ago
config Initial checkin. 3 years ago
lib Add User-Agent header. 3 years ago
sample Use a binary comprehension 3 years ago
test Fix token_server_test 3 years ago
.formatter.exs Initial checkin. 3 years ago
.gitignore Initial checkin. 3 years ago
LICENSE Create LICENSE 3 years ago
README.md Add hexdocs link to readme 3 years ago
mix.exs Add package metadata 3 years ago
mix.lock Initial checkin. 3 years ago

README.md

Line Bot

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.

Installation

Add :line_bot to your mix deps:

defp deps do
  [
    {:line_bot, "~> 0.1.0"}
  ]
end

Features

  1. Defines callbacks (see LineBot) to handle all of the possible events a bot can receive.
  2. Provides a plug (LineBot.Webhook) to automatically verify, decode, and dispatch webhook requests a bot received.
  3. 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.
  4. 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 site. The credentials are called Channel ID and Channel secret on the developers site.

In config/config.exs:

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.

An example is available in the sample application.

3. Forward webhook requests to LineBot.Webhook, and tell it your callback module.

Using Plug.Router, this can be done as follows:

forward "/bot", to: LineBot.Webhook, callback: YourCallbackModule

The forwarded URL should be whatever you specified as the callback URI on the Line Developers site.

For detailed instructions, see LineBot.Webhook. You can also check the sample application.

Not implemented

Rich Menu API

The Rich Menu API 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:

menu = %{
  "areas" => [
    %{
      "action" => %LineBot.Message.Action.URI{uri: "http://example.com"},
      "bounds" => %{"height" => 1686, "width" => 2500, "x" => 0, "y" => 0}
    }
  ],
  "chatBarText" => "test",
  "name" => "test",
  "selected" => false,
  "size" => %{"height" => 1686, "width" => 2500}
}
LineBot.APIClient.post("richmenu", menu)

And get like this:

LineBot.APIClient.get("richmenu/list")

Flex Message Update

Recent additions to the Flex message API have not been added yet.

Online Documentation

Documentation for this package is available online at Hexdocs and interactively in iex via h/1, for example:

iex> h LineBot