エックスサーバーとPHPを使ってLINE BOTを作る方法。プログラミングの練習に最適だぞ!

LINE Developers BOT

LINE BOT APIの登場で個人的に盛り上がっております。

LINE BOTを作ってみて思ったんですけど、BOTの開発ってプログラマー初心者の勉強にめっちゃなるんですよ。

なぜなら、プログラミングに集中できるから。

WebのHTMLとCSSやアプリのようにデザイン部分を気にせずにプログラムだけ打てて実際の成果物ができるのはとってもスマートでいいと思います。

しかし、作り方を探しても細かいところが省いてあって、わかりづらい記事が多かったです。

ちょっと調べてみましたが、XserverとPHPの組み合わせでLINE BOTを動かしているところが見つからなかったので、その組み合わせでLINE BOTを作る方法を書いていきます。

SSL対応のURLを発行できるのが最低条件

必須条件として、SSLに対応している必要があります。

SSLは簡単に言うと通信を盗み見されないようにするものですね。SSLに対応しているとURLがhttpに「s」が付いてhttpsでURLが始まっています。

今回は独自SSLという有料のもので試しましたが、共用SSLという、Xserverを契約していれば無料で使えるものでも動くそうです。

確かめてませんが、さくらサーバーでも可能らしいので、どちらかで試しましょう。

SPONSORED LINK

BOT API Trial Accountのアカウント登録をする

Messaging APIのご紹介 | LINE BUSINESS CENTER

こちらから名前や会社名などの必要事項を入力して、BOT APIのアカウントを登録します。無料です。

アカウントは1人1つまで。先着1万名とのことですが、まだ空きがあるのかな?

体験版扱いなので、友達登録できるのは50人までとのこと。現在何人の友達がいるのかが見られません。

本番用・テスト用(SandBoxモード)などはないです。これがテスト用といえばテスト用ですね。

登録が終わると、管理画面が表示されます。

LINE developers

「Channel ID」「Channel Secret」「MID」が必要となります。

PHPでプログラムを書く

それでは、アカウントが登録できたらPHPでプログラムを書いていきましょう。

今回はぼくの作った「ほーくえーすファンクラブ」のソースコードを特別に掲載いたします。

このコードはLINE BOT APIを利用した地獄のミサワBOTの作り方 – Qiitaの大部分をお借りし、そこから改造を行いました。


<?php
$json_string = file_get_contents('php://input');
$jsonObj = json_decode($json_string);
$to = $jsonObj->{"result"}[0]->{"content"}->{"from"};
$receive_text = $jsonObj->{"result"}[0]->{"content"}->{"text"};

$success = ['あ','miwa','スピッツ','Mr.Children','お好み焼き','餃子','乃木坂46','あなた','Apple','読書', 'さや', 'サイン'];

$key = array_search($receive_text, $success);

