<?php
$agivars = array();
while (!feof(STDIN)) {
$agivar = trim(fgets(STDIN));
if ($agivar === )
break;
$agivar = explode(':', $agivar);
$agivars[$agivar[0]] = trim($agivar[1]);
}
extract($agivars);
$filename = $_SERVER["argv"][1];
#ключ от yandex speech kit можно получить на:
#https://developer.tech.yandex.ru/
#требуется учётка яндекса
$key = '6be78e3c-6184-4f83-b18d-cf33c6727735';
#$topic = 'maps' — тема для распознавания, возможны следующие варианты:
#• freeform — произвольный текст, заметки и т.д. Вариант применения: переводим в текст сообщение голосовой почты и отправляем его на email или виде SMS.
#• general — web поисковые запросы, не могу придумать к чему это можно применить в данном контексте;
#• maps — адреса, GEO-точки (название баров, автозаправочные станции, гостиницы и так далее), и т.д.;
#• music — названия песен, музыкальных групп и т.д.
$topic = «freeform»;
#$lang = 'ru-RU' — язык на котором будет происходить распознавание, на данный момент поддерживается русский 'ru-RU' и турецкий 'tr-TR', причем турецкий поддерживается только для тем «general» и «maps»;
$lang = «ru-RU»;
#генерация рандомного ID
$randtoken=rand(1000);
$uuid=md5($randtoken);
#перекодируем файл в формат яндекса
system('sox '.$filename.'.wav -r 16000 -b 16 -c 1 '.$filename.'-pcm.wav');
#отсылаем файл и получаем в ответ xml
$cmd = exec('curl -F «Content-Type=audio/x-pcm;bit=16;rate=16000» -F «audio=@'.$filename.'-pcm.wav» asr.yandex.net/asr_xml\?key='.$key.'\&uuid='.$uuid .'\&topic='.$topic.'\&lang='.$lang, $xml);
#дербаним регекспом ответ сервера, выдёргиваем первое значение как наиболее релевантное
$asrres = implode($xml);
if (pregmatch('!<variant .?>(.)</variant>!si', $asrres, $arr)) $voicetext = $arr[1];
else $voice_text=
;
if (intval(substrcount($asrres, 'оператор')) > 0) { $ress = 1; #если в результатах есть слово «оператор», то в диалплан возвращаем 1; } elseif (intval(substrcount($asrres, 'заказ')) > 0) { $ress = 2; #если в результатах есть слово «заказ», то в диалплан возвращаем 2;
} elseif (intval(substr_count($asr_res, 'секретарь')) > 0) { $ress = 3; #если в результатах есть слово "секретарь", то в диалплан возвращаем 3; } else { $ress = 0; #если совпадения не найдено, то 0; }
#передаём ответ от скрипта в поток ввода echo 'SET VARIABLE TEXT "'.$ress.'"'."\n"; fgets(STDIN); echo 'VERBOSE ("'.$ress.'")'."\n"; fgets(STDIN); exit(0);