【バックヤード】LINE Notifyサービス終了! 代替方法のMessaging APIを使ってメッセージを送信してみました

バックヤード

LINE Notifyが2025年3月で終了!

 大変!、大変!。LINEのお知らせでLINE Notifyサービスの終了を知りました。あと、5か月ほどで終了となります。

詳細な内容は以下の通りです。

代替方法として、LINE公式アカウントからメッセージを送信できるMessaging APIの利用を検討するように呼び掛けています。

 2024年6月のLINE Notifyを使ってWindowsアプリからメッセージを通知した投稿をしましたが、間もなくサービスが終了してしまいます。このままでは使えなくなってしまうので代替方法のMessaging APIを使って同じことができるか確認してみようと思います。

LINE Developersアカウントを作成する

最初に、LINE Develoersにログインします。LINEアカウントやビジネスアカウントでログインできます。ビジネスアカウントは持っていないので、LINEアカウントでログインします。

LINE Developersのサイトの画面です。スマートな画面ですね。右上の「コンソールにログイン」をクリックします。

ログインページが表示されます。ここでは、「LINEアカウントでログイン」をクリックします。

 LINEに登録しているメールアドレスとパスワードでログインするか、QRコードでログインするか選べます。QRコードでログインするのが簡単なので、「QRコードログイン」をクリックします。

クリックすると画面にQRコードが表示されるので、スマートフォンでLINEのQRコードリーダでスキャンします。

 認証番号が表示されるので、スマートフォンに表示された画面に番号を入力して承認ボタンを押下すると認証されて、LINE Developersにログインできます。

続いて、「LINEビジネスIDを作成する」をクリックしてLINE Business IDを作成します。アカウント情報のページが表示されて、開発者名とメールアドレスを入力します。個人の事業主体であれば個人のメールアドレスを、組織の事業主体であれば会社のメールアドレスを入力します。最後にLINE開発者契約を理解した上でチェックして「アカウントを作成」をクリックします。

 アカウントが作成されるとLINE Developersコンソールページが表示されます。

プロバイダー作成とチャネルの設定

まずは、「新規プロバイダー作成」をクリックして、プロバイダーを作成します。「プロバイダー」とは、LINEプラットフォームを通じてサービスを提供する個人や企業、組織などの情報です。

プロバイダー名はユーザーにサービスを公開するページ名になるため、適切に設定するものとされています。プロバイダー名は最大10個まで作成できます。admin権限があれば、プロバイダーを削除することができます。

プロバイダー名を入力して作成をクリックします。この例では、自分のサイト名を入れてみました。

プロバイダー名を作成するとプロバイダーページが表示されます。次にページメニューの「チャネル設定」をクリックして、チャネルの設定をします。「チャネル」とは、LINEプラットフォームが提供する機能を利用するための通信路のことをいいます。LINEプラットフォームでは、以下の3つのチャネルが利用できます。
・LINEログイン
・Messaging API
・ブロックチェインサービス
・LINEミニアプリ

ここでは、LINE Notifyの代わりとなるMessaging APIを設定します。

 新規チャネルを作成すると新規チャネル作成の画面が表示され、Messaging APIにカーソルを当てると緑いろに変わるのでクリックします。

Messaging APIチャネルを作成するには、LINE公式アカウントが必要です。「LINE公式アカウントを作成すする」をクリックすると、LINE Official Accountのページに移ります。再度、ログイン要求がありますのでLINEアカウントでログインします。

LINE公式アカウントを作成する

ログインすると、LINE公式アカウントの作成ページが表示されるので、「*」の必須箇所を記入します。

スクロールしてすべての項目を入力して、「確認」をクリックします。

入力内容を確認して、「完了」をクリックします。

LINE公式アカウントが作成できました。「LINE Official Account Managerへ」をクリックして管理画面をみてみます。

情報利用に関する同意についての画面が表示されます。一読して内容を理解した上で「同意」をクリックします。

もうひとつ同意についてがあります。こちらも一読して理解した上で「同意」をクリックします。

LINEアカウントに公式アカウントが紐づくをことのお知らせです。「次へ」をクリックします。

友だちを集めようの画面です。今回はMessaging APIを使うため、「ホーム画面に移動」をクリックします。

LINE公式アカウントはB2Cビジネスのために用意されていますので、管理画面は機能豊富です。

