HOME
  Security
   Software
    Hardware
  
FPGA
  CPU
   Android
    Raspberry Pi
  
nLite
  Xcode
   etc.
    ALL
  
LINK
BACK
 

2020/01/27

LINE Messaging APIで Pushメッセージを送信する方法 Windows、Linux、ラズパイ、PHP言語に対応 LINE Messaging APIで Pushメッセージを送信する方法 Windows、Linux、ラズパイ、PHP言語に対応

(LINE Messaging APIで Botからメッセージを送信して貰う方法 PaizaCloudにも対応)

Tags: [Raspberry Pi], [電子工作]




● LINE Developersに登録する方法

 事前準備。
 ・LINE Developersサイトに LINEアカウントでログインする(LINE Developersに登録)
 ・Create a new providerでプロバイダーを作成する
 ・LINE Messaging API channelを作成する

2020/01/26
LINE Developersに登録して LINE Messaging APIで Botを作って遊ぶ方法【ぼっち上等】
LINE Developersに登録して LINE Messaging APIで Botを作って遊ぶ方法【ぼっち上等】

  友達0でも大丈夫! LINE Messaging APIで Botを作って LINEぼっち状態を解消する方法


● LINE Messaging APIで Pushメッセージを送信する方法

 LINE Messaging APIで Botを作って LINEぼっち状態を解消したので、Botからメッセージを送信して貰います。

 Botからメッセージが来るので寂しくありません。

Messaging API - LINE Developers

Messaging APIリファレンス

# プッシュメッセージを送る
 ユーザー、グループ、またはトークルームに、任意のタイミングでプッシュメッセージを送信するAPIです。

 LINE公式の Messaging APIリファレンスに記載の各言語のサンプルは LINEライブラリを使用しています。

 私の下記のサンプルは初心者でもわかり易くする為とシンプルに処理内容が見える様にする為に公式ライブラリを使用せずにフルスクラッチで実装しています。

● LINE Messaging APIで Pushメッセージを実装するとできる事

・LINE Messaging APIで Pushメッセージを送信する方法 Windows、Linux、ラズパイ、PHP言語に対応
LINE Messaging APIで Pushメッセージを送信する方法 Windows、Linux、ラズパイ、PHP言語に対応
 これで LINEから PUSHメッセージが届くようになりました!!もう寂しくないヨ!!


● LINE Messaging APIで Pushメッセージを送信する為の準備

 ・LINE Developersサイトに LINEアカウントでログインする
 ・Your user IDの文字列の取得
 ・Channel access tokenの払い出しと取得

・ LINE Developersサイトに LINEアカウントでログインする
  作成したプロバイダ(test-provider)
  作成したチャンネル(Test Channel name)
  を選択します。
※ 「事前準備」で作成したプロバイダとチャンネルを選びます。

・LINE Messaging APIで Pushメッセージを送信する方法
LINE Messaging APIで Pushメッセージを送信する方法



・ Your user IDの文字列の取得
Basic settingタブの Basic informationの一番下の Your user IDの文字列をメモします。
U5xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
(私の場合は 34桁の文字列でした)

 下記のサンプルプログラムの
{Your user IDの文字列}
 を
Your user IDの文字列
 で書き換えます。
※ サンプルの前後に有る波カッコの文字{}も削除する。

・LINE Messaging APIで Pushメッセージを送信する方法
LINE Messaging APIで Pushメッセージを送信する方法


・LINE Messaging APIで Pushメッセージを送信する方法
LINE Messaging APIで Pushメッセージを送信する方法



・ Channel access tokenの払い出しと取得
Messaging APIタブの一番下の Channel access tokenで「Issue」ボタンを押して払い出し(生成)します。
Channel access token (long-lived)に長い文字列が表示されるのでメモします。
(私の場合は 172桁の文字列でした)

 下記のサンプルプログラムの
{Channel access tokenの長い文字列}
 を
Channel access tokenの長い文字列
 で書き換えます。
※ サンプルの前後に有る波カッコの文字{}も削除する。

