.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import logging
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
|
||||
from ..models import ExternalConvRequestDTO, DetectIntentResponseDTO
|
||||
from ..models import ConversationRequest, DetectIntentResponse
|
||||
from ..services import ConversationManagerService
|
||||
from ..dependencies import get_conversation_manager
|
||||
|
||||
@@ -11,13 +11,13 @@ logger = logging.getLogger(__name__)
|
||||
router = APIRouter(prefix="/api/v1/dialogflow", tags=["conversation"])
|
||||
|
||||
|
||||
@router.post("/detect-intent", response_model=DetectIntentResponseDTO)
|
||||
@router.post("/detect-intent", response_model=DetectIntentResponse)
|
||||
async def detect_intent(
|
||||
request: ExternalConvRequestDTO,
|
||||
request: ConversationRequest,
|
||||
conversation_manager: ConversationManagerService = Depends(
|
||||
get_conversation_manager
|
||||
),
|
||||
) -> DetectIntentResponseDTO:
|
||||
) -> DetectIntentResponse:
|
||||
"""
|
||||
Detect user intent and manage conversation.
|
||||
|
||||
|
||||
@@ -7,22 +7,29 @@ from ..models.quick_replies import QuickReplyScreen
|
||||
from ..services.quick_reply_content import QuickReplyContentService
|
||||
from ..services.redis_service import RedisService
|
||||
from ..services.firestore_service import FirestoreService
|
||||
from ..dependencies import get_redis_service, get_firestore_service, get_quick_reply_content_service
|
||||
from ..dependencies import (
|
||||
get_redis_service,
|
||||
get_firestore_service,
|
||||
get_quick_reply_content_service,
|
||||
)
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
router = APIRouter(prefix="/api/v1/quick-replies", tags=["quick-replies"])
|
||||
|
||||
|
||||
class QuickReplyUser(BaseModel):
|
||||
telefono: str
|
||||
nombre: str
|
||||
|
||||
|
||||
class QuickReplyScreenRequest(BaseModel):
|
||||
usuario: QuickReplyUser
|
||||
pantallaContexto: str
|
||||
|
||||
model_config = {"populate_by_name": True}
|
||||
|
||||
|
||||
class QuickReplyScreenResponse(BaseModel):
|
||||
responseId: str
|
||||
quick_replies: QuickReplyScreen
|
||||
@@ -33,7 +40,9 @@ async def start_quick_reply_session(
|
||||
request: QuickReplyScreenRequest,
|
||||
redis_service: RedisService = Depends(get_redis_service),
|
||||
firestore_service: FirestoreService = Depends(get_firestore_service),
|
||||
quick_reply_content_service: QuickReplyContentService = Depends(get_quick_reply_content_service)
|
||||
quick_reply_content_service: QuickReplyContentService = Depends(
|
||||
get_quick_reply_content_service
|
||||
),
|
||||
) -> QuickReplyScreenResponse:
|
||||
"""
|
||||
Start a quick reply FAQ session for a specific screen.
|
||||
@@ -56,21 +65,30 @@ async def start_quick_reply_session(
|
||||
session = await firestore_service.get_session_by_phone(telefono)
|
||||
if session:
|
||||
session_id = session.sessionId
|
||||
await firestore_service.update_pantalla_contexto(session_id, pantalla_contexto)
|
||||
await firestore_service.update_pantalla_contexto(
|
||||
session_id, pantalla_contexto
|
||||
)
|
||||
session.pantallaContexto = pantalla_contexto
|
||||
else:
|
||||
session_id = str(uuid4())
|
||||
user_id = f"user_by_phone_{telefono.replace(' ', '').replace('-', '')}"
|
||||
session = await firestore_service.create_session(session_id, user_id, telefono, pantalla_contexto)
|
||||
|
||||
session = await firestore_service.create_session(
|
||||
session_id, user_id, telefono, pantalla_contexto
|
||||
)
|
||||
|
||||
# Cache session
|
||||
await redis_service.save_session(session)
|
||||
logger.info(f"Created quick reply session {session_id} for screen: {pantalla_contexto}")
|
||||
logger.info(
|
||||
f"Created quick reply session {session_id} for screen: {pantalla_contexto}"
|
||||
)
|
||||
|
||||
# Load quick replies
|
||||
quick_replies = await quick_reply_content_service.get_quick_replies(pantalla_contexto)
|
||||
return QuickReplyScreenResponse(responseId=session_id, quick_replies=quick_replies)
|
||||
quick_replies = await quick_reply_content_service.get_quick_replies(
|
||||
pantalla_contexto
|
||||
)
|
||||
return QuickReplyScreenResponse(
|
||||
responseId=session_id, quick_replies=quick_replies
|
||||
)
|
||||
|
||||
except ValueError as e:
|
||||
logger.error(f"Validation error: {e}", exc_info=True)
|
||||
|
||||
Reference in New Issue
Block a user