행복한 하루

Asterisk에서 gTTS 연동해 보기(Text To Speak) 본문

Asterisk

Asterisk에서 gTTS 연동해 보기(Text To Speak)

변화의 물결 2023. 4. 28. 11:49

 

 

안녕하세요.

 

  Asterisk에 자동응답 기능 혹은 Text를 Voice로 변환해 주는 기능을 테스트해 보았습니다. Google, MS, Amazon의 좋은 TTS도 있지만, 이것은 사이트 가입해야 하고 호출할 때 APIKEY가 필요하기 때문에 이런 절차가 필요 없는 무료 gTTS 엔진을 설치해서 테스트를 하였습니다.


1. 기본 설치된 환경

  - 이전 내용처럼 Ubuntu20.x LTS에 Asterisk 18.16.0과 FreePBX 16.0.4를 설치한 상태에서 진행했습니다. FreePBX내에 있는 TTS 모듈은 설정까지는 해보았지만, 정확한 사용방법을 몰라 연동을 하지 못했습니다.

2. 프로그램 설치

  - CLI 환경에서 몇 가지 라이브러리를 설치합니다.

$ sudo apt install xsel libnotify-bin libttspico0 libttspico-utils libttspico-data libwww-perl libwww-mechanize-perl libhtml-tree-perl sox libsox-fmt-mp3 python3-pip -y

 

   -  gtts 엔진을 설치해줍니다. 

$ pip3 install --upgrade pip
$ sudo pip3 install gTTS

 

  - 테스트해 볼 수 있는 소스코드를 다운로드합니다. 압축을 풀면 gtts관련 파일들이 추가된 것을 확인할 수 있습니다. 

$ cd /var/lib/asterisk/agi-bin
$ wget http://incrediblepbx.com/gtts.tar.gz
$ tar zxvf gtts.tar.gz
$ ./install-gtts-dialplan.sh

3. 설정하기

  - FreePBX가 설치되어 있다면 extensions_custom.conf 파일에 전화번호 하나를 만들어 테스트를 진행합니다.

  - 별도로 Web FreePBX상 Extensions를 추가할 필요 없이 2001 번호를 사용하는 스크립트를 작성합니다. (gtts-dialplan.txt참고) 그런데 압축된 파일에는 샘플에 나온 것과 달리 nv-news-yahoo.php 파일이 없어서 뉴스를 읽어 주는 것은 테스트하지 못했습니다.

  - 스크립트 내용은 환경에 맞게 설정해 주면 됩니다. 특히 AGI(Asterisk Gateway Interface) 함수에 gtts.php 넣고 인자 값으로 메시지와 언어를 선택해 주고 설정한 번호로 전화를 걸며 pleaseholdyahoo.wav 재생이 되고 입력한 텍스트메시지가 소리로 들을 수 있습니다.

 

  - Syntax :  AGI(command, arg1, [arg2[,...]])  

  - 스크립트에서 ;(세미콜론)은 주석입니다.

[from-internal-custom]
;# // BEGIN nv-news-yahoo
exten => 2001,1,Answer
exten => 2001,2,Wait(1)
exten => 2001,3,Set(TIMEOUT(digit)=7)
exten => 2001,4,Set(TIMEOUT(response)=10)
;exten => 951,n(proceed),agi(picotts.agi,"Please hold a moment while we retrieve the latest Yahoo news headlines.",en-US)
exten => 2001,5,Playback(/var/lib/asterisk/agi-bin/pleaseholdyahoo)
exten => 2001,6,AGI(nv-news-yahoo.php,8)
exten => 2001,7,NoOp(News: ${NEWS})
;exten => 951,n,Flite("${NEWS}")
;exten => 951,n,AGI(picotts.agi,"${NEWS}",en-US)
;exten => 951,n,AGI(picotts.agi,"${NEWS}",en-US)
;exten => 951,n,AGI(ibmtts.php,"${NEWS}")
exten => 2001,8,AGI(gtts.php,"Hello, This is a test Message, Text To Voice.","en-US")
exten => 2001,9,Hangup()

4. 작동 확인하기

  - 스크립트를 저장하고 재시작합니다. 

$ systemctl restart asterisk.service

 

  - Asterisk Log 확인하면  어떻게 실행되고 어떤 부분에 에러가 나는지 볼 수 있습니다.

   (FreePBX 상에서도 Log로 확인할 수 있습니다.) 

$ sudo asterisk -rvvv

 

 

 - 참고로, 이것은 ARS처럼 Caller(송신자)가 전화를 걸면 TTS로 방송이 나오는 방법입니다.

 

감사합니다.

 

 

<참고 사이트>

1. gTTS: The Ultimate (free) Text-to-Speech Engine for Asterisk

https://nerdvittles.com/gtts-the-ultimate-free-text-to-speech-engine-for-asterisk/

2. Asterisk Project

https://wiki.asterisk.org/wiki/display/AST/Home  

3. Asterisk 설치

https://blog.naver.com/calmroad

4. Mavercik의 행복한 이야기

https://m.blog.naver.com/hsunryou  

 

Comments