Возникла задача сделать веб сервис для IP АТС Freeswitch, который будет возвращать текст в виде wav/mp3 потока, что, собственно и было сделано.
Можно создать несколько потоков (по URL) определив в каждом нужный голос и его основные параметры. Каждый поток асинхронный. Каждый запрос обрабатывается асинхронно.
У службы следующие параметры командной строки:
- /config – GUI для настройки потоков.
- /app – запустить службу в режиме приложения (можно тестить).
- /install – установить в качестве службы Windows.
- /uninstall – удалить службу.
Имя службы: ttshttp.
Использование
Первым делом настраиваем потоки, запустив службу с командной строкой /config. Нажимаем добавить поток и указываем все параметры:
Все параметры надеюсь ясны. Единственное что может стать трудностью это URL. Вот примеры:
- http://*:7789/maxim/ – слушать все входящие подключения на любой IP сервера, порт 7789 и путь /maxim/, при это URL http://192.168.1.2:7789/tatyana/ будет проигнорирован службой;
- http://192.168.1.2:7789/maxim/ – привязывает ожидание запросов к определенному IP сервера на котором запущена служба (если несколько IP);
- На дном порту могут висеть два потока, они должны различаться по путям. Например, http://*:7789/maxim/ и http://*:7789/tatyana/;
Теперь пример запроса:
1 |
http://127.0.0.1:7789/maxim/?text=Ура! все работает&rate=0&vol=100 |
, где:
- text – это текст сообщения, которое необходимо обработать;
- rate – (необязательный) скорость воспроизведения. Значения могут быть от -10 до 10;
- vol – (необязательный) громкость.
Протестировать можно в любом браузере.
Freeswitch и text-to-speech
Служба была написана для использования совместно с Freeswitch, поэтому вот пример использования:
1 2 3 4 5 6 7 |
<extension name="test"> <condition field="destination_number" expression="^(12345)$"> <action application="answer"/> <action application="playback" data="http://192.168.7.8:17778/maxim/playit.mp3?text=${url_encode Поздравляю, ${caller_id_name}! Ваш номер: ${caller_id_number}. Тестовый звонок прошел успешно."/> <action application="hangup"/> </condition> </extension> |
При вызове номера 12345 freeswitch проговорит нужную фразу.
Сама служба здесь: ttshttp (x86, x64)
Для работы нужен Framework 4.0 и установленный голос, если стандартный голос Windows не подходит. Распространяется как есть. Если что-то будет не сложно доделать могу доделать.
UPD: Добавлена опция формата выдачи – WAV/MP3 и MIME тип возвращаемый сервисом. Обновленная служба по той же ссылке.
UPD (2017-09-30): Добавлена обработка HEAD, которая возвращает что файл был изменен и в основной запрос возвращаются заголовки блокирующие кеширование. Исправлена обработка запроса, которая могла закрыть подключение до конца отправки данных, что приводило к “обрыву” файла.
Добрый день. А как с вами связаться по е-мейл?
Я сейчас попробую потестировать это приложение, а вообще я понял что вы можете сделать и нечто посерьезнее, например rss-читалку…
Этот проект разрабатывался для IP АТС. Ничего серьезнее пока не понадобилось. Если что-то будет добавляться, то проект будет обновляться на сайте.
Ясно. Хорошо, спасибо. Интересный модуль.
А я пробовал искать Rss-приемник с передачей в Sapi, и не смог найти ни одного такого решения. Хотя на Гитхабе и в линукс-конференциях попадались с простой реализацией. А вот под винду – увы и ах.