@ -23,12 +23,13 @@ router = APIRouter(
@router . post ( " /upload " )
async def upload_external_audio (
file : UploadFile = FastAPIFile ( . . . ) ,
callback_url : str = Form ( . . . , description = " URL для отправки результата распознавания (FileAudioAPI вызовет GigaAM и затем отправит результат на этот URL) " ) ,
callback_url : str = Form ( None , description = " URL для отправки результата распознавания (опционально). Если передан — FileAudioAPI вызовет GigaAM и затем отправит результат на этот URL. " ) ,
db : Session = Depends ( get_db )
) :
"""
Загрузка внешнего аудиофайла . Файл сохраняется в общей папке , после чего
автоматически отправляется на распознавание в GigaAM . Результат придёт на callback_url .
Загрузка внешнего аудиофайла . Файл сохраняется в общей папке .
Если передан callback_url — автоматически отправляется на распознавание в GigaAM ,
а результат придёт на callback_url .
"""
# Проверка расширения файла
@ -78,8 +79,9 @@ async def upload_external_audio(
detail = f " Error creating database record: { str ( e ) } "
)
# Запрос на распознавание в GigaAM (файл уже в общей папке по имени safe_name)
task_id , recognition_error = send_to_recognition ( filename = safe_name , callback_url = callback_url . strip ( ) )
# Всегда запускаем распознавание в GigaAM; callback_url передаём только если передан
cb = callback_url . strip ( ) if ( callback_url and callback_url . strip ( ) ) else None
task_id , recognition_error = send_to_recognition ( filename = safe_name , callback_url = cb )
# Ответ: запись аудио + данные по постановке в очередь распознавания
result = {
@ -97,7 +99,7 @@ async def upload_external_audio(
result [ " recognition_error " ] = recognition_error
return result
def send_to_recognition ( filename : str , callback_url : str ) - > tuple :
def send_to_recognition ( filename : str , callback_url : str | None = None ) - > tuple :
"""
Отправка аудиофайла на распознавание в GigaAM .
Файл должен уже лежать в общей папке под именем filename .
@ -107,9 +109,12 @@ def send_to_recognition(filename: str, callback_url: str) -> tuple:
"""
try :
gigaam_url = f " { GIGAAM_API_URL . rstrip ( ' / ' ) } /api/call/external/process "
payload = { " filename " : filename }
if callback_url :
payload [ " callback_url " ] = callback_url
resp = requests . post (
gigaam_url ,
json = { " filename " : filename , " callback_url " : callback_url } ,
json = payload ,
timeout = 15 ,
)
if resp . status_code == 202 :