HOME
  Security
   Software
    Hardware
  
FPGA
  CPU
   Android
    Raspberry Pi
  
nLite
  Xcode
   etc.
    ALL
  
English Translate 中文翻訳
LINK
BACK
 

[NEW] 2020/01/28

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

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

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





● LINE Developersに登録する方法

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

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

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

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

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


● LINE Messaging APIで Replyメッセージ(応答)を送信する方法

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

 Botからメッセージが返ってくるので「既読スルー」も無く寂しくありません。

 しかも、常に「~ってすごい!!!」と返信してくれるので承認欲求も満たせます!!!
 Botと友達になれて良かった~~~!!!

Messaging API - LINE Developers

Messaging APIリファレンス

# 応答メッセージを送る
 ユーザー、グループ、またはトークルームからのイベントに対して応答メッセージを送信するAPIです。
 応答メッセージを送るには、Webhookイベントオブジェクトに含まれる応答トークンが必要です。

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

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

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

 これで LINEから応答メッセージが届くようになりました!!もう寂しくないヨ!!

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


● LINE Messaging APIで Replyメッセージを実装する為の準備

 ・LINE Developersサイトに LINEアカウントでログインする
 ・LINE Messaging APIの Channel access tokenの払い出しと取得
 ※ 「LINE Messaging APIで Pushメッセージを送信する方法」と同じ

 ・httpsに対応した SSLサーバの用意
 ・LINE Messaging APIの Auto-reply(自動応答)の停止
 ・LINE Messaging APIの Webhook URLの設定

 ※ httpsに対応した SSLサーバが必要です

・ httpsに対応した SSLサーバの用意 PaizaCloudの「無料プラン」

 PaizaCloudの「無料プラン」を使用しました。
学習に最適なクラウドIDE! PaizaCloud

・ httpsに対応した SSLサーバの用意 Herokuの「無料プラン」

 Herokuの「無料プラン」を使用しました。
,Heroku: クラウド・アプリケーション・プラットフォーム


 ※ Amazonの AWS等を使う事もできますが、クレカ情報不要でアカウントが作成できる PaizaCloudを動作環境として選択しました。

・ LINE Messaging APIの Auto-reply(自動応答)の停止


・ LINE Messaging APIの Webhook URLの設定




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

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

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

 ・Herokuで PHP設定のサーバでの実行
,Heroku: クラウド・アプリケーション・プラットフォーム

 動かない場合のあるある
 ・LINE APIの URL指定で pushと replyを間違っている。

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

    // LINE Messaging API 応答メッセージを送る
    $LINE_REPLY_URL = "https://api.line.me/v2/bot/message/reply";

    // 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 = "応答の場合は不要";

    // デバグ確認用のログ:リクエストデータを受信する
    $json_string = file_get_contents('php://input');
    $json_object = json_decode($json_string, true);

    // デバグ確認用のログ:リクエストデータ
    $file = '/tmp/json_string.txt';
    file_put_contents($file, $json_string, FILE_APPEND);
    file_put_contents($file, PHP_EOL.PHP_EOL, FILE_APPEND);

    // リクエストデータの中身を取得する
    $event_0 = $json_object["events"][0];
    if (empty($event_0)) exit;

    // リクエストデータの中身を取得する
    $event_0_message = $event_0["message"];
    if (empty($event_0_message)) exit;

    // replyTokenは返信用の識別子
    $replyToken = $event_0["replyToken"];
    // receive_message_typeは受信したメッセージの種類
    $receive_message_type = $event_0_message["type"];

    // 応答メッセージの書式
    $message_format = "「%s」ってすごいね!!!";

    // メッセージの種類を判別する
    // テキスト, 画像, 動画, 音声, ファイル, 位置情報, スタンプ
    switch ($receive_message_type) {
        case "text":
            // 受信したメッセージ内容
            $receive_message_text = $event_0_message["text"];
            // 応答するメッセージ
            $reply_message_text = sprintf($message_format, $receive_message_text);
            break;

        case "image":
            // 画像を含むメッセージ
            $reply_message_text = sprintf($message_format, "画像を含むメッセージ");
            break;

        case "video":
            // 動画を含むメッセージ
            $reply_message_text = sprintf($message_format, "動画を含むメッセージ");
            break;

        case "audio":
            // 音声を含むメッセージ
            $reply_message_text = sprintf($message_format, "音声を含むメッセージ");
            break;

        case "file":
            // ファイルを含むメッセージ
            $reply_message_text = sprintf($message_format, "ファイルを含むメッセージ");
            break;

        case "location":
            // 位置情報を含むメッセージ
            $reply_message_text = sprintf($message_format, "位置情報を含むメッセージ");
            break;

        case "sticker":
            // スタンプを含むメッセージ
            $reply_message_text = sprintf($message_format, "スタンプを含むメッセージ");
            break;

        default:
            // 応答するメッセージ(ここに来るケースは無い)
            $reply_message_text = sprintf($message_format, "default");
            break;
    }

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

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

    // 送信するデータ
    $post_data = [
        "replyToken" => $replyToken,
        "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_REPLY_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_REPLY_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で Replyメッセージで受信したリクエストデータの JSONデータ構造

整形前
{"events":[{"type":"message","replyToken":"9xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","source":{"userId":"Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","type":"user"},"timestamp":1581234567890,"mode":"active","message":{"type":"text","id":"11000000000000","text":"12345あいうえお"}}],"destination":"Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}

整形後
{
    "events": [
        {
            "type": "message",
            "replyToken": "9xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "source": {
                "userId": "Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                "type": "user"
            },
            "timestamp": 1581234567890,
            "mode": "active",
            "message": {
                "type": "text",
                "id": "11000000000000",
                "text": "12345あいうえお"
            }
        }
    ],
    "destination": "Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}


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

json_encode($post_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)

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

{
    "replyToken": "9xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "messages": [
        {
            "type": "text",
            "text": "「12345あいうえお」ってすごいね!!!"
        }
    ]
}



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

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

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

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

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

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

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

Microsoft Visual C++ ランタイムライブラリ 再頒布可能パッケージのまとめ 2019年版 2005~2019まで
Microsoft Visual C++ ランタイムライブラリ 再頒布可能パッケージのまとめ 2019年版 2005~2019まで

  Microsoft Visual C++ 2005、2008、2010、2012、2013、2015、2017、2019の各バージョンの最新版 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_reply/