LINE BOTを作りたいのでLINE Messaging APIについて調べる

# 目的

必要な情報をいろいろと通知してくれる自分用 & 友人用LINE BOTを作りたい

## LINE bot アカウントの作成と、2種類のbot作成方法

### LINE bot アカウント作成

[Messaging APIを利用するには \| LINE Developers](https://developers.line.biz/ja/docs/messaging-api/getting-started/)に記載のある通り、[LINE Developers](https://developers.line.biz/console/)からポチポチっとアカウントを作成する。

プロバイダー = botの管理者であるので、ここは自身の情報を入力。その後、bot アカウントとなる"チャネル"を作成。なお、作成には普通のLINEアカウントが必要。

LINEアカウント -> プロバイダー -> チャネルという関係性があり、プロバイダー/チャネルとも作り直しが可能なので適当な情報でもよい。

### 2種類のbot作成方法

LINE管理画面で簡易的に作成する方法と、Messaging APIを使って開発する方法がある。

LINE管理画面の場合、[LINE Official Account Manager](https://manager.line.biz/)から作成するが、定型的なあいさつメッセージ+αしか作成できないので、Messaging APIを使って開発する。

### Messaging APIの費用

[【公式】LINE公式アカウントの運用費用は？料金プランを解説！](https://www.linebiz.com/jp/column/technique/20200204/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147841/6bc2929c-ee59-1f57-7dd2-3af9795be97e.png)

ユーザーから受け取ったメッセージに対する返信は無料で、課金対象はMessaging APIの「Push API」「Multicast API」「Broadcast API」。Multicast/Broadcastでユーザーが100人いた時は100通とカウントされるのか?は確認中(多分されそう)

家族や友人間ならフリープランで問題なさげだが、通知メッセージが多くなってしまうときは要注意。

### Messaging APIの仕組み

クイックスタートはこちら。
[Messaging APIの概要 \| LINE Developers](https://developers.line.biz/ja/docs/messaging-api/overview/)

リファレンスはこちら。
[Messaging APIリファレンス \| LINE Developers](https://developers.line.biz/ja/reference/messaging-api/)

#### エンドユーザーからのメッセージの受信

文字で図解するとこうなる。

エンドユーザー → LINE bot アカウント -> [HTTPリクエスト] -> [開発者が用意するサーバー]

LINE bot アカウントが送信するHTTPリクエストの内容はリファレンスに掲載されている。例えば単純なテキストメッセージだとこんな感じ。

[Messaging APIリファレンス \| LINE Developers](https://developers.line.biz/ja/reference/messaging-api/#wh-text)

```json
{
  "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
  "type": "message",
  "mode": "active",
  "timestamp": 1462629479859,
  "source": {
    "type": "user",
    "userId": "U4af4980629..."
  },
  "message": {
    "id": "325708",
    "type": "text",
    "text": "Hello, world! (love)",
    "emojis": [
      {
        "index": 14,
        "length": 6,
        "productId": "5ac1bfd5040ab15980c9b435",
        "emojiId": "001"
      }
    ]
  }
}
```

#### エンドユーザーへのメッセージ返信

文字で図解するとこうなる。メッセージ受信と逆なだけですね。

エンドユーザー <- LINE bot アカウント <- [HTTPリクエスト] <- [開発者が用意するサーバー]

[Messaging APIリファレンス \| LINE Developers](https://developers.line.biz/ja/reference/messaging-api/#send-push-message)

```javascript

const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

const message = {
  type: 'text',
  text: 'Hello World!'
};

client.replyMessage('<replyToken>', message)
  .then(() => {
    ...
  })
  .catch((err) => {
    // error handling
  });
```

#### エンドユーザーへの単純メッセージ送信

上記はエンドユーザーの送信に対する返信だったが、単純に通知などを送る場合はこれでよい。

エンドユーザー <- LINE bot アカウント <- [HTTPリクエスト] <- [開発者が用意するサーバー]

[Messaging APIリファレンス | LINE Developers](https://developers.line.biz/ja/reference/messaging-api/#send-broadcast-message)

```javascript

const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '[チャネルアクセストークン]'
});

const message1 = {
  type: 'text',
  text: 'Hello,'
};

const message2 = {
  type: 'text',
  text: 'World!'
};

client.broadcast([message1, message2])

```

結果、こうなる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147841/fa346319-39ad-ab42-8319-404891daddf0.png)


### 何を使って実装するか?

このご時世にbotのためだけにOS入りのサーバー用意する奴はおらんやろ、ということでいろんな手法が紹介されています。

#### Google App Script

私は使ったことはないですが、簡易にjavascriptを実行できるGoogle App Scriptなど。

- [Google Apps ScriptでLINEBotのTodo管理Botを作ろう！ | Techpit（テックピット）](https://www.techpit.jp/p/google-apps-script-linebot-todo-bot)
- [LINE BOTの作り方 ～アカウントの作成とQ&Aの登録方法～](https://first-contact.jp/blog/article/linebot/)

#### Azure Logic Apps

ローコードツールであるLogic Apps/Power Automate。

- [LINE Messaging API 用のカスタムコネクタv1を作りました - Japan Power Platform User Group コミュニティサイト](https://power.users.community/forums/topic/line-messaging-api-%E7%94%A8%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%82%B3%E3%83%8D%E3%82%AF%E3%82%BFv1%E3%82%92%E4%BD%9C%E3%82%8A%E3%81%BE%E3%81%97%E3%81%9F/)
- [ASCII.jp：自分用メモ的にLINE送信した予定をAIで読み取ってGoogleカレンダーに自動登録しよう (1/4)](https://ascii.jp/elem/000/001/770/1770731/)

#### その他、サーバーレス系

公式はHerokuで実装しています。

[Herokuでサンプルボットを作成する | LINE Developers](https://developers.line.biz/ja/docs/messaging-api/building-sample-bot-with-heroku/#%E5%A7%8B%E3%82%81%E3%82%8B%E5%89%8D%E3%81%AB)