|
from flask import Flask, request, abort |
|
import os |
|
import google.generativeai as genai |
|
|
|
from linebot.v3 import ( |
|
WebhookHandler |
|
) |
|
|
|
from linebot.v3.exceptions import ( |
|
InvalidSignatureError |
|
) |
|
|
|
from linebot.v3.messaging import ( |
|
Configuration, |
|
ApiClient, |
|
MessagingApi, |
|
ReplyMessageRequest, |
|
TextMessage |
|
) |
|
|
|
from linebot.v3.webhooks import ( |
|
MessageEvent, |
|
TextMessageContent |
|
) |
|
|
|
app = Flask(__name__) |
|
|
|
configuration = Configuration(access_token=os.environ.get("ACCESS_TOKEN")) |
|
handler = WebhookHandler(os.environ.get("CHANNEL_SECRET")) |
|
|
|
genai.configure(api_key=os.environ.get("GOOGLE_API_KEY")) |
|
model = genai.GenerativeModel('gemini-pro') |
|
|
|
|
|
@app.route("/") |
|
def home(): |
|
return {"message": "Line Webhook Server"} |
|
|
|
|
|
@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) |
|
|
|
|
|
try: |
|
handler.handle(body, signature) |
|
except InvalidSignatureError: |
|
app.logger.info("Invalid signature. Please check your channel access token/channel secret.") |
|
abort(400) |
|
|
|
return 'OK' |
|
|
|
|
|
@handler.add(MessageEvent, message=TextMessageContent) |
|
def handle_message(event): |
|
response = model.generate_content(event.message.text) |
|
print(f"UserID: {event.source.user_id}") |
|
print(f"Q: {event.message.text}") |
|
print(f"A: {response.text}") |
|
with ApiClient(configuration) as api_client: |
|
line_bot_api = MessagingApi(api_client) |
|
line_bot_api.reply_message_with_http_info( |
|
ReplyMessageRequest( |
|
reply_token=event.reply_token, |
|
messages=[TextMessage(text=response.text)] |
|
) |
|
) |
|
|