で、結局キャラクターBOTを作るには? ~LINEBOTあれこれ~ #004
前回、チャットの会話内容を保存する方法を決めました。
”AI大谷翔平BOTをLINEで作る”を目標に色々やっております。
→これまでをまとめたマガジンはこちら
実際にプログラムを始めたいところですが、LINEBOTについて知っていないと何をプログラムするか、イメージがつかないと思いますので、まずLINEBOTの説明をしたいと思います。
LINE Messaging API
LINEBOT、つまりLINEのメッセージ送信・応答をプログラムで自動化するにはLINEが用意しているMessaging APIを利用します。
公式サイトの説明で「Webhookイベントが~」と色々書いてありますが
・ユーザとBOT(公式アカウント)の間にはLINE社のサーバが存在
・Messaging APIを使いLINE社のサーバを介して、ユーザとやり取りを行う
というイメージがわかってもらえればいいと思います。
まぁ「そんなとこだろう」ってところです。
もう少し具体的に作業をイメージしてもらうと
まずLINE Businessで(公式)アカウントを作成すると
上記画面の通り”Webhook URL”が求められます。
この”Webhook URL”から先が我々の作業です。
例えばユーザが何かメッセージを送信すると、LINEのサーバからこのURL宛てに「こんなメッセージ来たよ」とパスがくるようになってるので、何かしらの処理をして返してあげます。(最初の図の②③にあたる)
「で、Webhookって?」
となるかと思いますが、Webhookは簡潔に言うと
「HTTP プロトコルを使用して通知を行うシステム」です。
なんか難しそうな話ですが、結局やってることは基本的にURLに対しPOSTリクエストを投げているだけです。(参考はこちら)
今度は「POSTリクエストって?」となるかと思いますが、もう正直に言うとシンプルなLINEBOTなら、あまり深く考えずテンプレートを真似るだけでできるので、理解しなくて大丈夫です。(詳しくは調べて見て下さい)
ぐだぐだ書きましたが、とにかくURLの先で処理が行える
サーバー
的な存在が必要となります。
BOTサーバーの構築
LINEからのWebhookを返すURLを生成するにはいくつか方法があります。
①Webサーバーを作る
通常はこちらになります。
一般的なWebサービスを作るのと同じく、クラウドサービスなどでサーバを立ち上げ、Apacheなどを利用し、WebサーバとしてLINEからの処理を行えるようにします。
が、「サーバを立ち上げ」「Apacheなどを利用」と簡単に言っていますが知識がないと中々難しい作業となります。
さらにLINEのWebhook URLはSSL証明書が付いている必要があり、これをするためにはドメインの取得もしなくてはいけなく、多少なり費用がかかります。(自己証明書は利用不可)
ということで、LINEBOTのためにWebサーバーを作るという手段はあまりおすすめではありません。ただ後述のサーバーレスサービスと比べるとデバッグしやすかったり、柔軟なことが行えるので、お試しではなく
「本腰を入れて開発したい!」という方はこちらがいいと思います。
GCEなどであれば月の費用もほとんどかかりません。
(こちらの構築方法いつか説明できたらと思います…)
②サーバーレスサービスを利用する(Cloud Functionsなど)
①の「サーバを立ち上げ」が大変だということで生まれたのがサーバーレスサービスです。代表的なのは以下の3つです。
GoogleのCloud Functions
AmazonのAWS Lambda
MicrosoftのAzure Functions
サーバーレスサービスはどういうものかというとCloud Functionsの場合Googleの大きなサーバを使って、指定のプログラムだけを実行してもらう
といったイメージをしてもらえばいいと思います。
(あいまいな表現ですが、先に言ってしまうと今回はこれを利用するので具体的なことは、後々の記事を見ていただければと思います。)
ドメインの導入も不要なので、いいことづくめでLINEBOTには非常に適しています。
が、デメリットもあります。サーバに何かしらのファイルを置いておけないなど柔軟性がないこと。また1番の欠点はデプロイに時間がかかることです。(デプロイはプログラムをアップするという意味です)
この欠点により①のWebサーバーを作る方法と対象的にデバッグはしづらく
細かく変更を加えながら開発するということが難しくなります。
なので、人のソースを流用するなどにはサーバーレスは簡単ですが「色んなことを試しながら開発したい」となるとちょっと厳しいです。
重複しますが、本腰入れるなら①ということです。
ちなみに費用はこちらはほとんどかかりません。
(利用料金については別途お話しします。)
③GASの利用
GAS(GoogleAppsScript)を利用してBOTを作ることもできます。
ネットで「LINEBOT 作成」と検索すると、これを使った記事が1番出てくるかもしれません。
が、こちらはJavaScriptのような言語による開発でPythonは使えません。
最初に言いましたとおり「Pythonで開発する」と宣言しましたので
今回は選択肢から除外します。ただ、簡単にLINEBOTを作る手段ではありそうなので、興味ある方は調べてみて下さい。
④Herokuの利用
「LINEBOT 作成」と検索するとそこそこ出てくるのが「Heroku」です。
Herokuは②のサーバレスサービスのうちに入り、サーバを立ち上げることなく、Webアプリケーションを実行するための環境を作ることができます。
が、こちらは最低月5ドルという費用がかかります。
以前は無料プランがあったため、Webアプリの公開手段として広まったようなのですが、もう今はあまり利用するメリットがそこまでありません。
(こういう古くなったネット上の情報が残ったままなのは問題ですね…)
以上の4つの方法を挙げましたが、手間と費用を考えて②のサーバーレスサービスを利用することにします。サーバーレスサービス内でも色々ありますが、あまり変わらないので、余ってるであろうGoogleアカウントで使えるCloud Functionsを利用したいと思います。
ということで、中途半端ですが説明が長くなりそうなので、今回は
BOT構築に「Cloud Functionsに決定」ってとこでこれで終わりにします。
複数の手段があり、それぞれメリット・デメリットを理解して頂ければ幸いです。
次回はCloud FunctionsとLINE公式が提供するソースで、まずサンプルとしてオウム返しBOTを作ってみたいと思います!