Python

Python×LINEで実践!自動返信アプリを作ってみよう!

line
ウマたん
ウマたん
当サイト【スタビジ】の本記事では、Pythonを使って、LINEにメッセージを送ったら自動で返信してくれるアプリを作っていきます!この機能を応用することでいろんなサービスの開発が可能になるのでぜひマスターしましょう!

こんにちは!スタビジ編集部です!

この記事ではPythonの演習としてLINEを利用していろんな実装していきます!

ロボたん
ロボたん
LINEは毎日使うコミュニケーションツールの一つだね!

知り合いとチャットする以外にも何か良い使い方ないかな~?

ウマたん
ウマたん
そうだね!今回はPythonを使ってLINEで出来ることを試してみよう!

実際に手を動かしつつPythonでLINEを動かしてみましょう!

PythonでLINEアプリを作るための事前準備

さて早速実装をやっていきたいところですが、その前に今回使うツールを準備をしていきます

今回使っていくツールは主に3つです!

  • Messaging API
  • Flask
  • Heroku

Messaging API」とはLINEのアカウントを通じて、自分のサービスとLINEユーザーの双方向コミュニケーションを可能にしてくれるAPIです!

ウマたん
ウマたん
Messaging APIを使うことで自分が作ったアプリとLINEを繋げてくれるから、ユーザーとのやり取りを自分のアプリでコントロールできるんだね!

LINE Developersにログイン

Messaging API」を利用するための準備をしていきましょう!

今回のサービス作成に当たり、「LINE Developers」へサインインが必要です

LINE Developers」とは、LINEサービスとの連携を可能にするAPIの仕様や使い方をまとめているポータルサイトです!

ブラウザで「LINE デベロッパー」と検索し「LINE Developers」のページにアクセスします

LINE LINE

画面に従ってログインをします、自身の「LINEアカウント」でログインできます

ログイン後は「新規プロバイダーを作成」で自分のプロバイダーを作成しましょう

プロバイダーはアプリを提供するチームや組織のことを指してます

line

これで、プロバイダーからLINE Developersの各種機能を利用することが出来ます

ウマたん
ウマたん
基本的にLINEが提供しているサービスは無料で使えるから、ちょっとしたお試しに便利だね!

チャネルの作成

では、LINE Developersの機能の一つ、Messaging APIを準備していきます

プロバイダー画面から「新規チャネル作成」をクリックし、出てきた画面の「Messaging API」をクリックします

line

チャネル名や業種などの必須項目を入力し、規約の同意チェックを入れて「作成」ボタンを押します

line

プロバイダー画面にチャネルが表示されたら準備完了です!

FlaskとHerokuの準備

FlaskとLINE Messaging APIを利用するためのライブラリの準備をします

pip install flask
pip install line-bot-sdk

Flask」は2010年にリリースされたPythonのWebアプリケーションフレームワーク!

なぜFlaskを使うというと、LINEアプリはメッセージ(リクエスト)がサーバーに送られて、それに返信(レスポンス)する仕組みでWebアプリとほぼ同じだからです

Flaskについては詳しくは下記の記事に書いてありますので、チェックしてみてください!

macとsurface
PythonのFlaskで簡単なWebアプリケーションを作ってみよう!当サイト【スタビジ】の本記事では、Pythonの軽量WebアプリケーションフレームワークであるFlaskを使って簡単なWebアプリケーションを作成していきたいと思います。Pythonを開発言語としても使えるようになると、幅が広がりますよー!...

インストールが終わったら作業フォルダに必要なファイルを準備していきます!

  • app.py
  • conf.json
  • Procfile
  • requirments.txt
  • runtime.txt

「app.py」に今回のアプリの中身を書いていきます、詳しくは実践編で解説します

「conf.json」にはLINEチャネルへのアクセス情報を記載します

{
    "CHANNEL_SECRET": "シークレット情報",
    "CHANNEL_ACCESS_TOKEN": "アクセストークン"
}

「シークレット情報」は作成したチャネルの「チャネル基本設定」で、「アクセストークン」は「Messeaging API設定」で取得できます

line line

この情報があると誰でもチャネルにアクセス出来てしますので取り扱いには注意です

「Procfile」「requirments.txt」「runtime.txt」にはherokuのデプロイに必要な情報を記載します

各ファイルの中身については下記の記事で詳しく書いてありますので、参考にしてみてください!

heroku
herokuを使ってPythonのflaskで作ったアプリケーションをデプロイする方法と注意点!当サイト【スタビジ】の本記事では、PythonのWebフレームワークであるFlaskを使って作成したWebアプリケーションをインターネット上に公開するためにHerokuというサービスを使ってデプロイしていきます。Herokuを使えば簡単にWebアプリケーションを公開することが可能なんです。...

Herokuへアプリの登録も行います

heroku create アプリ名

アプリ名はheroku内でユニークである必要あるので注意してください!

Creating ⬢ lineapp... !
▸ Name lineapp is already taken

下のような出力がされたらエラーなのでアプリ名を変えて、試してみましょう

Herokuでアプリを登録したら、チャネルへのアクセス情報をHerokuにも入力します

heroku config:set YOUR_CHANNEL_SECRET="シークレット情報" --app アプリ名
heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="アクセストークン" --app アプリ名

 

