LINE botとGoogle Colabとngrokを用いて、簡単かつ完全無料でオウム返しBotを作成する方法

LINE Bot

はじめに

LinebotとGoogle Colabを使ってシンプルなオウム返しBotを作る方法について学ぶことは、Large Language Models(LLM)を使用したチャットボットを作成するために重要です。この記事では、無料で、どのようにしてLinebotをセットアップし、Google Colabでプログラムを実行するかを解説していきます。

この記事では、特に初心者でも理解しやすいように、基本的な用語の解説から始め、実際の設定手順、コードの記述までを丁寧に説明していきます。LINEのビジネスアカウントの設定から、プロバイダーの作成、必要なキーの取得、そして実際のプログラムのコーディングと実行に至るまで、一連の流れを追っていきましょう。

LINEビジネスIDの作成

LINEビジネスIDの重要性

LINE Botを作成するためには、まずLINEビジネスアカウントが必要です。これは、Botとして機能させるためのアカウントで、LINEのビジネス関連サービスへのアクセスを可能にします。このアカウントを持っていることで、LINEプラットフォーム上でのメッセージのやり取り、ユーザーとのコミュニケーションなどが可能になります。

作成手順

  1. LINEビジネスアカウントへのアクセス :まず、LINE公式アカウント にアクセスします。
  2. アカウントの作成 :「アカウントを作成する」をクリックし、必要情報を入力してアカウントを作成します。
    file
  3. メールでの確認 :登録したメールアドレスに送られた確認メールのリンクをクリックして、アカウントを有効にします。

アカウント作成が完了したら、次にプロバイダーの作成に進みます。

LINEビジネスアカウントでプロバイダーを作成

プロバイダーの役割

LINEプラットフォーム上でBotを運用するためには、「プロバイダー」という単位で管理されます。プロバイダーは、一つまたは複数のLINE Botを持つことができる組織や個人を指します。ここで作成するプロバイダーは、後に作成するLINE Botの「親」となる存在です。

作成手順

  1. プロバイダーの作成 :LINEビジネスアカウントのダッシュボードから「新しいプロバイダーを作成」を選択します。
    file
  2. 情報の入力 :プロバイダー名や説明など、必要な情報を入力し、プロバイダーを作成します。

プロバイダーの作成が完了したら、次はLINE Bot自体を作成し、そのために必要な「チャネルシークレット」と「チャネルアクセストークン」を取得します。

チャネルシークレットとチャネルアクセストークンの取得

これらのキーの意味

  • チャネルシークレット :これは、あなたのLINE Botを他者から保護するための秘密鍵です。
  • チャネルアクセストークン :LINEプラットフォームとの通信に使用されるトークンです。これにより、LINEプラットフォームがあなたのBotを認識し、メッセージの送受信を行います。

取得方法

  1. Botの作成 :プロバイダーのページから「新しいチャネルを作成」を選択し、必要な情報を入力してBotを作成します。
  2. キーの取得 :Botの設定ページから「チャネル基本設定」を開き、「チャネルシークレット」をコピーします。続いて「Messaging API設定」から「チャネルアクセストークン」を発行し、これもコピーします。
    file
    これらのキーは、Botを操作するためのプログラムに必要となりますので、安全に保管してください。次に、ngrokの設定に進みます。

ngrokの設定

ngrokの必要性

ngrokは、ローカルで稼働しているサーバーをインターネット上に公開するツールです。これを使用することで、LINEからのWebhookリクエストをローカルで動作しているBotに転送できるようになります。つまり、LINEプラットフォームと自作のBotの間で通信を可能にする重要な役割を果たします。

Authtokenの取得

  1. ngrokのウェブサイトにアクセスngrokの公式サイト にアクセスしてアカウントを作成します。
  2. Authtokenの取得 :アカウントを作成し、ログインすると、ダッシュボード上でAuthtokenを取得できます。このトークンは、ngrokをセットアップする際に使用します。
    file

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に転送され、応答が可能になります。

設定手順

  1. 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"
  1. 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関数で処理され、ユーザーにオウム返しで送り返されます。

結果

ちゃんとオウム返しされました

file

おわりに

次回はこのあたりのモデルと連携してみたいと思います。

Youri 7B で Fate/stay nightの情報を学習させる【LangChain】
はじめにこの記事では、Pythonといくつかのライブラリを使用して、特定のテーマに関する質問応答システムを構築する方法を説明します。この例では、「Fate/stay night」という人気アニメの内容を題材として取り上げ、その内容に基づいた...
Rinna-3.6B で Fate/stay nightの情報を学習させる【LangChain】
はじめにこの記事では、Pythonを使って「rinna/japanese-gpt-neox-3.6b-instruction-ppo」モデルを用いてFate/stay nightの情報を学習させる方法を初心者向けに説明します。ステップごとに...

参考記事

【init】Google ColabでLINEおうむ返しBOTを爆速で動かす - Qiita
下準備Google Colabを開く( Channel SecretとChannel Access Tokenの取得(…
ボットを作成する
LINE Developersサイトは開発者向けのポータルサイトです。LINEプラットフォームのさまざまな開発者向けプロダクトを利用するための、管理ツールやドキュメントを利用できます。LINEログインやMessaging APIを活用して、アプリやサービスをもっと便利に。

ノートブック

Google Colaboratory

コメント

タイトルとURLをコピーしました