PHPで簡易LINEBotを作ってみた

一時期話題になっていたLINEBotの「りんな」みたいなものの超簡易版を作ったので、備忘録。

流れとしては、

  1. LINEDevelopersで登録と諸設定をすませる
  2. phpで色々書く
  3. phpコードをサーバーにアップロードする
  4. LINEDevelopersで関連付け
  5. 確認

LINEDevelopersで登録と諸設定をすませる

LINEDevelopers:
https://developers.line.biz/ja/

ログインし、MessagingAPIへ

プロバイダーを作成し、新規チャネル作成を進めます。ここまで特別な設定などはないので、普通に進めていけばいいです。

プランは、どちらでもいいです。僕は「Developer Trial」にしました。

こんな感じで、下に「Channel ID」とかいろいろある画面まで来たら、とりあえず次へ行きましょう。

phpで色々書く

サーバーサイドの制御プログラムを書きます。

これを行わないと、何も自分の思うように動かせません。

<?php
// callback.php
// アクセストークン
$api_token = "LINEDevelopersで取得したアクセストークン";

// メッセージ受け取り
$message_object = json_decode(file_get_contents('php://input'));

// 取得データ
$reply_token  = $message_object->{"events"}[0]->{"replyToken"};
$message_type = $message_object->{"events"}[0]->{"message"}->{"type"};
$message_text = $message_object->{"events"}[0]->{"message"}->{"text"};

// テキスト以外だったら終了
if($message_type != "text") exit;

// メッセージ分岐
if($message_text == "君の名は") {
    $res_text = "kazzです";
} else if($message_text == "今何時") {
    $res_text = date("H時i分s秒") . "です";
} else if(preg_match('/^[0-9]{7}$/', $message_text)) {
    $res_text = postal($message_text);
} else {
    $res_text = $message_text . "ってなに?";
}

// APIリクエストデータ
$post_data = json_encode([
    "replyToken" => $reply_token,
    "messages" => [
        [
            "type" => $message_type,
            "text" => $res_text
        ]
    ]
]);

// APIリクエスト送信
$ch = curl_init("https://api.line.me/v2/bot/message/reply");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "Content-Type: application/json; charser=UTF-8",
    "Authorization: Bearer " . $api_token
));
curl_exec($ch);
curl_close($ch);

// 郵便番号API関数
function postal($postal_code) {
    $url = "http://zipcloud.ibsnet.co.jp/api/search?zipcode={$postal_code}";
    $res = json_decode(file_get_contents($url));
    if(!is_null($res->results[0])) {
        return $res->results[0]->address1.$res->results[0]->address2.$res->results[0]->address3;
    } else {
        return "そんな郵便番号なかったよ...";
    }
}

アクセストークンは「LINEDevelopers」のここで取得

16-23行目以外はテンプレみたいなものです。画像とか、位置情報とか、もっと他の機能を使うときにはそこも書き換える必要が出てきそうですが。

phpコードをサーバーにアップロードする

先ほど書いたコードを、PHPの使えるwebサーバーへアップロードします。

僕は「xserver」でデプロイしました。LINEは、SSL/TLS(https)必須です。

無料で使える「heroku」とか、安くて簡単の「ロリポップサーバー」とか、「xserver」のほかにもいろいろあります。アップロードの方法とかそのへんは、調べてみてください。

LINEDevelopersで関連付け

アップロードしたら、また「LINEDevelopers」側で設定があります。

「Webhook」を利用するにし、 「Webhook URL」をアップロードしたphpファイルのURLを入れます。接続確認もしておきましょう。

続いてIPアドレスを設定。WebサーバーのIPです。プレフィックスは大抵は24で通ると思います。

毎回出てくるのは精神的にきついので、上だけ切っておきます。

実機でアクセスしてみましょう。

出来てますね。

最後

無限の使い道が見出せそうですね。

LINEで部屋の温度を受信したり、IoT分野でも利用できそうです。今後挑戦したいと思います。

The present writer kazz.

関連記事

+Markdownで講義ノートを書くためのノート
+LINEBOTを楽に実装できるPHPライブラリ作った
+ブラウザで動くオンライン対戦リバーシ作ってみた
+LINEBOTで画像文字起こしと有害検出
+SQLノート(MySQL)