AforativeBot / app.py
measmonysuon's picture
Update app.py
b1ceab2 verified
raw
history blame
4.03 kB
from flask import Flask, request
import telebot
import os
import requests
import google.generativeai as genai
import tempfile
import logging
import re
from telebot.apihelper import ApiTelegramException
import time
# Replace with your actual API keys and bot token
GOOGLE_API_KEY = 'AIzaSyAYXUMnwmR4nUGDCs97FJJsafcQAPAAuzE'
BOT_TOKEN = '7484321656:AAFaswxTqaSHu_s4jd_pk2Q2OJJWYcWHwAM'
# Initialize the Telegram bot
bot = telebot.TeleBot(BOT_TOKEN)
# Configure logging
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('bot_debug.log'), # Log to a file
logging.StreamHandler() # Also log to console
]
)
logger = logging.getLogger(__name__)
# Configure Google Generative AI
genai.configure(api_key=GOOGLE_API_KEY)
# Create the model
generation_config = {
"temperature": 1,
"top_p": 0.95,
"top_k": 64,
"max_output_tokens": 8192,
"response_mime_type": "text/plain",
}
model = genai.GenerativeModel(
model_name="gemini-1.5-pro",
generation_config=generation_config,
system_instruction="Please respond to user input"
)
chat_session = model.start_chat(
history=[
{"role": "user", "parts": ["hi\n"]},
{"role": "model", "parts": ["Hello! πŸ‘‹ How can I help you today? 😊 \n"]},
{"role": "user", "parts": ["I am looking for photo booth service?"]},
{"role": "model", "parts": ["That's great! πŸŽ‰ I can definitely help you with information about Aforative Media's photo booth services. \n\nTo give you the most relevant information, could you tell me a little more about what you're looking for? ..."]},
{"role": "user", "parts": ["How much for photo booth services?"]},
{"role": "model", "parts": ["You're smart to ask about pricing upfront! πŸ˜‰ \n\nAforative Media's Mr. & Ms. Booth photo booth services start at **USD 390 for a minimum of 2 hours**. ..."]},
{"role": "user", "parts": ["How about videography service?"]},
{"role": "model", "parts": ["You're thinking about capturing the memories on film too? Excellent choice! Videography adds a whole other dimension to remembering special events. \n\nAforative Media offers excellent videography services, and just like their photo booths, their videography packages are competitively priced and flexible. ..."]},
]
)
# Initialize Flask app
app = Flask(__name__)
@app.route(f'/bot{BOT_TOKEN}', methods=['POST'])
def webhook():
"""Handles incoming updates from Telegram."""
try:
json_str = request.get_data(as_text=True)
logger.debug(f"Received update: {json_str}")
update = telebot.types.Update.de_json(json_str)
bot.process_new_updates([update])
return 'ok', 200
except Exception as e:
logger.error(f"Error in webhook: {e}")
return 'error', 500
@bot.message_handler(content_types=['text'])
def handle_text_messages(message):
"""Handles text messages and responds based on predefined questions or Generative AI."""
logger.debug(f"Received message: {message.text} from chat_id {message.chat.id}")
try:
prompt = f"Respond to the user: {message.text}"
response = chat_session.send_message(prompt) # Generate response using text and prompt
response_text = response.text
# Log the response
logger.debug(f"Generated response: {response_text}")
# Send the response to the chat
bot.send_message(message.chat.id, response_text, parse_mode='Markdown')
logger.info(f"Response sent to chat_id {message.chat.id}")
except Exception as e:
logger.error(f"Error during GenAI processing: {e}")
error_message = "Sorry, I can't answer this query right now but I will improve from time to time."
bot.send_message(message.chat.id, error_message, parse_mode='Markdown')
logger.error(f"Error message sent to chat_id {message.chat.id}")
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000)