LINE: 公式アカウント入門(2) - Messaging APIを用いてWindowsのcurlコマンドからメッセージを投稿する

###### 実施環境：

Windows 11 Home 21H2
curl 8.0.1 (Windows)
iOS 16.7.10
LINE 15.0.2

### 0. 概要

 LINE で外部のプログラムからメッセージを投稿する方法の 1 つとして、「 LINE Notify 」というサービスがありました。
ですが、この LINE Notify は、より機能が多彩な類似サービスに資源を集中させるため、 2025 年 3 月 31 日にサービスが終了されることとなりました。

https://notify-bot.line.me/closing-announce

この LINE Notify の代替となるサービスとして、「 Messaging API 」があります。
 Messaging API は、 LINE 公式アカウントの作成が必要だったりするなど LINE Notify ほど手軽ではありません。
ですが、特に資格のようなものが必要というわけではなく、誰でも使うことができます。
公式アカウントと別に追加で費用がかかることもありません。

https://developers.line.biz/ja/services/messaging-api/

今回はこの Messaging API を用いて、 Windows の DOS コマンドライン上から LINE にメッセージを投稿してみます。

なお、最新の手順は以下の公式ドキュメントをご参照ください。

https://developers.line.biz/ja/docs/messaging-api/getting-started/

公式アカウントの作成については、以下の過去記事をご参照ください。

https://qiita.com/frozencatpisces/items/54cbc141478935696db1

### 1. Messaging API の有効化

まずは、 Messaging API の機能を有効化します。
公式アカウントの管理画面に入った後、右上の「設定」をクリックします。

![WS000302.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/c6c59765-b897-f402-06f9-0de94a4f1b0d.jpeg "1_1")

設定画面に移るので、左のメニューから「設定」⇒「 Messaging API 」をクリックします。

![WS000304.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/d939b46c-ba45-76ce-ea7d-75604918f7c2.jpeg "1_2")

 Messaging API の設定画面が表示されるので、「 Messaging APIを利用する」をクリックします。

![WS000305.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/54682cd4-61da-f499-b885-7bcc41abc780.jpeg "1_3")

事前に LINE Developers の登録を行っていない場合は、ここで登録を行うことになります。

:::note info
 LINE Developers は LINE における API 開発のためのサービスです。
 API 開発における様々な情報を提供している他、開発者向けの管理画面(コンソール)も提供しています。
上で記載した「公式ドキュメント」も、このサービスの中の 1 つです。
 LINE Developers のログイン情報自体は公式アカウントと同じ LINE Business ID ですが、公式アカウントや LINE Business ID とは別に情報登録を行う必要があります。

https://developers.line.biz/ja/

:::

開発者の名前とメールアドレスを入力し、規約を読んだら「同意する」をクリックします。

![WS000306.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/362fd687-87ae-a6ad-d4cb-19d1465f6416.jpeg "1_4")

確認画面が表示されるので、「 OK 」をクリックします。

![WS000308.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/4c4acc09-2fde-8475-6634-fb04c128237d.jpeg "1_5")

これで、 LINE Developers への登録は完了しました。
次に、プロバイダーの選択を行います。

:::note info
ここでいう「プロバイダー」とは、 LINE Developers を利用してサービスを提供する個人・企業・団体のことを指します。
サービス提供者、サービス事業主などと呼ばれる場合もあります。

https://developers.line.biz/ja/docs/line-developers-console/overview/#provider

:::

:::note warn
一度設定したプロバイダーは変更したり解除したりできません。
複数の公式アカウントを管理する場合や、異なる個人・企業・団体が関係する場合は特に注意してください。
プロバイダーや後述するチャネルの管理については、以下の公式ドキュメントもご参照ください。

https://developers.line.biz/ja/docs/line-developers-console/best-practices-for-provider-and-channel-management/

:::

今回は事前にプロバイダーの作成はしていないので、適当なプロバイダー名を入力、規約を読んで「同意する」をクリックします。

![WS000309.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/a39cfeb4-d082-50bc-f01d-c28eb7deb5da.jpeg "1_6")

![WS000310.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/22e65105-93e5-d583-09c5-8ff00774cbdc.jpeg "1_7")

これで、プロバイダーを作成、選択できました。
プロバイダーのプライバシーポリシーや利用規約の登録画面が出ますが、これは何も書かずに「 OK 」をクリックして大丈夫です。

![WS000311.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/9214d5e0-0f88-e629-69a6-92aa648db0e2.jpeg "1_8")

:::note info
ここで登録する「プライバシーポリシー」と「利用規約」は、 API の開発者向けではなく、 API の利用者向けに表示されるものとなります。
 API でユーザーの情報を収集したりする場合は、しっかり設定しておくべきでしょう。
:::

確認画面が出るので、「 OK 」をクリックします。

![WS000312.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/9b48a793-ab2e-3d3d-1a11-464c678a693d.jpeg "1_9")

これで、 Messaging API を有効化できました。

![WS000314.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/8bb11dea-647c-8d19-2f5b-9a2ea02fc794.jpeg "1_10")

:::note info
ここで作成したプロバイダーは、 LINE Developers のコンソールのホーム画面から管理できます。

https://developers.line.biz/console/

![WS000320.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/bd2bba7c-a3d1-48f7-86af-5a4c01329f70.jpeg "0_1")

:::

### 2. チャネルアクセストークンの発行

次は、メッセージの投稿に必要なチャネルアクセストークンを、チャネル情報をもとにして発行します。
チャネルアクセストークンには 4 種類ありますが、今回は有効期間の短いステートレスを使用します。