LINE公式アカウントにおけるMessaging APIの位置付け

 LINEでは、LINE Notifyの代替手段としてMessaging APIを使うことを案内していますが、Messaging APIを使うには公式アカウントを作成した上で、これだけのメニューの中のメッセージ配信の中のひとつにあたるMessaging APIによる通知のみを使うことになります。下図は個人的なイメージです。

Messaging APIの有効化

公式アカウントを作成しても、そのままではMessaging APIは使えません。Messaging APIを使えるように有効化します。

LINE Official Account Manager画面の右上にある「設定」をクリックします。

設定画面の設定メニューにある「Messaging API」をクリックすると、右側にMessaging API画面が表示されますので、「Messaging APIを利用する」をクリックします。

プロバイダーを選択する画面が表示されるので、プロバイダーを作成するか、既存のプロバイダーを選択します。今回は作成済みのプロバイダーを選択して、「同意する」をクリックします。

プライバシーポリシーと利用規約のURLを入力する画面が表示されます。どちらも入力は任意です。ここではプライバシーポリシーのみURLを入力して、「OK」をクリックします。

連携したプロバイダーは変更、削除ができないという注意が表示されますので、確認して「OK」をクリックします。

これでMessaging APIが利用可能になります。Channel IDとChannel secretが表示されます。これは後でも確認することができます。あと、Webhook URLの入力欄がありますが、今回は使用しないので空欄のままです。

Messaging API のチャネルアクセストークンの取得

LINE Developersのページに戻りプロバイダーを選択すると、先ほど作ったMessaging APIチャネルができています。チャネルの枠内にMessaging APIと表示されています。
ここでは、WindowsアプリからMessaging APIを使えるようにチャネルアクセストークンを取得します。
LINE Notifyの時もアクセストークンを取得しているのと同じでしたね。

Messaging APIのチャネルアクセストークンには、次のような種類と条件があります。

チャネルアクセストークンの種類、有効期間、チャネルごとの発行可能数
  • 任意の有効期間を指定できるチャネルアクセストークン:最大30日:30個
  • ステートレスチャネルアクセストークン:15分:無制限
  • 短期のチャネルアクセストークン:30日:30個
  • 長期のチャネルアクセストークン:無期限:1個

今回は、長期のチャネルアクセストークンを取得します。

「Messaging API設定」をクリックして、Messaging API設定画面を表示します。

下にスクロールすると「チャネルアクセストークン」があり、「チャネルアクセストークン(長期)」の「発行」をクリックします。

アクセストークンが発行されて、表示されます。非常に長いトークンです。無期限に有効なトークンなので、もし不正利用された疑いがあれば使用を中止するために「再発行」をクリックして、新しいトークンに更新します。

PowerShellからメッセージを送信する

 Windowsアプリからメッセージを送る前に、Messaging APIの設定がうまくいっているか事前に確認しておきます。WindowsのPower shellのコマンドを実行するだけで通知を確認することができます。

curl -v -X POST https://api.line.me/v2/bot/message/broadcast \
-H ‘Content-Type: application/json’ \
-H ‘Authorization: Bearer {channel access token}’ \
-H ‘X-Line-Retry-Key: {UUID}’ \
-d ‘{
“messages”:[
{
“type”:”text”,
“text”:”Hello, world1″
},
{
“type”:”text”,
“text”:”Hello, world2″
}
]
}’

 Messaging APIドキュメントには、上記のようなサンプルコマンドが示されています。これを参考にPower Shellでコマンドを実行してみます。

Invoke-RestMethod -Uri "https://api.line.me/v2/bot/message/broadcast" -Method Post -Headers @{ "Authorization" = "Bearer YOUR_CHANNEL_ACCESS_TOKEN" } -Body (@{ messages = @(@{ type = "text"; text = "こんにちは!Messaging APIを使ったブロードキャストメッセージです。" }) } | ConvertTo-Json -Depth 10) -ContentType "application/json; charset=utf-8"

こちらがPower Shellのコマンドにしたものです。YOUR_CHANNEL_ACCESS_TOKENのところを取得したトークンに置き換えます。

実行した結果です。

スマホ上で、公式アカウントのトークルームにメッセージが届きました。

Windowsアプリからメッセージを送信する

 Windowsアプリを作成してメッセージを送信してみます。メッセージ入力できるようにWindows Formsアプリケーションで作成します。

 作成したアプリケーションです。LINE Notifyの時のアプリケーションをMessaging APIに置き換えてだけです。見た通りのユーザーインターフェースです。
