try / chatbot_schedule.py
asiaao's picture
Update chatbot_schedule.py
4fceae1 verified
import os
import openai
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
import pickle
import dateparser
# Load OpenAI API key
openai.api_key = os.getenv('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') # Replace with your actual API key for testing if needed
SCOPES = ['https://www.googleapis.com/auth/calendar']
def authenticate_google_calendar():
"""Authenticate and return the Google Calendar API service."""
creds = None
if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
'credentials.json', SCOPES
)
creds = flow.run_local_server(port=0)
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
return build('calendar', 'v3', credentials=creds)
def parse_schedule_input(user_input):
"""Parse natural language input for scheduling details."""
prompt = f"Extract an event title, date, and time from this input: '{user_input}'. Return in JSON format as {{'title': '...', 'date': 'YYYY-MM-DD', 'time': 'HH:MM'}}."
response = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt,
max_tokens=100,
temperature=0.3,
)
try:
details = eval(response['choices'][0]['text'].strip()) # Parse string to dictionary
return details
except Exception as e:
raise ValueError("Error parsing schedule input: " + str(e))
def add_event_to_calendar(service, event_details):
"""Add a parsed event to the Google Calendar."""
try:
event = {
'summary': event_details['title'],
'start': {
'dateTime': f"{event_details['date']}T{event_details['time']}:00",
'timeZone': 'UTC', # Adjust to user-specific timezone if needed
},
'end': {
'dateTime': f"{event_details['date']}T{event_details['time']}:00",
'timeZone': 'UTC',
},
}
created_event = service.events().insert(calendarId='primary', body=event).execute()
return f"Event created: {created_event.get('htmlLink')}"
except Exception as e:
return f"Failed to add event: {str(e)}"
def schedule_bot_response(user_input):
"""Main function to process user input and schedule a task."""
try:
service = authenticate_google_calendar()
event_details = parse_schedule_input(user_input)
confirmation = add_event_to_calendar(service, event_details)
return confirmation
except Exception as e:
return f"An error occurred: {str(e)}"