if ($key) {
	
	switch ($key) {
		case 0:
		  $response_format_text = ['contentType'=>1,"toType"=>1,"text"=>'適当に打ったな'];
		  break;
		case 1:
		  $response_format_text = ['contentType'=>1,"toType"=>1,"text"=>'わかってんじゃん!絶対miwaと友達になる!'];
		  break;
		case 2:
		  $response_format_text = ['contentType'=>1,"toType"=>1,"text"=>'その通り!春の歌の高音を歌えるようになるために毎週カラオケ行ってたのは知ってるよね?'];
		  break;
		case 3:
		  $response_format_text = ['contentType'=>1,"toType"=>1,"text"=>'正解!桜井さんをLive DVDで見るたびに筋トレにハマっては飽きるってあなたに言うの3回目ね'];
		  break;
		case 4:
		  $response_format_text = ['contentType'=>1,"toType"=>1,"text"=>'正解。君と一緒に名鉄エムザのぼてぢゅう食べに行きたいよ。'];
		  break;
		case 5:
		  $response_format_text = ['contentType'=>1,"toType"=>1,"text"=>'正解。ただし王将に限る'];
		  break;
		case 6:
		  $response_format_text = ['contentType'=>1,"toType"=>1,"text"=>'ピンポーン!いくちゃん&ななせまる推し'];
		  break;
		case 7:
		  $response_format_text = ['contentType'=>1,"toType"=>1,"text"=>'そうだよ。ファンのあなたがいるから生きていけてるんだよ♡'];
		  break;
		case 8:
		  $response_format_text = ['contentType'=>1,"toType"=>1,"text"=>'よくわかってんじゃん。そりゃほーくブログで書きまくってるから当たり前か。'];
		  break;
		case 9:
		  $response_format_text = ['contentType'=>1,"toType"=>1,"text"=>'正解です。マジメでしょ?そういうとこが好きでしょ?'];
		  break;
		case 10:
		  $response_format_text = ['contentType'=>1,"toType"=>1,"text"=>'正解!ぼくの彼女です。'];
		  break;
		case 11:
		  $response_format_text = ['contentType'=>2,"toType"=>1,'originalContentUrl'=>"画像のURL","previewImageUrl"=>"サムネイルのURL(サイズ小さめがオススメ)"];
		  break;
	}
} else {
  $response_format_text = ['contentType'=>1,"toType"=>1,"text"=>'いや、違うんですけど。まだ'.$receive_text.'では消耗してません。ホントにファンなの?'];
}

// toChannelとeventTypeは固定値なので、変更不要。
$post_data = ["to"=>[$to],"toChannel"=>"1383378250","eventType"=>"138311608800106203","content"=>$response_format_text];

$ch = curl_init("https://trialbot-api.line.me/v1/events");
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',
    'X-Line-ChannelID: チャンネルID',
    'X-Line-ChannelSecret: チャンネルシークレット',
    'X-Line-Trusted-User-With-ACL: 取得したMID'
    ));
$result = curl_exec($ch);
curl_close($ch);

このコードで変えるのは、画像のURLとチャンネルID、チャンネルシークレット、取得したMIDの4つです。

このPHPを保存して、サーバーにアップしましょう。上で書いた通り、SSLに対応している必要があります。

ぼくはファイル名を「line_callback.php」にしました。

コールバックの設定をする

LINEの管理画面に戻り、Callback URLを設定します。

https://example.com:443/line_callback.php

としました。

「:443」は必須です。必ずつけましょう。

反映が5分から48時間程度とかかるとのことです。個人差があるようで、ぼくはこの部分にめちゃくちゃ時間がかかりました。

最初は自分の設定が悪いのかと思い、深夜2時に作り始めて、朝までかかっても解決しませんでした。

次の日に試すと10分でできたので、完全に時間を無駄にした感があります。

Server IP Whitelistを設定する

このままではコールバックで設定したURLとの通信をLINEが許可してくれてないため、許可してもらうためにIPアドレスを登録しましょう。

IPアドレスはSEOチェキ!でコールバックに設定したドメインを入力すると[サーバ・ドメイン] > [ホスト]に表示されています。

それをServer IP Whitelistに登録します。

Server IP Whitelist

IPアドレスですが、最後は「24」でOKでした。

画像ではIPアドレスを3つ登録していますが、1つでOKです。

LINE developers 2

これで準備完了なので、QRコードから友達登録を行い、動作確認しましょう。

もし動かなかったら大体コールバックのせいです。

どんな動きなの?

このコードの動きですが、LINEにテキストや画像など、何かしらを送るとjson形式でデータが帰ってきます。

jsonの中には、入力されたテキストの他にいろんな情報が含まれているので、そのデータを頼りに処理を行うというわけです。

$receive_textというのが人間が送ったデータですね。

今回はテキストによって処理を変えていますが、いろんなことに対応しています。

LINE BOT API Trialでできる全ての事を試してみた – Qiita

ということで、HTMLも何にもいらないので、プログラミングをかじったはいいけど何作ったらいいかわからないって人にオススメ。

有名なLINEで自分のプログラムが動くってことを体験していただき、ドーパミンを出していただきたいと思います。

今回使用したサーバー:エックスサーバー

SPONSORED LINK

この記事を読んだ人にオススメの記事