|
|
|
|
|
from flask import Flask, request, abort |
|
from linebot import LineBotApi, WebhookHandler |
|
from linebot.exceptions import InvalidSignatureError |
|
from linebot.models import MessageEvent, TextMessage, TextSendMessage |
|
import os |
|
import google.generativeai as genai |
|
|
|
|
|
|
|
LINE_TOKEN = os.getenv('LINE_TOKEN') |
|
LINE_SECRET = os.getenv('LINE_SECRET') |
|
GEMINI_API_KEY = os.getenv('GEMINI_API_KEY') |
|
|
|
|
|
|
|
|
|
app = Flask(__name__) |
|
|
|
api = LineBotApi(LINE_TOKEN) |
|
handler = WebhookHandler(LINE_SECRET) |
|
genai.configure(api_key=GEMINI_API_KEY) |
|
|
|
|
|
|
|
|
|
|
|
@app.get("/") |
|
def hello(): |
|
return 'Hello, this is Gemini!' |
|
|
|
|
|
|
|
|
|
|
|
@app.post("/") |
|
def callback(): |
|
print(request.headers) |
|
signature = request.headers['X-Line-Signature'] |
|
body = request.get_data(as_text=True) |
|
print(body) |
|
app.logger.info("Request body: " + body) |
|
|
|
try: |
|
handler.handle(body, signature) |
|
except InvalidSignatureError: |
|
print("電子簽章錯誤,請檢查密鑰是否正確!") |
|
abort(400) |
|
|
|
return 'OK' |
|
|
|
|
|
|
|
|
|
@handler.add(MessageEvent, message=TextMessage) |
|
def handle_message(event): |
|
|
|
user_text = event.message.text.strip() |
|
|
|
|
|
model = genai.GenerativeModel(model_name="gemini-1.5-flash") |
|
response = model.generate_content(user_text) |
|
response_text = response.candidates[0].content.parts[0].text |
|
|
|
|
|
api.reply_message(event.reply_token, TextSendMessage(text=response_text)) |
|
|
|
|
|
if __name__ == "__main__": |
|
app.run(host='0.0.0.0', port = 7860) |
|
|
|
|