Table of Contents

Uploadování nahraných souborů

Kromě zasílání nahraných hovorů je možné ukládat nahrané hovory náš server včetně základních informací o hovoru.

Nastavení

Ve webovém rozhraní u nastavení linky vložíte do políčka `Email pro zasílání nahraných hovorů [?]:` URL kam se bude soubor uploadovat. Součástí URL je povinné přihlašovací jméno a heslo i nastavení. Vyvarujte se ve jménu a heslu znaků jako “! @ a / :” a podobně, použití těchto znaků nemusí být řádně ošetřeno. Nastavit lze email a formát v jakém se mají soubory předávat, nastavení je odděleno znakem “!”

(https|ftps|sftp)://user:pass@host[:port][/path][!email][![wav|mp3|opus|ogg]]

Příklady:

https://user:password@upload.mojefirma.cz/api/recieve.php
https://user:password@upload.mojefirma.cz/api/recieve.php!admin@mojefirma.cz!wav
https://user:password@upload.mojefirma.cz/api/recieve.php!opus

ftps://user:password@upload.mojefirma:5121
ftps://user:password@upload.mojefirma:5121!admin@mojefirma.cz!mp3
ftps://user:password@upload.mojefirma:5121!mp3

Lze zadat více URL nebo email pro zaslání + URL, či více emailů. Jako oddělovač se použije čárka.

Uploadovací skript se u nás spouští každých 30s. Pokud se uploadování nezdaří, je poslán email a další hodinu je toto uri vynecháváno. Po hodině se pokus zopakuje. Neodeslané nahrávky čekají u nás ve frontě a jsou tak dodatečně poslány po opravení problému na straně příjemce.

Parametry - další informace o hovoru

Pokud používáte ftp,ftps a sftp, lze další informace vyčíst se jména souboru. se posila pouze jmeno souboru

Změna z 9. 10. 2026: název souboru už neobsahuje jméno linky, jen její číslo.

Nový tvar: datum_čas-délka-číslo_linky-volající-volaný.přípona
Příklad: 2026.10.09_15-10-12-77-666666-222222222-799799799.mp3

Pole line_name v HTTP(S) POST se nemění (např. 666666 (testovaci)).

2021.05.31_15-10-12-77-666666_testovaci-222222222-799799799.mp3 #datum_cas_delkaHovoru(zvednutá část)_linka_jmeno-linky_src-dst.mp3

U https jsou pro snadnější zařazení souboru předávány jednotlivé informace ve zvláštních parametrech.

record=2021.05.31_15-10-12-77-666666_testovaci-222222222-799799799.mp3      #datum_cas_delka_hovoru(zvednutá část)_linka_jmeno-linky_src_dst.mp3
callid=84263f404302957e0e31fd87e54                                          #jedinecne id hovoru
duration=77                                                                 #delka hovoru v s
line_name=666666 (testovaci)                                                #cislo linky (jmeno linky nastavene u linky )
time=2021-05-31 15:10:12                                                    #datum a cas
from=222222222                                                              #cislo volajiciho
to=799799799                                                                #cislo volaneho

Php script

Příklad skriptu pro příjem nahraných souborů na webovém serveru. Pokud používáte ftp nebo sftp žádný skript nepotřebujete, ale ne každý poskytovatel podporuje vytvoření více ftp nebo sftp účtů s omezenými právy pro čtení.

https://github.com/jakubboucek/odorik-api-client-php/blob/master/examples/upload-recordings.php

<?
header("Content-Type:application/json");
 
// NASTAVENI
//$valid_ips = array('185.14.232.1','185.183.8.128','2a00:1ed0:1:1800:7:39:5200:1');		// Povolene IP
$max_file_size = 20 * 1024 * 1024; 								// Max. velikost souboru 20 MB
$valid_extensions = array('mp3','MP3','ogg','OGG','wav','WAV','opus','OPUS');		// Povolene typy souboru
$inputname = 'record';											// Nazev vstupu se souborem
$dir = 'uploads/';												// Složka pro nahravani souboru
$user = 'Testuser';												// uzivatelske jmeno
$pass = 'TestPass1';											// heslo
 
// kontrola IP
/*if(!in_array($_SERVER['REMOTE_ADDR'],$valid_ips)){
	response(401,'IP not allowed');
}*/
 
// jednoduche zabezpeceni
if(($_SERVER['PHP_AUTH_USER'].$_SERVER['PHP_AUTH_PW'] != $user.$pass)){
	response(401,'Unauthorized');
}
 
// pokud neni v POSTu pozadovany soubor
if(!$_FILES[$inputname]){
	response(400,'Chybny pozadavek, pole pro nahravku se musi jmenovat record.');
}
 
// precteme informace o souboru
$file_size = $_FILES[$inputname]['size'];
$file_ext = pathinfo($_FILES[$inputname]['name'], PATHINFO_EXTENSION);  
$file_name = $_FILES[$inputname]['name'];
 
