LINE BOTでボタン選択肢を出したい

LINE APIのTemplate Messageを使う

今まで使っていたのはReply Message。
Template Messageもデータの流れは同じ。
LINE APIに渡す情報が異なる。

LINE API Referenceの Template Messageの仕様

サンプルをそのまま表示させてみる

ボタンを書き換える

画像を変える

$post_data = array(
    "replyToken" => $reply_token,
    "messages" => array(
      array(
        "type"=> "template",
        "altText"=> "this is a buttons template",
        "template"=> array(
            "type"=> "buttons",
            "thumbnailImageUrl"=> "xxxxxxxここに画像のURLxxxxxxx",
            "title"=> $title,
            "text"=> "雑談するかしりとりするか選んでください",
            "actions"=> array(
                array(
                  "type"=> "postback",
                  "label"=> "雑談する",
                  "data"=> "action=dialog"
                ),
                array(
                  "type"=> "postback",
                  "label"=> "しりとりする",
                  "data"=> "action=srtr"
                )
            )
        )
      )
    )
  );

LINE BOTで「本当によろしいですか?」フォームを出したい

LINE APIのTemplate Messageを使う

今まで使っていたのはReply Message。
Template Messageもデータの流れは同じ。
LINE APIに渡す情報が異なる。

LINE API Referenceの Template Messageの仕様

サンプルをそのまま表示させてみる

日本語に書き換えてみる

$post_data = array(
    "replyToken" => $reply_token,
    "messages" => array(
      array(
        "type"=> "template",
        "altText"=> "this is a confirm template",
        "template"=> array(
            "type"=> "confirm",
            "text"=> "本当によろしいですか?",
            "actions"=> array(
                array(
                  "type"=> "message",
                  "label"=> "はい",
                  "text"=> "yes"
                ),
                array(
                  "type"=> "message",
                  "label"=> "いいえ",
                  "text"=> "no"
                )
            )
        )
      )
    )
  );

※labelが表示される

コードをきれいにしよう

コメントを付ける

  • 他人(自分も)にコードの意図が伝えるため
  • コードのかたまり/区切りが目で見てすぐわかるため

関数に分ける

  • 何度も行う処理を、一度だけ書いて済ませるプログラムの書き方
  • 値の受け渡しができるので、一つの機能を共通で使える

関数は「何かを入れると何かを計算して何かを返してくれるプログラムの部品」です。 一般的には、入力を受けて処理を行い、その結果として出力があります。 https://line.f-logic.jp/img/BOT_function.jpg

引数は「プログラムや関数に渡す値」です。
https://line.f-logic.jp/img/BOT_function_arg.jpg

(引用元:コールバック関数 (callback function)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
(参考:関数 - マンガで分かる JavaScriptプログラミング講座

[書き方]

function 関数名(){  
 //何度も行う処理を書く 
}  
  
関数名() //ここで実行される  

引数を渡す

function 関数名(仮引数){  
  //仮引数を用いた処理
}  
  
関数名(引数) //引数が仮引数に代入されて実行される  

戻り値を渡す

function 関数名(){  
  //処理
  return 0;  
}  
  
$result = 関数名(); //変数resultにはreturnされた0が入る

ユーザからのスタンプの意味を理解した返答を返したい

ユーザメッセージのスタンプのIDを抜き出す

$textや$typeのように、$stickerIdを抜き出す

無料スタンプのID一覧を照合する

例:
packageIdが1で、srtickerIdが1のスタンプに対して「眠いのか」と返す

ID毎に返答を変える(if文の入れ子)

例:

if($packageId == 1){  
  if($stickerId == 1){  
    //「眠いのか」と返す  
  }  
}  

LINE BOTから画像やスタンプを返したい

LINE APIとやり取りするjson(情報の塊)の中身に着目!

※ファイルにjsonを出して見る

テキストと一緒に渡している"type"があやしい
LINEAPIとのやり取りなので、LINEAPIの仕様を見てみる(LINE Reference)
https://devdocs.line.me/ja/

画像を返す

urlとtype=imageでやってみる

スタンプを返す

idとtype=stickerでやってみる

+α ユーザからのスタンプもIDからどのスタンプかわかる
+α ユーザからのメッセージがテキストか画像かなど種類がわかる