・LINE Messaging APIで Pushメッセージを送信する方法
LINE Messaging APIで Pushメッセージを送信する方法


・LINE Messaging APIで Pushメッセージを送信する方法
LINE Messaging APIで Pushメッセージを送信する方法
 「Issue」ボタンを押して Channel access tokenを払い出し(生成)します。

・LINE Messaging APIで Pushメッセージを送信する方法
LINE Messaging APIで Pushメッセージを送信する方法
 Channel access tokenの文字列は結構長いです。


● Windows 10のコマンドラインで curlコマンドを使って LINE Messaging APIで Pushメッセージを送信する

 下記の動作環境で動作を確認済みです。
 ・Windows 10の cmd コマンドプロンプト

rem Windows版 cmd コマンドライン

rem LINE Messaging API
rem https://developers.line.biz/ja/reference/messaging-api/

rem LINE Messaging API プッシュメッセージを送る
set LINE_PUSH_URL=https://api.line.me/v2/bot/message/push

rem Channel access token (long-lived)
rem Authorization: Bearer
rem 設定例 set LINE_CHANNEL_ACCESS_TOKEN=xxxxx略xxxxx
set LINE_CHANNEL_ACCESS_TOKEN={Channel access tokenの長い文字列}

rem Your user ID
rem 設定例 set LINE_USER_ID=U5xxxxx略xxxxx
set LINE_USER_ID={Your user IDの文字列}

rem 送信するメッセージ
set MESSAGE_TEXT_1=Windows LINE API TEST PUSH MESSAGE

rem Windows こんにちは!(改行)日本語送信テスト?
rem Windowsのコマンドラインの制約で日本語を UTF-8でエンコードしています
set MESSAGE_TEXT_2=Windows \u3053\u3093\u306b\u3061\u306f\uff01\r\n\u65e5\u672c\u8a9e\u9001\u4fe1\u30c6\u30b9\u30c8\uff1f

set POST_DATA={ ^
  \"to\": \"%LINE_USER_ID%\", ^
  \"messages\":[ ^
    { ^
      \"type\":\"text\", ^
      \"text\":\"%MESSAGE_TEXT_1%\" ^
    }, ^
    { ^
      \"type\":\"text\", ^
      \"text\":\"%MESSAGE_TEXT_2%\" ^
    } ^
  ] ^
}

rem cURLコマンドで PUSHメッセージを送信
rem Windowsのコマンドラインでコマンドを複数行に記述する場合、行の最後に^マーク(べき乗記号、ハットマーク)を記述します
curl ^
  "%LINE_PUSH_URL%" ^
  -X POST ^
  -H "Content-Type: application/json;charset=utf-8" ^
  -H "Authorization: Bearer %LINE_CHANNEL_ACCESS_TOKEN%" ^
  -d "%POST_DATA%"

rem デバグ用詳細ログ出力有り
curl ^
  "%LINE_PUSH_URL%" ^
  -v -X POST ^
  -H "Content-Type: application/json;charset=utf-8" ^
  -H "Authorization: Bearer %LINE_CHANNEL_ACCESS_TOKEN%" ^
  -d "%POST_DATA%"


2019/12/04
Windows 10の curlコマンドで Protocol
Windows 10の curlコマンドで Protocol "'https" not supported or disabled in libcurlの解決方法

  Windows 10の curlコマンドで Protocol https not supportedの解決方法、’を”にする


● Linuxの bashコマンドラインで curlコマンドを使って LINE Messaging APIで Pushメッセージを送信する

 下記の動作環境で動作を確認済みです。
 ・ラズパイ上の Raspbian OSの bashコマンドライン
 ・PaizaCloudでターミナルを開いてターミナルコマンドライン
学習に最適なクラウドIDE! PaizaCloud

# Linux版 bashコマンドライン

# LINE Messaging API
# https://developers.line.biz/ja/reference/messaging-api/

# LINE Messaging API プッシュメッセージを送る
export LINE_PUSH_URL=https://api.line.me/v2/bot/message/push

