import os from dotenv import load_dotenv from fastapi import HTTPException, status from google.cloud import dialogflowcx_v3beta1 as dialogflow from google.api_core.client_options import ClientOptions from app.core.config import settings os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = settings.GOOGLE_APPLICATION_CREDENTIALS PROJECT_ID = settings.PROJECT_ID LOCATION = settings.LOCATION # Vị trí agent của bạn AGENT_ID = settings.AGENT_ID LANGUAGE_CODE = settings.LANGUAGE_CODE def chatbot_response( session_id: str, texts: list ): """Gửi văn bản đến Dialogflow CX và nhận phản hồi""" try: endpoint = f"{LOCATION}-dialogflow.googleapis.com" client_options = ClientOptions(api_endpoint=endpoint) client = dialogflow.SessionsClient(client_options=client_options) session_path = f"projects/{PROJECT_ID}/locations/{LOCATION}/agents/{AGENT_ID}/sessions/{session_id}" extracted_texts = [] all_chip_options = [] for text in texts: text_input = dialogflow.TextInput(text=text) query_input = dialogflow.QueryInput(text=text_input, language_code=LANGUAGE_CODE) request = dialogflow.DetectIntentRequest( session=session_path, query_input=query_input ) response = client.detect_intent(request=request) query_result = response.query_result for message in query_result.response_messages: if hasattr(message, "text") and message.text.text: extracted_texts.extend(message.text.text) chip_opttion = [] if hasattr(message, "payload") and message.payload: payload_dict = dict(message.payload) if "richContent" in payload_dict: rich_content = payload_dict["richContent"] for item_group in rich_content: for item in item_group: if item.get("type") == "chips": options = item.get("options", []) chip_opttion.extend([opt["text"] for opt in options]) all_chip_options.append(chip_opttion) response = {"text": extracted_texts, "payload": all_chip_options} return response except Exception as e: raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(e))