HerokuとLINE BOTでチャットボットを作る

Heroku上にデプロイしたPHPのプログラムとLINE BOTで、チャットボットを作る方法についてまとめました。

開発環境構築〜なにをLINEされても「こんにちは!」と応答するLINE BOTを作成するところまで解説します。

今回はこのような環境を作ります。

 

最終的にはこんなLINEになります。

 

 

環境構築対象の環境

  • OS:macOS High Sierra 10.13.6

 

 

LINE BOT環境構築手順

環境構築手順は以下です。

  1. Herokuの設定
  2. LINE BOT SDKのダウンロード/li>
  3. LINE公式アカウント作成
  4. ディベロッパ登録・チャンネル作成
  5. LINE公式アカウント作成

 

 

1.Herokuの設定

Herokuの設定として、

  • Herokuのアカウント作成
  • Heroku上へのPHPアプリ作成
  • 開発端末上へのHeroku CLIインストール
  • Heroku上でのGit設定

を行います。

 

Heroku上でのGit設定以外の具体的な手順は以下にまとめてありますので、そちらを参照ください。

【Heroku入門(1)】AngularアプリをHerokuへデプロイしてみる

 

終わったら設定が完了していることをターミナルを開いてコマンドで確認してください。

terminal
$ git version
git version 2.17.〇〇


$ heroku --version
heroku/7.22.7 darwin-x64 node-v11.10.1


$ php -v
PHP 7.1.23 (cli) (built: Nov 27 2018 16:59:25) ( NTS )

 

terminal
$ heroku login
heroku: Press any key to open up the browser to login or <span class="s2">q</span><span class="s1"> to exit:
Opening browser to https://cli-auth.heroku.com/auth/browser/〇〇
Logging in... done
Logged in as 〇〇

 

続いてHeroku上でのGit設定を行います。

ブラウザを開いてHerokuコンソール画面で作成したPHPアプリ>Deploy>Deployment methodのHeroku Gitを選択します。

 

ターミナルを開いて、プロジェクトをクローンしてサンプルアプリをデプロイします。

まず、Herokuにをログインします。

terminal
$ heroku login


$ heroku git:clone -a プロジェクト名
$ cd プロジェクト名
$ git init herokuプロジェクト名

 

プロジェクトにindex.php、Procfileを配置してコミット&プッシュします。

index.php
<?php

echo 'Hello World!';

?>

 

Procfile
web: vendor/bin/heroku-php-nginx

 

 

terminal
$ git add .
$ git commit -am "make it better"
$ git push heroku master

 

ブラウザを開いてHerokuコンソール画面で作成したPHPアプリ>Deploy>Open appを選択します。

 

ブラウザに「Hello World!」が表示されればHerokuの設定は完了です。

 

2.LINE BOT SDKのダウンロード

次はComposerをインストールして、LINE BOT SDKをダウンロードします。

ターミナルを開いてコマンドを実行していきます。

terminal
$ sudo curl -sS https://getcomposer.org/installer | php

$ mv composer.phar /usr/local/bin/composer

 

マシンを再起動します。

再びターミナルを開いてComposerのインストール確認をします。

terminal
$ composer -V
Composer version 1.8.4 〇〇

 

MEMO
プロジェクトの開発では複数の外部ライブラリを利用します。

Composerはプロジェクト開発をPHPで行う際、利用する複数のライブラリの依存関係を管理するためのものです。

構成ファイルに利用ライブラリを記載しておくことで、別のマシンで開発を行う際に、外部ライブラリをダウンロードできます。

 

次は作成したプロジェクト内でLINE BOT SDKをダウンロードします。

terminal
$ cd プロジェクト名
$ composer require linecorp/line-bot-sdk

 

Finderでプロジェクトフォルダ内にcomposer.json、composer.lock、vendorフォルダ(linecorp/line-bot-sdk)ができていればLINE BOT SDKダウンロード完了です。

 

3.LINE公式アカウント作成

LINE公式アカウントを作成します。

アカウントの開設|LINE for Business

 

 

普段お使いのLINEアカウントでログインして下さい。

 

 

 

 

アカウント作成完了時に普段お使いのLINEアカウントにBOTアカウントが友達追加されることを確認して下さい。

 

LINE Official Account Managerへ移動して設定します。

 

 

 

 

 

 