# Channel access token (long-lived)
# Authorization: Bearer
# 設定例 export LINE_CHANNEL_ACCESS_TOKEN=xxxxx略xxxxx
export LINE_CHANNEL_ACCESS_TOKEN={Channel access tokenの長い文字列}

# Your user ID
# 設定例 export LINE_USER_ID=U5xxxxx略xxxxx
export LINE_USER_ID={Your user IDの文字列}

# 送信するメッセージ
export MESSAGE_TEXT_1="Linux LINE API TEST PUSH MESSAGE"

# Linux こんにちは!(改行)日本語送信テスト?
export MESSAGE_TEXT_2="Linux こんにちは!\\r\\n日本語送信テスト?"

export POST_DATA="{ \
  \"to\": \"${LINE_USER_ID}\", \
  \"messages\":[ \
    { \
      \"type\":\"text\", \
      \"text\":\"${MESSAGE_TEXT_1}\" \
    }, \
    { \
      \"type\":\"text\", \
      \"text\":\"${MESSAGE_TEXT_2}\" \
    } \
  ] \
}"

# cURLコマンドで PUSHメッセージを送信
# bashシェルでコマンドを複数行に記述する場合、行の最後に¥マーク(バックスラッシュ)を記述します
curl \
  "${LINE_PUSH_URL}" \
  -X POST \
  -H "Content-Type: application/json;charset=utf-8" \
  -H "Authorization: Bearer ${LINE_CHANNEL_ACCESS_TOKEN}" \
  -d "${POST_DATA}"

# デバグ用詳細ログ出力有り
curl \
  "${LINE_PUSH_URL}" \
  -v -X POST \
  -H "Content-Type: application/json;charset=utf-8" \
  -H "Authorization: Bearer ${LINE_CHANNEL_ACCESS_TOKEN}" \
  -d "${POST_DATA}"


● PHP言語を使って LINE Messaging APIで Pushメッセージを送信する

 PHPで通信を行なう方法として主に cURLコマンドを使う方法と file_get_contentsコマンドを使う方法が有ります。
 今回はその両方で動作確認ができる様にしました。

 下記の動作環境で動作を確認済みです。
 ・ラズパイ上の Raspbian OSで PHP単体での実行
 ・PaizaCloudで PHPサーバでの実行
学習に最適なクラウドIDE! PaizaCloud

nano line_push.php
php line_push.php
cat /tmp/post_data.txt
cat /tmp/result.txt

line_push.php
<?php
    // LINE Messaging API
    // https://developers.line.biz/ja/reference/messaging-api/

    // LINE Messaging API プッシュメッセージを送る
    $LINE_PUSH_URL = "https://api.line.me/v2/bot/message/push";

    // Channel access token (long-lived)
    // Authorization: Bearer
    // 設定例 $LINE_CHANNEL_ACCESS_TOKEN = "xxxxx略xxxxx";
    $LINE_CHANNEL_ACCESS_TOKEN = "{Channel access tokenの長い文字列}";

    // Your user ID
    // 設定例 $LINE_USER_ID = "U5xxxxx略xxxxx";
    $LINE_USER_ID = "{Your user IDの文字列}";

    // 送信するメッセージ
    $message_text_1 = "PHP LINE API TEST PUSH MESSAGE";
    $message_text_2 = "PHPでPUSH送信!!!\r\n2行目!!!";

    // リクエストヘッダ
    $header = [
        'Authorization: Bearer ' . $LINE_CHANNEL_ACCESS_TOKEN,
        'Content-Type: application/json'
    ];

    // 送信するメッセージの下準備
    $post_values = array(
        [
        "type" => "text",
        "text" => $message_text_1
        ],
        [
        "type" => "text",
        "text" => $message_text_2
        ]
    );

    // 送信するデータ
    $post_data = [
        "to" => $LINE_USER_ID,
        "messages" => $post_values
        ];

    // デバグ確認用のログ:送信データ
    // json_encode 5.4.0 options パラメータ
    // JSON_PRETTY_PRINT
    // JSON_UNESCAPED_UNICODE
    $file = '/tmp/post_data.txt';
    file_put_contents($file, json_encode($post_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), FILE_APPEND);
    file_put_contents($file, PHP_EOL.PHP_EOL, FILE_APPEND);

    // cURLを使った送信処理の時は true
    // file_get_contentsを使った送信処理の時は false
    $USE_CURL = true;

    if ($USE_CURL) {
        // cURLを使った送信処理
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $LINE_PUSH_URL);
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($post_data));
        $result = curl_exec($curl);
        curl_close($curl);
    }
    else
    {
        // file_get_contentsを使った送信処理
        $context = stream_context_create(array(
            'http' => array(
                'method' => 'POST',
                'header' => implode("\r\n", $header),
                'content'=>  json_encode($post_data),
                'ignore_errors' => true
            )
        ));

        $result = file_get_contents(
            $LINE_PUSH_URL,
            false,
            $context
            );
    }

    // デバグ確認用のログ:受信レスポンス
    $file = '/tmp/result.txt';
    file_put_contents($file, $result, FILE_APPEND);
    file_put_contents($file, PHP_EOL.PHP_EOL, FILE_APPEND);
