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

2020/01/29

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

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

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ぼっち状態を解消する方法

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

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

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

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


● 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メッセージを実装するとできる事

 Botがキーワードサジェスト(提案)してくれます!!!

・LINE Messaging APIで Replyメッセージを返信する方法 キーワードサジェスト
LINE Messaging APIで Replyメッセージを返信する方法 キーワードサジェスト
・LINE Messaging APIで Replyメッセージを返信する方法 キーワードサジェスト
LINE Messaging APIで Replyメッセージを返信する方法 キーワードサジェスト


● 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の「無料プラン」を使用しました。
学習に最適なクラウドIDE! PaizaCloud


 ※ 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

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

line_reply_suggest.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"];
            $suggests = getSuggest($receive_message_text);
            $suggests_str = join(",", $suggests);
            $reply_message_text = sprintf($message_format, $suggests_str);
            break;

        default:
            // 応答するメッセージ
            $reply_message_text = "わかんない";
            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);

    // サジェストAPIのサンプル
    function getSuggest($word) {
        // "あ いう" = "%E3%81%82%20%E3%81%84%E3%81%86"
        $SUGGEST_API_URL = "https://completion.amazon.co.jp/search/complete?method=completion&search-alias=aps&mkt=6&q=";

        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $SUGGEST_API_URL . rawurlencode($word));
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        $result = curl_exec($curl);
        curl_close($curl);

        $result_object = json_decode($result, true);
        // 1個目の要素は検索ワード
        $key = $result_object[0];
        // 2個目の要素がサジェストの配列
        $suggests = $result_object[1];

        return $suggests;
    }
?>


● Amazon Suggestのレスポンスの JSONデータ構造

 アマゾンのサジェスト

●リクエストパラメータのエンコード
https://completion.amazon.co.jp/search/complete?method=completion&search-alias=aps&mkt=6&q=あ いう
https://completion.amazon.co.jp/search/complete?method=completion&search-alias=aps&mkt=6&q=%E3%81%82%20%E3%81%84%E3%81%86

"あ いう" = "%E3%81%82%20%E3%81%84%E3%81%86"
※ 半角スペースは %20にエンコードする。

● Amazon Suggestのレスポンスの JSONデータ構造
https://completion.amazon.co.jp/search/complete?method=completion&search-alias=aps&mkt=6&q=あいう

整形前
["\\u3042\\u3044\\u3046",["あいうえお表","あいうえお","あいうえお表 お風呂","あいうえお タブレット","あいうえおの本","あいうべ体操 本","あいうえおでんしゃじてん","あいうえおばけだぞ","あいうえお パズル","あいうえおカード"],[{},{},{},{},{},{},{},{},{},{}],[],"1xxxxxxxxxxxx"]

整形後
[
    "\\u3042\\u3044\\u3046",
    [
        "あいうえお表",
        "あいうえお",
        "あいうえお表 お風呂",
        "あいうえお タブレット",
        "あいうえおの本",
        "あいうべ体操 本",
        "あいうえおでんしゃじてん",
        "あいうえおばけだぞ",
        "あいうえお パズル",
        "あいうえおカード"
    ],
    [
        {},{},{},{},{},{},{},{},{},{}
    ],
    [],
    "1xxxxxxxxxxxx"
]



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で Pushメッセージを送信する方法 Windows、Linux、ラズパイ、PHP言語に対応
LINE Messaging APIで Pushメッセージを送信する方法 Windows、Linux、ラズパイ、PHP言語に対応

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

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

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

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_reply_suggest/