12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- from fastapi import FastAPI, Request, BackgroundTasks
- from fastapi.responses import JSONResponse
- from pydantic import BaseModel
- from utils import send_message,llm_reply_to_text,handle_image_message,get_llm_response,send_audio_message,fetch_media,text_to_speech,llm_reply_to_text_v2,audio_conversion
- import os
- import requests
- import httpx
- from dotenv import load_dotenv
- #from utils import handle_image_message
- load_dotenv()
- app = FastAPI()
- ACCESS_TOKEN = os.getenv("ACCESS_TOKEN")
- AGENT_URL = os.getenv("AGENT_URL")
- GROQ_API_KEY = os.getenv("GROQ_API_KEY")
- class WhatsAppMessage(BaseModel):
- object: str
- entry: list
- # @app.get("/webhook")
- # async def verify_webhook(request: Request):
- # mode = request.query_params.get("hub.mode")
- # token = request.query_params.get("hub.verify_token")
- # challenge = request.query_params.get("hub.challenge")
- # print(mode)
- # print(token)
- # print(challenge)
- # # if mode and token and mode == "subscribe" and token == "1234":
- # # return {"hub_verfiy_mode":mode,"hub_verify_token":token, "hub_verify_challange":challenge }
- # # return token
- # return int(challenge)
- # # return {"error": "Invalid verification token"}
- @app.post("/webhook")
- async def webhook_handler(request: Request, background_tasks: BackgroundTasks):
- data = await request.json()
- message_data = WhatsAppMessage(**data)
-
- change = message_data.entry[0]["changes"][0]["value"]
- print(change)
- if 'messages' in change:
- message = change["messages"][-1]
- user_phone = message["from"]
- print(message)
- if "text" in message:
- user_message = message["text"]["body"].lower()
- print(user_message)
- background_tasks.add_task(llm_reply_to_text_v2, user_message, user_phone,None,None)
- elif "image" in message:
- media_id = message["image"]["id"]
- print(media_id)
- caption = message["image"].get("caption", "")
- # background_tasks.add_task(handle_image_message, media_id, user_phone, caption)
- background_tasks.add_task(llm_reply_to_text_v2,caption,user_phone,media_id,'image')
- elif message.get("audio"):
- media_id = message["audio"]["id"]
- print(media_id)
- path = await audio_conversion("",media_id,'audio')
- # Send final audio reply
- print(user_phone)
- await send_audio_message(user_phone, path)
- return JSONResponse(content={"status": "ok"}), 200
|