Spaces:
No application file
No application file
File size: 2,314 Bytes
67e02e2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
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
@app.post("/webhook")
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")
|