PHPでLINEBot作ってみた(自動返信編:その1)

プログラミング

こんにちは、LINE歴6年のぴのです。

チャットアプリとして幅広く使われているLINEですが、皆さんはどのくらい使用していますか?管理人はTwitterやDiscord、Slackを主に使っているのでそれほど使っていませんが、やはり普及度はLINEトップクラスですね。スマホを持っている人はたいてい入れているアプリの一つだと思います。

さて、今回はBot企画第二弾として、TweetBotに引き続き「LINEBot」を作っていきたいと思います。とりあえず今回は動作確認を目標にやっていきますが、そのうち各種機能を追加して遊んでみたいと思います。

Bot企画第一弾はこちら↓

LINEBotを作る

LINE公式アカウントを作成する

LINE公式アカウント」にアクセスして「アカウントの開設->LINE公式アカウントの開設->未認証アカウントの開設」と進んでいきます。普段使っているLINEのアカウントでログインできるので、手順に従っていきましょう。開発用途なら個人でも無料で簡単に作れます。

Messaging APIの設定

公式アカウント作成後に表示される「LINE Official Account Manager」のページ右上の設定->Messaging APIからAPI使用の設定をします。これも手順通り進んでいけば大丈夫です。

Webhook URLの設定

Messaging APIのページの下にあるリンクから、より細かい設定ができる「LINE Developers」のサイトに移動し、LINEのサーバーから自分のサーバーにアクセスできるようにWebhook URLを設定します。管理人の場合は「https://okinotori.net/line-bot.php」と指定しました。下の「Verify」を押すとURLが有効かどうか確認できます。Use webhookも忘れずにオンにしておきましょう。

なお、このURLはSSL通信ができる(https://)ものしか登録できないことに注意しましょう。

Channel access tokenの確認

同ページの下のほうにある「Channel access token」を「Issue」を押して表示させます。このキーは後で使うのでメモ帳などにコピペしておきましょう。

line-bot.phpの作成

ボット本体を作っていきます。今回は動作確認なので、定型文を返すだけの簡単な実装になっています。WordPressをインストールしたフォルダ内に配置すると、Webhook URLで指定したアドレスでアクセスできるようになります。

<?php 
$accessToken = ''; //ここにアクセストークンをコピペ 
$json_string = file_get_contents('php://input');
$json_object = json_decode($json_string);
$replyToken = $json_object->{"events"}[0]->{"replyToken"};
$message_type = $json_object->{"events"}[0]->{"message"}->{"type"};
$return_message_text = "こんにちは"; //返信する内容
sending_messages($accessToken, $replyToken, $message_type, $return_message_text);

function sending_messages($accessToken, $replyToken, $message_type, $return_message_text){
    $response_format_text = [
        "type" => $message_type,
        "text" => $return_message_text
    ];
    $post_data = [
        "replyToken" => $replyToken,
        "messages" => [$response_format_text]
    ];
    $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, json_encode($post_data));
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json; charser=UTF-8',
        'Authorization: Bearer ' . $accessToken
    ));
    $result = curl_exec($ch);
    curl_close($ch);
}
?>

完成

返信きた!!!!!!!

おわりに

とりあえず動作確認ができてよかったです。

最近LINE公式アカウントの作成方法が変わったらしく、各種参考サイト通りのやり方ではできなかったのですが、特に詰まることなくできてよかったです。

実はline-bot.phpをシェルプログラムで実行させたり、以前作った関数でランダム記事を返信させたりも試してみたのですが、そちらはうまくいきませんでした。返信用のスクリプトなので、直接実行しても送信できるわけではないのかな。それらは次回以降にいろいろ試していきたいと思います。

あとTweetBotと異なりLINEサーバーからのアクセスが必要なためパブリックフォルダ内にファイルを配置しているのですが、セキュリティ的にどうなんでしょうか。気にはなりますが、まあ練習だし気にしなくていいでしょう。

なんだかんだ最近PHPを触る機会が多くなってきたな…

【2020/6/3追記】その2が公開されました。

参考

コメント

タイトルとURLをコピーしました