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í. 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

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;
}
?>