-
Notifications
You must be signed in to change notification settings - Fork 2
/
app.py
47 lines (37 loc) · 1.28 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import os
import dotenv
import logging
import openai
from fastapi import FastAPI, Request
from fastapi.exceptions import HTTPException
from linebot import LineBotApi, WebhookHandler
from linebot.models import MessageEvent, TextSendMessage, TextMessage
from linebot.exceptions import InvalidSignatureError
# 環境変数を読み込む
dotenv.load_dotenv()
channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN')
channel_secret = os.getenv('LINE_CHANNEL_SECRET')
openai_api_key = os.getenv('OPENAI_API_KEY')
app = FastAPI()
logger = logging.getLogger('uvicorn')
# LINE APIの設定
linebot = LineBotApi(channel_access_token)
handler = WebhookHandler(channel_secret)
# OpenAI APIの設定
openai.api_key = openai_api_key
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.post("/callback")
async def callback(request: Request):
body = await request.body()
logger.info(body.decode())
try:
handler.handle(body.decode(), request.headers['x-line-signature'])
except InvalidSignatureError:
raise HTTPException(status_code=400, detail='InvalidSignatureError')
return 'ok'
@handler.add(MessageEvent, TextMessage)
def handle_message(event):
res_message = TextSendMessage(event.message.text)
linebot.reply_message(event.reply_token, res_message)