LINE BOT の作り方【Line Messaging API】

LINE の管理画面を使った LINE BOT の作り方 を説明しましたが、もっと高機能なものを作るには LINE が提供する Messaging API を使います。

 

LINE Messaging API の設定

LINE Developers のアカウント

LINE Messaging API を使うには LINE Developers のアカウントが必要です。

LINE Developers で「コンソールにログイン」を押してください。「LINEアカウントでログイン」に進めばふだん使っている LINE アカウントで入れます。

 

プロバイダーを作る

これから作るサービスの提供者を表す名前を登録します。緑色の「新規プロバイダー作成」ボタンを押して適切な名前を設定してください。過去に作ったプロバイダーがあれば、そのプロバイダー名をクリックして使うか、「作成」ボタンで作ることもできます。

 

チャネルを作る

チャネルとは、LINE の機能を利用するための通信路のようなものです。初期状態では下のような Messaging API のアイコンが表示されていますのでクリックします。

次に表示されるページで各項目を埋めていきます。任意項目は飛ばして構いません。

  • チャネルの種類は “Messaging API” です。
  • プロバイダーは使用するプロバイダー名を選択します。
  • その他、必須項目を入力し、規約に同意したら「作成」ボタンを押します。

 

友達に追加する

チャネルの管理画面で「Messaging API設定」のタブを選択するとQRコードが表示されます。これをスマホで読み取って友達に追加してください。

 

トークンを取得する

QRコードのさらに下の方に「チャネルアクセストークン」という項目があります。ここで「チャネルアクセストークン(長期)」を発行してください。”長期” のアクセストークンには期限がありません。

 

ユーザーIDを確認する

チャネルの画面の「チャネル基本設定」タブを選び、下のほうにスクロールすると「あなたのユーザーID」が表示されていますのでこれを確認します。

 

動作確認

ターミナルから curl コマンドを実行します。<チャネルトークン> と <ユーザーID> はそれぞれ上で設定・調べた内容に置き換えてください。

スマホで友達になったトークルームを見てください。メッセージが届いているはずです。

外部のシステムから LINE の画面にメッセージを送ることが可能なことを確認できました。

 

AWS Lambda を設定

次は LINE の背後で応答を返すシステムを作ります。無償で簡単に使えるサーバーがあればそこに API を実装するのが定石ですが、Heroku が有償化されてからは使えるサーバー環境が無くなってしまいました。

そこで、AWS の Lambda を使って実装することにします。AWS Lambda が初めての場合は こちら を参考にして基本的な使い方を理解してください。

 

レイヤーを作る

まず、Lambda のレイヤーにアップロードする zip ファイルをパソコンのローカル環境で作ります。使用する Python のバージョン、ライブラリのバージョンは先行例などを調べて決めてください。今回は LINE と OpenAI(ChatGPT)を使うことを想定して次の環境にしました。pip コマンドがバージョン不整合のエラーを出すので使用するバージョンを調整した結果この様になりました。

  • Python 3.11.6
  • pip install fastapi==0.99.0 openai
  • pip install line-bot-sdk==3.0.3
  • pip install requests pprints

この環境を zip して Lambda にアップロードし、レイヤーを作ります。

 

Lambda 関数を作る

Lambda 関数を作って、「関数URL」を設定します。ここで一旦 LINE のコンソールに戻ります。LINE コンソールのチャネルの画面に戻って「Messaging API設定」のタブを選び、次のように設定します。

  • 「Webhookの利用」をオン
  • 「Webhook設定」の「Webhook URL」に、Lambda の関数URLを入力する。ここで「検証」ボタンを押すと Lambda が反応しているかどうか確認できます。
  • 「エラーの統計情報」をオン
  • 「応答メッセージ」はオフ

Lambda 関数の、「設定」タブをクリックし、左側のメニューから「環境変数」を選びます。ここにLINE のユーザーIDとトークンを保存します。

  • キー(1): LINE_CHANNEL_ACCESS_TOKEN
  • 値(1): LINE のコンソールで作った「チャネルアクセストークン」
  • キー(2): LINE_CHANNEL_SECRET
  • 値(2): LINE のコンソールで確認した「あなたのユーザーID」

Lambda 関数に次のようなソースコードを入力します。

実行すると LINE 画面に「こんにちは」「さようなら」と表示されるはずです。AWS から LINE への通信が確認できました。

次はこのようにソースコードを変更します。受信した内容をそのまま送り返す処理になっています。

関数をデプロイしたら、スマホの LINE 画面から何かメッセージを送ってください。オウム返しにメッセージが返ってくるはずです。

 

ChatGPT と会話する

オウム返しする BOT ができましたので、次は LINE から送られたメッセージを ChatGPT に転送し、ChatGPT の回答内容を LINE に送り返すようにしてみます。こうすれば LINE 画面で ChatGPT を会話するアプリを実現できます。

ChatGPT の使い方は こちら を参照して使い方を理解しておいてください。また、この機能の実装のために API キーを作ってください。作った API キーを Lambda 関数の環境変数に設定します。

  • キー(3): OPENAI_API_KEY
  • 値(3): ChatGPT の API キー

ソースコードはこのようになります。

オウム返しではなく ChatGPT が返事してくれるはずです。応答がなかったら Lambda 関数の「設定」→「一般設定」のタイムアウトを少し長く設定してください。デフォルトは3秒ですが ChatGPT の応答が間に合わないことがあるからです。