Security Record

セキュリティ全般に関する情報を発信しています

Python(Flask)とA3RT Talk APIを使ってLINEのチャットボットを作る

概要

FlaskとMessaging API、あとリクルートが無料で配布しているA3RT Talk APIを使用して、LINEのチャットボットを作成しました。

実装

各種API KEYの発行

A3RT Talk API https://a3rt.recruit-tech.co.jp/product/talkAPI/

LINE Developers Messaging API https://developers.line.biz/ja/

各モジュールをインストール

pip install python-dotenv
pip install flask
pip install flask_ngrok
pip install line-bot-sdk
pip install pya3rt

設定ファイル

A3RT_API_KEY = XXXXXXXXXXXXXXXXXXXX
CHANNEL_ACCESS_KEY = XXXXXXXXXXXXXXXXXXXX
CHANNEL_SECRET_KEY = XXXXXXXXXXXXXXXXXXXX

Pythonのソースコード

flask_ngrokモジュールをインストールすることで一時的なURLが発行され、 ローカル環境でもAPI通信の実装ができるようになる。

from flask import Flask, request, abort
from flask_ngrok import run_with_ngrok
from dotenv import load_dotenv
from linebot import LineBotApi, WebhookHandler
from linebot.api import LineBotApi
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent, TextMessage, TextSendMessage
import pya3rt
import os

app = Flask(__name__)

run_with_ngrok(app)
load_dotenv()

A3RT_API_KEY       = os.environ['A3RT_API_KEY']
CHANNEL_ACCESS_KEY = os.environ['CHANNEL_ACCESS_KEY']
CHANNEL_SECRET_KEY = os.environ['CHANNEL_SECRET_KEY']
linebot_api = LineBotApi(CHANNEL_ACCESS_KEY)
handler = WebhookHandler(CHANNEL_SECRET_KEY)



@app.route('/callback', methods=['POST'])
def callback():
  signature = request.headers['X-Line-Signature']
  body = request.get_data(as_text=True)
  try:
    handler.handle(body, signature)
  except InvalidSignatureError:
    abort(400)
  return 'OK'



@handler.add(MessageEvent, message=TextMessage)
def handle_massage(event):
  ai_message = talk_api(event.message.text)
  linebot_api.reply_message(event.reply_token, TextMessage(text=ai_message))



def talk_api(word):
  client = pya3rt.TalkClient(A3RT_API_KEY)
  replay_message = client.talk(word)
  return replay_message['results'][0]['reply']


if __name__ == '__main__':
  app.run()

gitHub

https://github.com/ysk/python_lineBot

取り急ぎ自分の忘備録として書きなぐった状態ですが、 誰かの参考になるかもしれないので、この状態で公開します。

上記ソースコードに色々機能を加えていこうと思う。