はじめに
LinebotとGoogle Colabを使ってシンプルなオウム返しBotを作る方法について学ぶことは、Large Language Models(LLM)を使用したチャットボットを作成するために重要です。この記事では、無料で、どのようにしてLinebotをセットアップし、Google Colabでプログラムを実行するかを解説していきます。
この記事では、特に初心者でも理解しやすいように、基本的な用語の解説から始め、実際の設定手順、コードの記述までを丁寧に説明していきます。LINEのビジネスアカウントの設定から、プロバイダーの作成、必要なキーの取得、そして実際のプログラムのコーディングと実行に至るまで、一連の流れを追っていきましょう。
LINEビジネスIDの作成
LINEビジネスIDの重要性
LINE Botを作成するためには、まずLINEビジネスアカウントが必要です。これは、Botとして機能させるためのアカウントで、LINEのビジネス関連サービスへのアクセスを可能にします。このアカウントを持っていることで、LINEプラットフォーム上でのメッセージのやり取り、ユーザーとのコミュニケーションなどが可能になります。
作成手順
- LINEビジネスアカウントへのアクセス :まず、LINE公式アカウント にアクセスします。
- アカウントの作成 :「アカウントを作成する」をクリックし、必要情報を入力してアカウントを作成します。
- メールでの確認 :登録したメールアドレスに送られた確認メールのリンクをクリックして、アカウントを有効にします。
アカウント作成が完了したら、次にプロバイダーの作成に進みます。
LINEビジネスアカウントでプロバイダーを作成
プロバイダーの役割
LINEプラットフォーム上でBotを運用するためには、「プロバイダー」という単位で管理されます。プロバイダーは、一つまたは複数のLINE Botを持つことができる組織や個人を指します。ここで作成するプロバイダーは、後に作成するLINE Botの「親」となる存在です。
作成手順
- プロバイダーの作成 :LINEビジネスアカウントのダッシュボードから「新しいプロバイダーを作成」を選択します。
- 情報の入力 :プロバイダー名や説明など、必要な情報を入力し、プロバイダーを作成します。
プロバイダーの作成が完了したら、次はLINE Bot自体を作成し、そのために必要な「チャネルシークレット」と「チャネルアクセストークン」を取得します。
チャネルシークレットとチャネルアクセストークンの取得
これらのキーの意味
- チャネルシークレット :これは、あなたのLINE Botを他者から保護するための秘密鍵です。
- チャネルアクセストークン :LINEプラットフォームとの通信に使用されるトークンです。これにより、LINEプラットフォームがあなたのBotを認識し、メッセージの送受信を行います。
取得方法
- Botの作成 :プロバイダーのページから「新しいチャネルを作成」を選択し、必要な情報を入力してBotを作成します。
- キーの取得 :Botの設定ページから「チャネル基本設定」を開き、「チャネルシークレット」をコピーします。続いて「Messaging API設定」から「チャネルアクセストークン」を発行し、これもコピーします。
これらのキーは、Botを操作するためのプログラムに必要となりますので、安全に保管してください。次に、ngrokの設定に進みます。
ngrokの設定
ngrokの必要性
ngrok
は、ローカルで稼働しているサーバーをインターネット上に公開するツールです。これを使用することで、LINEからのWebhookリクエストをローカルで動作しているBotに転送できるようになります。つまり、LINEプラットフォームと自作のBotの間で通信を可能にする重要な役割を果たします。
Authtokenの取得
- ngrokのウェブサイトにアクセス :ngrokの公式サイト にアクセスしてアカウントを作成します。
- Authtokenの取得 :アカウントを作成し、ログインすると、ダッシュボード上で
Authtoken
を取得できます。このトークンは、ngrokをセットアップする際に使用します。
Botのプログラミング
フレームワークの選定
Botの構築には、さまざまなフレームワークが利用可能ですが、ここではPythonとFlaskを使用しています。Flaskは軽量でシンプルなWebアプリケーションフレームワークで、LINE BotのようなシンプルなAPIサーバーを素早く構築できます。
主要なコードの解説
プログラムの各部分は以下のように機能します:
- ライブラリのインストール :FlaskやLINE Bot SDKなど、Botの作成に必要なライブラリをインストールします。
- サーバーの設定と起動 :ngrokを使ってローカルサーバーを公開し、LINEからのWebhookリクエストを受け取れるように設定します。
- メッセージの処理 :ユーザーからのメッセージを受け取り、同じメッセージをオウム返しする機能を実装します。
Webhook URLの設定
Webhook URLの役割
Webhook URLは、LINEプラットフォームがメッセージをBotに送信するためのアドレスです。このURLをLINEプラットフォームに設定することで、ユーザーからのメッセージがBotに転送され、応答が可能になります。
設定手順
- URLのコピー :ngrokを起動した際に表示されるURLをコピーします。
# WARNING:pyngrok.process.ngrok:t=2023-11-02T15:06:59+0000 lvl=warn msg="ngrok config file found at legacy location, move to XDG location" xdg_path=/root/.config/ngrok/ngrok.yml legacy_path=/root/.ngrok2/ngrok.yml
# NgrokTunnel: "https://XXXXXXXXXXXXX.ngrok-free.app" -> "http://127.0.0.1:5000"
- LINEプラットフォームでの設定 :LINEプラットフォーム上で、Botの「Webhook URL」の設定に、コピーしたURLを貼り付けます。
これで、LINEプラットフォームからのリクエストが正しくBotに転送されるようになります。
プログラムの概要とセットアップ
LINEの認証情報の取得
import getpass
# LINEのチャネルシークレット
LINE_CHANNEL_SECRET = getpass.getpass('LINEのチャネルシークレットを入力してください:')
# LINEのチャネルアクセストークン
LINE_ACCESS_TOKEN = getpass.getpass('LINEのチャネルアクセストークンを入力してください:')
# ngrokのAuthtoken
NGROK_AUTHTOKEN = getpass.getpass('ngrokのAuthtokenを入力してください:')
このコードは、LINEのチャネルシークレット、アクセストークン、そしてngrokのAuthtokenを安全に入力するためのものです。getpass
を使うことで、これらの秘密情報が画面上に表示されることなく入力できます。
必要なライブラリのインストール
!pip install flask
!pip install line-bot-sdk
!pip install pyngrok
!ngrok authtoken $NGROK_AUTHTOKEN
Flask
はPythonのWebフレームワークで、LINEボットのWebサーバー構築に利用します。line-bot-sdk
はLINEボット特有の機能を簡単に実装できるライブラリです。pyngrok
はPythonからngrokを操作するためのライブラリで、ローカルで実行されているサーバーをインターネット上でアクセス可能にします。
ngrokを使ってローカルサーバーを公開
import os
from pyngrok import ngrok
from pyngrok.conf import PyngrokConfig
os.system('kill -9 $(pgrep ngrok)')
webhook_url = ngrok.connect(addr='127.0.0.1:5000', pyngrok_config=PyngrokConfig(start_new_session=True))
print(webhook_url)
# WARNING:pyngrok.process.ngrok:t=2023-11-02T15:06:59+0000 lvl=warn msg="ngrok config file found at legacy location, move to XDG location" xdg_path=/root/.config/ngrok/ngrok.yml legacy_path=/root/.ngrok2/ngrok.yml
# NgrokTunnel: "https://XXXXXXXXXXXXX.ngrok-free.app" -> "http://127.0.0.1:5000"
このコードは、実行中のngrokプロセスを停止(もしあれば)し、新たにngrokを使ってローカルの5000ポートを外部に公開します。生成されたURL(webhook_url
)がLINEプラットフォームで設定するWebhook URLになります。
LINEボットのサーバーコード
FlaskとLINE Bot SDKを用いたサーバーの設定
# Flask(ウェブアプリケーションフレームワーク)をインポート
from flask import Flask, request, abort
# LINEボットSDKの必要な部分をインポート
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
# Flaskアプリのインスタンスを作成
app = Flask(__name__)
# LINEボットAPIインスタンスを作成。アクセストークンが必要。
line_bot_api = LineBotApi(LINE_ACCESS_TOKEN)
# Webhookからのイベントを処理するためのハンドラーを作成。チャネルシークレットが必要。
handler = WebhookHandler(LINE_CHANNEL_SECRET)
# '/test'エンドポイントへのGETリクエストで"TEST OK"を返すルートを定義
@app.route("/test")
def test():
return "TEST OK"
# '/'エンドポイントへのPOSTリクエストを処理するルートを定義
@app.route("/", methods=['POST'])
def callback():
# リクエストヘッダからX-Line-Signatureを取得(LINEプラットフォームからのリクエスト検証に使用)
signature = request.headers['X-Line-Signature']
# リクエストボディをテキストとして取得
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
# Webhookボディを処理。署名を検証して有効であることを確認。
try:
handler.handle(body, signature)
except InvalidSignatureError:
# 署名が無効であれば、エラーメッセージを出力し、リクエストを中止。
print("Invalid signature. Please check your channel access token/channel secret.")
abort(400)
# 処理が成功したら、'OK'を返す
return 'OK'
# LINEプラットフォームからのテキストメッセージイベントに対するハンドラを追加
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
# ユーザーから受け取ったメッセージのテキストをコンソールに出力
print("event.message.text:{}".format(event.message.text))
# 同じテキストでユーザーに返信
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=event.message.text),
)
# このスクリプトが直接実行された場合にのみ、ウェブアプリを実行
if __name__ == '__main__':
app.run()
このコードは、ユーザーからLINE経由で送信されたメッセージを受け取り、同じ内容をオウム返しで返信するシンプルなLINEボットです。FlaskがWebサーバーとして動作し、/
(ルート)エンドポイントでPOSTリクエストを受け付けます。このリクエストは、LINEプラットフォームからのWebhookリクエストです。受け取ったメッセージは、handle_message
関数で処理され、ユーザーにオウム返しで送り返されます。
結果
ちゃんとオウム返しされました
おわりに
次回はこのあたりのモデルと連携してみたいと思います。
コメント