概要
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
設定ファイル
各種キーを.envファイルに設定する(.envは必ず.gitignoreする)
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
取り急ぎ自分の忘備録として書きなぐった状態ですが、
誰かの参考になるかもしれないので、この状態で公開します。
上記ソースコードに色々機能を加えていこうと思う。