Содержание

!/usr/bin/php -q

<?php

Требуется пакет SOX

#Пример вызова из dialplan

;Voice Module

exten => _504,1,Answer

exten => _504,n,Record(/tmp/${UNIQUEID}.wav,3,20);

exten => _504,n,AGI(yandex-voice2.php,/tmp/${UNIQUEID});

exten => _504,n,NoOp(${TEXT});

exten => _504,n,Hangup

#получаем переменные из AGI $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 — произвольный текст, заметки и т.д. Вариант применения: переводим в текст сообщение голосовой почты и отправляем его

• general — web поисковые запросы, не могу придумать к чему это можно применить в данном контексте;

• maps — адреса, GEO-точки (название баров, автозаправочные станции, гостиницы и так далее), и т.д.;

• music — названия песен, музыкальных групп и т.д.

$topic = «freeform»;

#$lang = 'ru-RU' — язык на котором будет происходить распознавание, на данный момент поддерживается русский 'ru-RU' и турецкий 't $lang = «ru-RU»;

#генерация рандомного ID. $randtoken=rand(1,1000); $uuid=md5($randtoken);

перекодируем файл в формат яндекса

system('sox '.$filename.'.wav -r 16000 -b 16 -c 1 '.$filename.'-pcm.wav');

#отсылаем файл и получаем в ответ xml

$cmd = exec('curl –form-string «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);

дербаним регекспом ответ сервера, выдёргиваем первое значение как наиболее релевантное

$resxml = implode($xml); if (pregmatch('!<variant .>(.)</variant>!si', $resxml, $arr)){ $voicetext = $arr[1];

 }

else $voice_text='';

###############

if (intval(substrcount($voicetext, 'оператор')) > 0){

 $ress = 1; }		#если в результатах есть слово «оператор», то в диалплан возвращаем 1

elseif (intval(substrcount($voicetext, 'заказ')) > 0){

 $ress = 2;} 		#если в результатах есть слово «заказ», то в диалплан возвращаем 2

elseif (intval(substrcount($voicetext, 'секретарь')) > 0){

 $ress = 3;} 		#если в результатах есть слово «секретарь», то в диалплан возвращаем 3

elseif (intval(substrcount($voicetext, 'менеджер')) > 0){

 $ress = 4;}		#если в результатах есть слово «менеджер», то в диалплан возвращаем 4

else

 {$ress = 0;} 	#если совпадения не найдено, то 0

#####################

#передаём ответ от скрипта в поток ввода echo 'SET VARIABLE TEXT «'.$ress.'»'.«\n»; fgets(STDIN); echo 'VERBOSE («'.$ress.'»)'.«\n»; fgets(STDIN); exit(0); ?>

DokuWiki Appliance - Powered by TurnKey Linux