?>


● LINE Messaging APIで Pushメッセージを送信する際の JSONデータ構造

json_encode($post_data)

{"to":"Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","messages":[{"type":"text","text":"PHP LINE API TEST PUSH MESSAGE"},{"type":"text","text":"PHP\u3067PUSH\u9001\u4fe1\uff01\uff01\uff01\r\n\uff12\u884c\u76ee\uff01\uff01\uff01"}]}

json_encode($post_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)

JSON_PRETTY_PRINTで、各要素毎に改行とインデント(段差)が付きます。
JSON_UNESCAPED_UNICODEで、日本語文字が読める文字で表示されます。

{
    "to": "Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "messages": [
        {
            "type": "text",
            "text": "PHP LINE API TEST PUSH MESSAGE"
        },
        {
            "type": "text",
            "text": "PHPでPUSH送信!!!\r\n2行目!!!"
        }
    ]
}


● LINE Messaging APIで Pushメッセージを送信する方法 Windows、Linux、ラズパイ、PHP言語に対応

・LINE Messaging APIで Pushメッセージを送信する方法 Windows、Linux、ラズパイ、PHP言語に対応
LINE Messaging APIで Pushメッセージを送信する方法 Windows、Linux、ラズパイ、PHP言語に対応
 これで LINEから PUSHメッセージが届くようになりました!!もう寂しくないヨ!!

・LINE Messaging APIで Pushメッセージを送信する方法
LINE Messaging APIで Pushメッセージを送信する方法
 でも、こっちからのメッセージ送信に対して「既読」は付きますが返信が有りません。
 いわゆる「既読スルー」状態です。
 Botに嫌われたのでしょうか?(「応答メッセージ」を「Disabled オフ」にしています)

 と言う訳で、応答メッセージの機能を実装します。

2020/01/28
LINE Messaging APIで Replyメッセージを返信する方法 PaizaCloud、Herokuに対応
LINE Messaging APIで Replyメッセージを返信する方法 PaizaCloud、Herokuに対応

  LINE Messaging APIで Botからメッセージを返信して貰い承認欲求を満たす方法 SSLサーバ必須


● ラズパイの PHPで実行時に undefined function curl_init()のエラーが出る場合の対処方法

 Raspberry Piの PHPで PHPの curlモジュールが無い状態で cURLを使った送信処理を行なうと undefined function curl_init()のエラーが出ます。

pi@raspberrypi:~ $ php line_push.php

PHP Fatal error:  Uncaught Error: Call to undefined function curl_init() in /home/pi/line_push.php:57
Stack trace:
#0 {main}
  thrown in /home/pi/line_push.php on line 57

● 正しい解決方法

 sudo apt install -y php-curlで PHPの curlモジュールをインストールします。
sudo apt install -y php-curl
# php-curl php7.3-curl

