Инструменты пользователя

Инструменты сайта


voice2

**Это старая версия документа!**

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

                    #дербаним регекспом ответ сервера, выдёргиваем первое значение как наиболее релевантное
                    $asr_res = implode($xml);
                    if (preg_match('!<variant .*?>(.*)</variant>!si', $asr_res, $arr)) $voice_text = $arr[1];
                        else $voice_text='';

                            if (intval(substr_count($asr_res, 'оператор')) > 0) {
                            $ress = 1; #если в результатах есть слово "оператор", то в диалплан возвращаем 1;
                            } elseif (intval(substr_count($asr_res, 'заказ')) > 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);
voice2.1534847095.txt.gz · Последнее изменение: 2018/08/21 13:24 (внешнее изменение)

DokuWiki Appliance - Powered by TurnKey Linux