// jednoducha kontrola souboru  
if(empty($file_name)){
	response(400, 'Chybi nazev souboru.');
}
if($file_size > $max_file_size) {
	response(400, 'Velikost souboru presahuje '.round($max_file_size / 1024 / 1024,1).' MB.');
}
if(!in_array($file_ext,$valid_extensions)){
	response(400, 'Nepodporovany format, nahravat lze jen '.implode(', ', $valid_extensions).'.');
}
if(strlen($file_name) > 200) { 
	response(400, 'Prilis dlouhy nazev souboru.');
}
 
// hovory tridime do slozek po rocich, mesicich a dnech
if($_POST['time']){
	// pokud mame cas hovoru, zaradime podle nej
	$year = date('Y',strtotime($_POST['time']));
	$month = date('m',strtotime($_POST['time']));
	$day = date('d',strtotime($_POST['time']));
}else{
	// pokud nemame cas hovoru, zaradime podle aktualniho data nahrani
	$year = date('Y');
	$month = date('m');
	$day = date('d');
}
$dir = $dir.$year.'/'.$month.'/'.$day;
 
// pokud slozka neexistuje, tak ji zalozime
if (!file_exists($dir)) {
	mkdir($dir, 0777, true);
}
 
// presuneme soubor do pozadovane slozky
$upload = move_uploaded_file($_FILES[$inputname]['tmp_name'],$dir.'/'.$file_name);
 
// Prozatim neosetrujeme specialni znaky ani duplicity - prepise se puvodni soubor.
 
// pokud vse probehlo v poradku, pokracujeme
if($upload){
 
	// pouze pro vyvoj, zapiseme si POST pole do souboru
	file_put_contents('post.txt', json_encode($_POST));
 
	// S dalsimi daty z POSTu si pak muzeme spustit vlastni udalost 
	/* LIBOVOLNA UDALOST */
 
	// Vypiseme odpoved, vse ok
	response(200, 'V poradku nahrano.',$_POST);
 
// jinak vypiseme chybu
}else{
	response(500, 'Internal error.');
}
 
// jednoducha funkce na vypisovani odpovedi
function response($code,$description,$data=0){
	$response['code'] = $code;
	$response['description'] = $description;
	if($data){
		$response['post_data'] = $data;
	}
	http_response_code($code);
	echo json_encode($response);
	exit;
}
?>

Pokud chcete uploadovat hovory objednané přes zpětné volání je zde následující omezení

Pokud využíváte možnosti nechat si zasílat nahrávané hovory na vlastní server call_records_upload, a spojujete callbackem dvě čísla, které obě nejsou u Odorik.cz, je hovor prohnat přes SIP jméno, aby se nahrávka proběhla a poslala se na váš serveru. Omezení se netýká zasílání na email. Tedy zřídíte si sip jméno, pomocí API natavíte kam se má směrovat až poté objednáte zpětné volání kdy jedno z čísle bude to sip jméno.

callback

Stereo nahrávky - nahrávky pro zpracování umělou inteligencí

Otázka: Umíte nahrávku uložit ve stereu tak, aby každá strana hovoru byla v samostatném kanálu (volající vlevo, volaný vpravo)? Případně poslat dvě samostatné nahrávky, pro každou stranu jednu

Odpověď: Nahrávky umíme ukládáme ve stereu, každá strana hovoru je v samostatném kanálu: volající vlevo, volaný vpravo. Zapnete to v Uživatelských nastaveních → nastavení účtu → “stereo nahrávání: ano”.

Otázka: Pokud ano, jde to nastavit u doručování e-mailem, nebo jen při uploadu na vlastní server (https/sftp)?

Odpověď: Stereo funguje i při doručování e-mailem, jen ne ve formátu WAV. Pro e-mail doporučujeme formát “Opus (kvalitní)”, který zvolíte tamtéž v položce “formát nahrávaných hovorů”. Kvůli limitu velikosti e-mailu se ale nahrávky delší než cca 20 minut komprimují silněji (cca 8–10 kbit/s). Pokud potřebujete plnou kvalitu i u dlouhých hovorů, použijte upload na vlastní server (https/sftp), kde je k dispozici i WAV.

Otázka: Jaké je vzorkování a bitrate nahrávek při volbě formátu wav a v případě případně opus?

Odpověď: PCM 16 bit, 8000 Hz, 2 kanály (stereo), 256 kbit/s. Opus: stereo, vzorkování 48 kHz (zdrojem nahrávky je telefonní zvuk 8 kHz), proměnný bitrate (VBR). Ve variantě s vyšší kvalitou je průměrně cca 40 kbit/s u nahrávek do cca 20 minut; delší nahrávky se kvůli velikosti souboru kódují na cca 8–10 kbit/s. Úsporná varianta má cca 10 kbit/s. Nemá ale smysl se zaměřovat se na vyšší kvalitu 48 kHZ, když telefonní hovory mají standardně jen 8 KHZ.