12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import json
- import os
- import tempfile
- from fastapi import Request
- import requests
- from fastapi import APIRouter
- from pydantic import BaseModel
- from sqlalchemy import text
- from starlette.responses import FileResponse, HTMLResponse
- from common.log import log
- from app.gpt.service.intent import get_intent, ali_trans_success
- from core.templates import templates
- from database.db_mysql import async_db_session
- router = APIRouter()
- class Result(BaseModel):
- error: int = 0
- msg: str = ""
- class Response(BaseModel):
- result: Result = Result(error=0, msg="")
- @router.get("/recordlist", response_class=HTMLResponse)
- async def record_list(request: Request):
- async with async_db_session() as db:
- query = text("select * from records order by id desc")
- records = await db.execute(query)
- return templates.TemplateResponse(
- request=request, name="record_list.html", context={"records": records.fetchall()}
- )
- @router.get("/recordfile", summary="录音文件转发")
- async def record_file(filepath: str):
- url = "http://xycc.ascrm.cn/recordFile/download?file=" + filepath
- log.info("mp3 url: " + url)
- response = requests.get(url)
- response.raise_for_status() # 检查请求是否成功
- temp_dir = tempfile.mkdtemp(suffix='_xycc', prefix='record_')
- # 提取文件名
- file_name = os.path.basename(filepath)
- file_path = os.path.join(temp_dir, file_name)
- with open(file_path, 'wb') as f:
- f.write(response.content)
- return FileResponse(file_path, media_type="application/octet-stream", filename=file_name)
- @router.post("/ali_trans_callback", summary="阿里云录音文件识别回调地址")
- async def ali_trans_callback(body: dict):
- log.info(json.dumps(body, indent=4))
- await ali_trans_success(body)
- return Response()
- @router.post("/intent", summary="用户意图判断")
- async def user_intent(body: dict):
- log.info(json.dumps(body, indent=4))
- if 'notify' in body:
- intent = await get_intent(body)
- else:
- return Response(result=Result(error=1, msg="notify not found"))
- return Response()
|