操作手順は以下の通りです。
①テキストボックスにメッセージを入力します。
②送信ボタンを押下します。
③実行した結果をレスポンスのテキストボックスに日時付きで表示します。
レスポンスにStatus:200(OK)が表示されています。これは、上述のPower shellのコマンド実行と同じ結果になっています。200はHTTPステータスコードで、正常終了したことを表します。

 LINEにメッセージが通知されました。時刻(21:28)もあっています。

作成したプログラム

 Visual Studio 2019 Communityを使って、プログラム言語:C#、アプリケーション:Windows Formsアプリケーションで作成しています。フォームのデザイン部分は省略してますが、画面と比べていただくとわかると思います。プログラムの13行目の「”アクセストークンを設定します“」の部分に取得したアクセストークンの文字列を設定します。プログラムは100行弱でコードのほとんどは、レスポンスの結果を表示するためのコードになります。メッセージを送信する部分はわずか20行弱です。

using System;
using System.Text;
using System.Windows.Forms;
using System.Net.Http;
using System.Threading.Tasks;
using System.Linq;
using Newtonsoft.Json;

namespace WinToLINE
{
    public partial class Form_SendMsgToLINE : Form
    {
        private static readonly string channel_access_token = "アクセストークンを設定します";
        private static readonly string LineApiUrl = "https://api.line.me/v2/bot/message/broadcast";

        public Form_SendMsgToLINE()
        {
            InitializeComponent();
        }

        private async void Button_SendMsg_ClickAsync(object sender, EventArgs e)
        {
            string message = textBox_Message.Text;

            // 現在の日時を取得
            DateTime now = DateTime.Now;
            string strNow = now.ToString("yyyy/MM/dd HH:mm:ss");

            if (string.IsNullOrEmpty(message))
            {
                MessageBox.Show("メッセージを入力してください。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
                textBox_Response.AppendText(strNow + ":メッセージを入力してください。" + Environment.NewLine);
                return;
            }

            try
            {
                textBox_Response.AppendText(strNow + ":メッセージを送信しました。" + Environment.NewLine);
                await SendBroadcastMessage(message);
            }
            catch (Exception ex)
            {
                textBox_Response.AppendText(strNow + $":メッセージの送信中にエラーが発生しました: {ex.Message}" + Environment.NewLine);
            }
        }
        
        // LINE Messaging APIでブロードキャストメッセージを送信するメソッド
        private async Task SendBroadcastMessage(string message)
        {
            using (HttpClient client = new HttpClient())
            {
                client.DefaultRequestHeaders.Add("Authorization", $"Bearer {channel_access_token}");
                
                var data = new
                {
                    messages = new[]
                    {
                        new
                        {
                            type = "text",
                            text = message
                        }
                    }
                };

                var json = JsonConvert.SerializeObject(data);
                var content = new StringContent(json, Encoding.UTF8, "application/json");
                
                HttpResponseMessage response = await client.PostAsync(LineApiUrl, content);

                // レスポンスステータスを取得
                string responseStatus = $"{(int)response.StatusCode} ({response.StatusCode})";

                // レスポンスヘッダーからDateヘッダーを取得
                string formattedDate = "";
                if (response.Headers.TryGetValues("Date", out var values))
                {
                    // Dateヘッダーの値をDateTimeに変換
                    string dateHeader = values.FirstOrDefault();
                    if (dateHeader != null)
                    {
                        // Dateヘッダーの値をDateTimeに変換
                        DateTime serverDate = DateTime.Parse(dateHeader);
                        formattedDate = serverDate.ToString("yyyy/MM/dd HH:mm:ss");
                    }
                }
                if (formattedDate == "")
                {
                    // 現在の日時を取得
                    DateTime now = DateTime.Now;
                    formattedDate = now.ToString("yyyy/MM/dd HH: mm:ss");
                }
                textBox_Response.AppendText(formattedDate + string.Format($":Status :{responseStatus}") + Environment.NewLine);
            }
        }
    }
}

まとめ

 今回は、LINE Notifyが間もなく終了するとの発表があったため、急遽、代替方法として案内されたMessaging APIを使ってメッセージが送信できるかを確認しました。結果、同様のことができることがわかりました。使うにはLINE公式アカウントの作成が必要であることもわかりました。

タイトルとURLをコピーしました