pi@raspberrypi:~ $ php line_push.php
(正常に実行できる)

● 間違った解決方法

 php.iniを直接書き換える。
pi@raspberrypi:~ $ php -i | grep Configuration
Configuration File (php.ini) Path => /etc/php/7.3/cli
Loaded Configuration File => /etc/php/7.3/cli/php.ini
Configuration

pi@raspberrypi:~ $ cat /etc/php/7.3/cli/php.ini | grep curl
;extension=curl
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
;curl.cainfo =
;extension=curl
 を
extension=curl
 に書き換えてみる。
pi@raspberrypi:~ $ php line_push.php

PHP Warning:  PHP Startup: Unable to load dynamic library 'curl' (tried: /usr/lib/php/20180731/curl (/usr/lib/php/20180731/curl: cannot open shared object file: No such file or directory), /usr/lib/php/20180731/curl.so (/usr/lib/php/20180731/curl.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Fatal error:  Uncaught Error: Call to undefined function curl_init() in /home/pi/line_push.php:57
Stack trace:
#0 {main}
  thrown in /home/pi/line_push.php on line 57



Tags: [Raspberry Pi], [電子工作]

●関連するコンテンツ(この記事を読んだ人は、次の記事も読んでいます)

Windows 10の curlコマンドで Protocol
Windows 10の curlコマンドで Protocol "'https" not supported or disabled in libcurlの解決方法

  Windows 10の curlコマンドで Protocol https not supportedの解決方法、’を”にする

LINE Developersに登録して LINE Messaging APIで Botを作って遊ぶ方法【ぼっち上等】
LINE Developersに登録して LINE Messaging APIで Botを作って遊ぶ方法【ぼっち上等】

  友達0でも大丈夫! LINE Messaging APIで Botを作って LINEぼっち状態を解消する方法

LINE Messaging APIで Replyメッセージを返信する方法 PaizaCloud、Herokuに対応
LINE Messaging APIで Replyメッセージを返信する方法 PaizaCloud、Herokuに対応

  LINE Messaging APIで Botからメッセージを返信して貰い承認欲求を満たす方法 SSLサーバ必須

LINE Messaging APIで Replyメッセージを返信する方法 PaizaCloudに対応
LINE Messaging APIで Replyメッセージを返信する方法 PaizaCloudに対応

  LINE Messaging APIで Botからサジェストメッセージを返信して貰う方法 Amazon Suggest

Microsoft Office 365を無人インストール(自動インストール)する方法
Microsoft Office 365を無人インストール(自動インストール)する方法

  インストールするコンポーネントを事前に設定する事で同一環境の構築が楽にできます MSオフィス 365

Adobe Acrobat Reader関係のまとめ 2018年版、自動インストール、無人インストール方法
Adobe Acrobat Reader関係のまとめ 2018年版、自動インストール、無人インストール方法

  アップデート手順など、Adobe Reader XI、X、Acrobat Reader 9、Acrobat Reader 8

【2023年対応】 Microsoft Visual C++ ランタイムライブラリ 再頒布可能パッケージのまとめ 2005~2022まで
【2023年対応】 Microsoft Visual C++ ランタイムライブラリ 再頒布可能パッケージのまとめ 2005~2022まで

  Microsoft Visual C++ 2005、2008、2010、2012、2013、2015、2017、2019、2022の各バージョンの最新版 MSVC Runtime librariesのまとめ

Visual Studio 2019 Professional v16.4を無人インストールする方法、完全自動でインストール
Visual Studio 2019 Professional v16.4を無人インストールする方法、完全自動でインストール

  VS2019 v16.4を完全オフラインインストール&コンポーネント選択の事前設定で自動インストールする




[HOME] | [BACK]
リンクフリー(連絡不要、ただしトップページ以外は Web構成の変更で移動する場合があります)
Copyright (c) 2020 FREE WING,Y.Sakamoto
Powered by 猫屋敷工房 & HTML Generator

http://www.neko.ne.jp/~freewing/software/line_developers_messaging_api_push/