LINE BOTを使ってみよう。(CallBackプログラム:受信編)

2018-05-11

導入では、APIを使用するための設定等を行いました。
今回は、ラインでメッセージを投函したらサーバ側で、そのメッセージを受け取るためのプログラムを作ろうと思います。
メッセージの仕組みは line developer を確認してください。
プログラムを作る前に、もうひと手順必要な作業があります。
自分のラインにお友達登録をしなくては、メッセージが送れません。

はじめにお友達登録

お友達と録するにはLINE@MANAGER の画面で
[アカウント設定] ⇒ [基本設定] に、QRコード、お友達登録ボタンがあります。

こんなの

メッセージ受信

ラインから投函されたメッセージを受け取るには

を使用します。
取得できたメッセージはJSON エンコードされた文字列になっているのでjson_decodeする必要があります。
まずは、単純なテキストメッセージのサンプルです。

簡単に構造を説明しますと。

type [メッセージ][友達加入][退会][ロック]を表す
replyToken 応答用のID
source ⇒ userId 送ってきた人のLINE ID
message ⇒ type オブジェクトの種類(テキスト、画像など)
message ⇒ id オブジェクトに振られたID
message ⇒ text 送ってきた人が入力した文字

これさえ理解したら使えます。

項目の説明

1行目のtype

これは、送られてきたメッセージが、ユーザからのメッセージなのか?LINEからの通知なのかを判断します。
種類は以下の通りです。

message 送ってきた人からのメッセージ
follow LINEグループの入会
leave LINEグループの退会
unfollow アカウントロック

LINEにお友達登録された時は、「follow」が届きます。しかし、退会したときは「leave」が送れてきません。
退会方法の設定が悪いのか?いささか疑問です。
※退会手順は、LINEのユーザ画面から長押しでアカウントロック。そのあと設定のアカウントロック一覧から削除をしてみました。


message ⇒ typeの種類

次に、見なくてはいけないところは、実際のメッセージです。
ラインでは、テキスト以外に、画像、音声、動画、ファイルなどを送れます。
その判断は、[message] ⇒ [type]でどんな形式であるかで判断し、それぞれに合ったロジックを作ります。

text テキスト文
image 画像
sticker スタンプ
file ファイル
video 動画
audio 音声
location 位置情報
rich リッチメッセージ

各Typeの受信方法

画像、動画、音声は、コマンドを発行して情報を取得します。
テキストは、メッセージに、そのままありますので問題ありません。
スタンプはスタンプIDでのやり取りだけですので、そう難しくはありません。
※位置情報、リッチは試していません。


画像、動画、音声の取得

これら、3種類はAPIを発行して取得を行います。

APIヘルプは こちら

curl_initで取得したハンドルをファイル出力します。
もし、取得したとき失敗していたら、戻り値はJSON エンコードされた文字列が設定されていますのでエラーメッセージを確認してください。

プログラムはこんな感じ


スタンプの取得

APIで使用できるスタンプには制限があります。
LINEをインストールしたときに標準で入っているスタンプしかやり取りできません。
(フリー、購入したスタンプは使用できないのです。)
使用できるスタンプは こちら をご確認ください。
実際のスタンプのIDは以下の項目に設定されています。

[message] ⇒ [stickerId]
[message] ⇒ [packageId]

作ったプログラム(CallBack.php)をLINE@MANAGERに登録

line developers サイトから「Webhook URL」にCallBackプログラムのURLを設定します。

設定後、右側に「接続確認」ボタンが表示されます。
これは、設定したCallBackプログラムが正常にCallできるかのチェックです。
実際の動きは、テスト用のパラメータを付加した形でプログラムをCallすることになります。
ということは、CallBackプログラムではテスト用のメッセージが来たら適切な処理をしなければいけないという事です。
私は、次の様にして判断処理を入れておきました。


受信処理の基本はこのような感じです。
次は、送信処理を作っていくことにします。
[前の記事]LINE BOTを使ってみよう。(導入編)
[次の記事]LINE BOTを使ってみよう。(CallBackプログラム:テキスト送信編)