これでHerokuの準備は完了です!

ウマたん
ウマたん
Herokuを使うのが初めての場合だと、このHerokuの登録までが難しいから慎重に!

実践 LINEで自動返信アプリを作る

実際にPythonを使ってLINEで自動返信する機能を作っていきましょう!

まずはLINEの公式のテンプレートをもとにユーザーが送った言葉をそのまま返す「オウム返し」機能を実装します

自動返信アプリの実装コード

app.pyに下記のコードを書いていきます

import os
import json
from flask import Flask, request, abort

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage, TemplateSendMessage, CarouselTemplate, CarouselColumn)

app = Flask(__name__)

ABS_PATH = os.path.dirname(os.path.abspath(__file__))
with open(ABS_PATH+'/conf.json', 'r') as f:
    CONF_DATA = json.load(f)

#LINEへのアクセス情報を入力
LINE_CHANNEL_ACCESS_TOKEN = CONF_DATA["CHANNEL_ACCESS_TOKEN"]
LINE_CHANNEL_SECRET = CONF_DATA["CHANNEL_SECRET"]

line_bot_api = LineBotApi(LINE_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(LINE_CHANNEL_SECRET)

#ルーティングの設定、POSTリクエストが来たらcallback関数を返す
@app.route("/callback", methods=['POST'])
def callback():
    # リクエストヘッダーからアクセス情報の検証のための値を取得
    signature = request.headers['X-Line-Signature']

    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)
    # アクセス情報を検証し、成功であればhandleの関数を呼び出す
    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)

    return 'OK'

#メッセージを受け取った後にどんな処理を行うかを記述
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text))

if __name__ == "__main__":
    port = int(os.getenv("PORT", 5000))
    app.run(host="0.0.0.0", port=port)

実装の中身を見ていきましょう

@app.route("/callback", methods=['POST'])

ここでは、LINE プラットフォームから送信されたWebhookイベントのルーティングを設定し、LINE APIがアプリに接続できるかを確認します

Webhookの設定はチャネルの「Messeaging API設定」で設定します

herokuの場合は「http://作成したアプリ名.herokuapp.com/」になります

line
@handler.add(MessageEvent, message=TextMessage)

ここではLINEがユーザーからメッセージを受け取った時の処理を記載します

今回は、LineBotApiのメソッドを用いて、リプライ処理を行っています

def handle_message(event):
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text))

リプライの内容は送られたメッセージをそのまま返信用のメッセージとして送っています

ウマたん
ウマたん
リプライの内容を変更することで、受け取ったメッセージに合わせて応答を変えたり出来そうだね!ぜひ試してみよう!

デプロイ

では実際にアプリを動かしてみましょう!

git init
git add .
git commit -m "バージョン名"
git push heroku master

GitコマンドでHerokuにデプロイします

作成したチャネルと友達になってメッセージを送ってみます

line

「テスト」と送ったらちゃんと「テスト」と返ってきましたね!

返信の最初の「メッセージありがとう~」はユーザーからメッセージを受信したときアプリとは別にLINE側で自動で返信されるものです

この返信メッセージはチャネルの「Messeaging API設定」にある「応答メッセージ」で編集できます

line

オフに設定してすると、チャットした内容を返してくれる「オウム返しBot」が完成です!

line
ウマたん
ウマたん
簡単なものだけど、実際に返答が返ってくると嬉しい!(笑)

Python×LINE まとめ

Pythonでコードを書きながら、LINEで自動返信するアプリを学んでいきました

今回は送られたメッセージをそのまま返信する簡単な仕組みでしたが、「LINEの設定」~「アプリのデプロイ」まで一通り理解を掴めたらうれしいです

今回学んだことを応用することで企業のQ&Aボットのような実用性の高いものを作ることが出来るので是非試してみてください!

今回使ったFlaskに関して勉強したい方は以下の講座をぜひチェックしてみてください!

【実践】ビジネスケースとつなげてPythonで出来ること5つを学べる3日間集中コース

Udemy python
【オススメ度】
【講師】ウマタン
【時間】3.5時間
【レベル】初級~中級

Pythonで出来ることのうち以下の5つを網羅して学んでいきます。

・データ集計・加工・描画
・機械学習を使ったモデル構築
・Webスクレイピング
・APIの利用
・Webアプリケーション開発

\ただいま激安セール中/

他にPythonでのWebアプリケーション開発について知りたい方は下記の記事がオススメです!

Webアプリ開発
【入門初心者向け】PythonのフレームワークでWebアプリを開発する方法を徹底解説!当サイト【スタビジ】の本記事では、PythonのWebアプリケーションフレームワークを用いてWebアプリを開発していく方法を徹底解説していきます。実際にDjangoでの実装とFlaskでの実装をおこなっていったあと、勉強法についても見ていきましょう!...
スタビジアカデミーでデータサイエンスをさらに深く学ぼう!
スタアカトップ

スタビジのコンテンツをさらに深堀りしたコンテンツが動画と一緒に学べるスクールです。

プレミアムプランでは私がマンツーマンで伴走させていただきます!ご受講お待ちしております!

スタビジアカデミーはこちら