4.ディベロッパ登録・チャンネル作成

LINE DevelopersでLINEの開発者として登録します。

LINE Developers

 

ログインボタンを押してLINE公式アカウントでログインします。

 

 

 

 

ログインできたら開発者名とメールアドレスを入力して開発者情報を登録します。

 

 

次は新規プロバイダーを作成します。(プロバイダーが既に生成されている場合はスキップ)

 

 

 

 

 

 

作成したプロバイダーにMessaging APIチャネルを作成します。(Messaging APIが既に作成されている場合はスキップ)

 

 

 

 

 

作成したMessage APIの詳細設定をします。

 

Message APIの詳細設定内容は以下です。

  • Webhook送信:利用する
  • WebhookURL:デプロイしたアプリのドメイン/main.php(例:linebot-demo-application.herokuapp.com/main.php)
  • Botのグループトーク参加:利用する
  • 自動応答メッセージ:利用しない
  • 友達追加時あいさつ:利用しない

※後でサンプルプログラムのmain.phpはデプロイします。

 

 

最後に「アクセストークン(ロングターム)」を発行してトークンを控えておいてください。

以上でディベロッパー登録・チャネル作成は完了です。

 

 

BOTアプリ作成

 

なにをLINEされても「こんにちは」と返答するBOTアプリを作成します。

作成したindex.phpを作成したディレクトリ内に以下を作成します。

  • main.php
  • tool.php
  • hello/hello2.php

 

main.php
<?php

require_once('hello/hello2.php');

define('DEBUG', 'debug.txt');
require_once('tool.php');

$input=file_get_contents('php://input');
debug('input', $input);

if (!empty($input)) {
	$events=json_decode($input)->events;
	foreach ($events as $event) {
		bot($event);
	}
}

 

 

tool.php
<?php

define('TOKEN', '控えておいたアクセストークン');

if (file_exists(DEBUG)) unlink(DEBUG);

function debug($title, $text) {
	file_put_contents(DEBUG, '['.$title.']'."\n".$text."\n\n", FILE_APPEND);
}

function post($url, $object) {
	$json=json_encode($object);
	debug('output', $json);

	$curl=curl_init('https://api.line.me/v2/bot/message/'.$url);
	curl_setopt($curl, CURLOPT_POST, TRUE);
	curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
	curl_setopt($curl, CURLOPT_HTTPHEADER, [
		'Content-Type: application/json',
		'Authorization: Bearer '.TOKEN
	]);

	$result=curl_exec($curl);
	debug('result', $result);

	curl_close($curl);
}

function reply($event, $text) {
	$object=[
		'replyToken'=>$event->replyToken,
		'messages'=>[['type'=>'text', 'text'=>$text]]
	];
	post('reply', $object);
}

function reply_image($event, $original, $preview) {
	$object=[
		'replyToken'=>$event->replyToken,
		'messages'=>[[
			'type'=>'image',
			'originalContentUrl'=>$original,
			'previewImageUrl'=>$preview
		]]
	];
	post('reply', $object);
}

function push($to, $text) {
	$object=[
		'to'=>$to,
		'messages'=>[['type'=>'text', 'text'=>$text]]
	];
	post('push', $object);
}

function load($file) {
	$json=file_get_contents($file);
	return json_decode($json);
}

function save($file, $object) {
	$json=json_encode($object);
	file_put_contents($file, $json);
}

function lock($file) {
	$fp=fopen($file, 'c');
	flock($fp, LOCK_EX);
	return $fp;
}

function unlock($fp) {
	flock($fp, LOCK_UN);
	fclose($fp);
}

 

 

hello/hello2.php
<?php

function bot($event) {
	reply($event, 'こんにちは!');
}

 

作成が完了したらターミナルを開いてアプリをデプロイします。

terminal
$ cd 作成したプロジェクト

$ heroku login

$ git add .

$ git commit -am "make it better"

$ git push heroku master

 

デプロイが完了したら、Message APIの詳細設定の画面を開いて、Webhook URLの接続確認を行ってください。

 

接続確認に問題なければBOTアプリ作成完了です。

 

 

長い手順でしたが、、、

普段お使いのアカウントでLINE BOTに何かLINEしてみて下さい。

「こんにちは!」と返事があれば完了です。

 

お疲れ様でした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください