Kromě zasílání nahraných hovorů je možné ukládat nahrané hovory náš server včetně základních informací o hovoru.
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í. 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.
Pokud používáte ftp,ftps a sftp, lze další informace vyčíst se jména souboru. se posila pouze jmeno souboru
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
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; } ?>