:::note info
チャネルとは、 Messaging API など LINE が提供する機能とそれを利用するシステムの間をつなぐ通信経路のことです。
チャネルはプロバイダー及び機能( Messaging API , LINE ミニアプリなど)に紐づいています。

https://developers.line.biz/ja/docs/line-developers-console/overview/#channel

:::

:::note info
チャネルアクセストークンとは、チャネルを利用する権限を持っていることを示す情報のことです。
あくまで「利用してよいこと」を示す(認可)ものであり、「利用するのが誰か」を表す(認証)ものではありません。

https://developers.line.biz/ja/docs/basics/channel-access-token/

チャネルアクセストークンには 4 種類ありますが、今回は有効期間が短いステートレスを使用しています。

|種類|有効期間|発行可能数|発行方法|
|:-|:-|:-|:-|
|ステートレス| 15 分|無制限| HTTP リクエスト|
|v2.1|可変(最大 30 日)|30| HTTP リクエスト|
|短期| 30 日|30| HTTP リクエスト|
|長期|無期限|1|コンソール|

:::

発行のためのコマンドですが、今回は Windows のコマンドプロンプトで実行します。

:::note info
 Windows11 の場合、コマンドプロンプトはスタートメニューの「すべてのアプリ」⇒「ターミナル」を右クリックして起動できます。

![WS000318.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/d186be5a-b0fb-613c-b996-fe866d97e609.jpeg "0_2")

![WS000319.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/94c21cce-e6ec-89bd-2ce4-61f0d04c8c04.jpeg "0_3")

![WS000317.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/eb41190f-690d-6b5f-1fee-70ca37e0f6b3.jpeg "0_4")

または、「 cmd 」で検索しても起動できます。

![WS000316.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/043d4ff9-2a00-c003-90a6-fa67bff58fdd.jpeg "0_5")

:::

先ほどの画面で、「 Channel ID 」と「 Channel secret 」からチャネル ID (チャネルを特定するための文字列)とチャネルシークレット(アクセストークンを発行したりするための鍵みたいなもの)を確認します。

![WS000314.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/7ac7f76a-f60b-6b94-79d1-6cfa8f652312.jpeg "2_1")

確認した ID とシークレットをもとに、以下のコマンドを実行します。

`curl -X POST https://api.line.me/oauth2/v3/token -H "Content-Type: application/x-www-form-urlencoded" --data-urlencode "grant_type=client_credentials" --data-urlencode "client_id=チャネルID" --data-urlencode "client_secret=チャネルシークレット"`

```DOS:コマンドプロンプト
C:\Users>curl -X POST https://api.line.me/oauth2/v3/token -H "Content-Type: application/x-www-form-urlencoded" --data-urlencode "grant_type=client_credentials" --data-urlencode "client_id=*****" --data-urlencode "client_secret=*****"
{"token_type":"Bearer","access_token":"*****","expires_in":900}
C:\Users>
```

 `access_token` に表示された値が、ステートレスチャネルアクセストークンとなります。

:::note warn
 Windows のコマンドプロンプトで実行する場合、チャネル ID などは上記のようにダブルクォーテーション`"`で囲むようにしてください。
シングルクォーテーション`'`を使うとうまく処理できず、以下のようにエラーとなってしまいます。

```
C:\Users>curl -X POST https://api.line.me/oauth2/v3/token -H 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=client_credentials' --data-urlencode 'client_id=*****' --data-urlencode 'client_secret=*****'
{"timestamp":"2025-02-11T09:12:35.567+00:00","status":400,"error":"Bad Request","path":"/oauth2/v3/token"}curl: (6) Could not resolve host: application

C:\Users>
```

:::

:::note info
上記 curl コマンドのパラメータについて、 `application/x-www-form-urlencoded` は送信データのフォーマットの一種で、 `grant_type=client_credentials` のように単純な「キー」と「値」のペアによって表現されます。
 `client_credentials` は OAuth という認可(何かをしてよいかを確認すること)の規格におけるアクセストークンの取得方法の一種で、認可サーバ(今回は `https://api.line.me/oauth2/v3/token` )に対して情報を送り( POST )、認可サーバがそれを確認して問題なければアクセストークンを返すという流れをとります。
:::

### 3. メッセージの投稿

発行したステートレスチャネルアクセストークンを用いてメッセージを投稿するには、以下のコマンドを実行します。

`curl -X POST https://api.line.me/v2/bot/message/broadcast -H "Content-Type: application/json" -H "Authorization: Bearer ステートレスチャネルアクセストークン" -d "{\"messages\":[{\"type\":\"text\",\"text\":\"メッセージ内容\"}]}"`

```DOS:コマンドプロンプト
C:\Users>curl -X POST https://api.line.me/v2/bot/message/broadcast -H "Content-Type: application/json" -H "Authorization: Bearer *****" -d "{\"messages\":[{\"type\":\"text\",\"text\":\"Hello World\"}]}"
{}
C:\Users>
```

これで、メッセージが投稿できました。

![WS000315.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/4bdcfd5a-f5e4-6ded-25b3-5b4a2edb9833.jpeg "3_1")

:::note info
上記 curl コマンドのパラメータについて、 `application/json` は JavaScript というプログラミング言語をもとにしたデータのフォーマットです。
シンプルで軽量、かつ人間とコンピュータのどちらにとっても読みやすいのが特徴です。
 `Bearer` はアクセストークンを利用した確認方法のことを指します。
リソースサーバ(今回は `https://api.line.me/v2/bot/message/broadcast` )にアクセストークンを送信( POST )、リソースサーバがそれを確認して問題なければ処理(メッセージ投稿)が実行されます。
:::

[戻る](https://qiita.com/frozencatpisces/items/0491ddeb34588ad6b78b)