Spaces:
No application file
No application file
import os | |
import time | |
import requests | |
from fastapi import FastAPI, Request | |
from fastapi.responses import PlainTextResponse | |
# Initialize FastAPI (used by Gradio Spaces under the hood) | |
app = FastAPI() | |
# Load credentials from environment variables | |
OPENAI_API_KEY = os.environ["OPENAI_API_KEY"] | |
ASSISTANT_ID = "asst_5gQR21fOsmHil11FGBzEArA7" | |
TWILIO_SID = os.environ["TWILIO_SID"] | |
TWILIO_AUTH_TOKEN = os.environ["TWILIO_AUTH_TOKEN"] | |
TWILIO_NUMBER = "whatsapp:+14155238886" # Twilio sandbox number | |
async def receive_message(request: Request): | |
form_data = await request.form() | |
user_input = form_data.get("Body") | |
user_number = form_data.get("From") | |
# 1. Create a new assistant thread | |
thread = requests.post( | |
"https://api.openai.com/v1/threads", | |
headers={"Authorization": f"Bearer {OPENAI_API_KEY}"} | |
).json() | |
thread_id = thread["id"] | |
# 2. Send user message | |
requests.post( | |
f"https://api.openai.com/v1/threads/{thread_id}/messages", | |
headers={"Authorization": f"Bearer {OPENAI_API_KEY}"}, | |
json={"role": "user", "content": user_input} | |
) | |
# 3. Run assistant | |
run = requests.post( | |
f"https://api.openai.com/v1/threads/{thread_id}/runs", | |
headers={"Authorization": f"Bearer {OPENAI_API_KEY}"}, | |
json={"assistant_id": ASSISTANT_ID} | |
).json() | |
# 4. Wait for run to complete | |
while True: | |
run_status = requests.get( | |
f"https://api.openai.com/v1/threads/{thread_id}/runs/{run['id']}", | |
headers={"Authorization": f"Bearer {OPENAI_API_KEY}"} | |
).json() | |
if run_status["status"] == "completed": | |
break | |
time.sleep(2) | |
# 5. Fetch response | |
messages = requests.get( | |
f"https://api.openai.com/v1/threads/{thread_id}/messages", | |
headers={"Authorization": f"Bearer {OPENAI_API_KEY}"} | |
).json() | |
reply = messages["data"][0]["content"][0]["text"]["value"] | |
# 6. Send reply via Twilio back to WhatsApp | |
requests.post( | |
f"https://api.twilio.com/2010-04-01/Accounts/{TWILIO_SID}/Messages.json", | |
auth=(TWILIO_SID, TWILIO_AUTH_TOKEN), | |
data={ | |
"From": TWILIO_NUMBER, | |
"To": user_number, | |
"Body": reply | |
} | |
) | |
return PlainTextResponse("OK") | |