Maintenant, reste à configurer les extensions Asterisk, en SSH, faire :
vi /var/packages/Asterisk/target/etc/asterisk/extensions.conf
Dans le fichier placer les variables globales suivantes :
- Code : Tout sélectionner
[globals]
WEATHERDEFAULTCITY=Paris
WEATHERDEFAULTCOUNTRY=France
WEATHERDEFAULTNBDAY=3
WEATHERDEFAULTJSON=/volume1/web/perso/asterisk/weather.json
SCRIPTTTS=/volume1/scripts/Asterisk/tts.sh
SCRIPTWEATHER=/volume1/web/perso/asterisk/weather.php
Placer ensuite les extensions suivantes :
- Code : Tout sélectionner
[work]
;extensions des IVR
exten => 8000,1,Goto(weather,eeDomus,1)
exten => 1000,1,Goto(recognition,eeDomus,1)
exten => 2000,1,Goto(meteo,eeDomus,1)
[meteo]
exten => eeDomus,1,Answer()
exten => eeDomus,n,GotoIf($[${LEN(${COUNTRY})} = 0]?countrydef:countryset)
exten => eeDomus,n(countrydef),Set(COUNTRY=${WEATHERDEFAULTCOUNTRY})
exten => eeDomus,n(countryset),Set(COUNTRY=${COUNTRY})
exten => eeDomus,n,GotoIf($[${LEN(${CITY})} = 0]?citydef:cityset)
exten => eeDomus,n(citydef),Set(CITY=${WEATHERDEFAULTCITY})
exten => eeDomus,n(cityset),Set(CITY=${CITY})
exten => eeDomus,n,Set(TIMEOUT(response)=10)
exten => eeDomus,n,Wait(1)
exten => eeDomus,n,Set(WFILE=${SHELL(${SCRIPTTTS} -a WEATHER -s ${SCRIPTWEATHER} -c ${CITY} -C ${COUNTRY})})
exten => eeDomus,n,Set(RESULT=${SHELL(${SCRIPTTTS} -a FILE -f tts -t ${WFILE})})
exten => eeDomus,n,Set(RESULT=${SHELL(${SCRIPTTTS} -a SOUND -f tts -t "Bonjour à tous.")})
exten => eeDomus,n,Wait(1)
exten => eeDomus,n,Playback(${RESULT})
exten => eeDomus,n,Set(RESULT=${SHELL(${SCRIPTTTS} -a SOUND -f tts -t "Je vous propose les informations météo du jour pour ${CITY}, ${COUNTRY}")})
exten => eeDomus,n,Wait(1)
exten => eeDomus,n,Playback(${RESULT})
exten => eeDomus,n,Goto(weather,3,1)
[recognition]
exten => eeDomus,1,Answer()
exten => eeDomus,n(stepp),Set(RESULT=${SHELL(${SCRIPTTTS} -a SOUND -f tts -t "Dites le nom du pays après le bip et appuyez sur dièse.")})
exten => eeDomus,n,Wait(1)
exten => eeDomus,n,Playback(${RESULT})
exten => eeDomus,n,Set(IDFILE=${SHELL(date +%Y%m%d%H%M%S%n | tr -d '\n')})
exten => eeDomus,n(recordp),Record(${IDFILE}:wav,0,15,y)
exten => eeDomus,n,Set(initial=${SHELL(${SCRIPTTTS} -a RECOG -t "${IDFILE}.wav" -f rec -c initial)})
exten => eeDomus,n,Set(confidence=${SHELL(${SCRIPTTTS} -a RECOG -t ${initial} -f rec -c confidence)})
exten => eeDomus,n,Set(_COUNTRY=${SHELL(${SCRIPTTTS} -a RECOG -t ${initial} -f rec -c utterance)})
exten => eeDomus,n,Verbose(1,Script returned: ${confidence} , ${_COUNTRY})
exten => eeDomus,n(successp),GotoIf($["${confidence}" > "0.80"]?stepv:retryp)
exten => eeDomus,n(retryp),Set(RESULT=${SHELL(${SCRIPTTTS} -a SOUND -f tts -t "Je n'ai pas compris, pouvez-vous le répéter plus clairement ?")})
exten => eeDomus,n,Wait(1)
exten => eeDomus,n,Playback(${RESULT})
exten => eeDomus,n,goto(recordp)
exten => eeDomus,n(stepv),Set(RESULT=${SHELL(${SCRIPTTTS} -a SOUND -f tts -t "Dites le nom de la ville en ${COUNTRY} le bip et appuyez sur dièse.")})
exten => eeDomus,n,Wait(1)
exten => eeDomus,n,Playback(${RESULT})
exten => eeDomus,n,Set(IDFILE=${SHELL(date +%Y%m%d%H%M%S%n | tr -d '\n')})
exten => eeDomus,n(recordv),Record(${IDFILE}:wav,0,15,y)
exten => eeDomus,n,Set(initial=${SHELL(${SCRIPTTTS} -a RECOG -t "${IDFILE}.wav" -f rec -c initial)})
exten => eeDomus,n,Set(confidence=${SHELL(${SCRIPTTTS} -a RECOG -t ${initial} -f rec -c confidence)})
exten => eeDomus,n,Set(_CITY=${SHELL(${SCRIPTTTS} -a RECOG -t ${initial} -f rec -c utterance)})
exten => eeDomus,n,Verbose(1,Script returned: ${confidence} , ${_CITY})
exten => eeDomus,n(successv),GotoIf($["${confidence}" > "0.80"]?stepw:retryv)
exten => eeDomus,n(retryv),Set(RESULT=${SHELL(${SCRIPTTTS} -a SOUND -f tts -t "Je n'ai pas compris, pouvez-vous le répéter plus clairement ?")})
exten => eeDomus,n,Wait(1)
exten => eeDomus,n,Playback(${RESULT})
exten => eeDomus,n,goto(recordv)
exten => eeDomus,n(failp),Set(RESULT=${SHELL(${SCRIPTTTS} -a SOUND -f tts -t "Je suis désolé, je ne peux pas récupérer les informations.")})
exten => eeDomus,n,Wait(1)
exten => eeDomus,n(endp),Hangup()
exten => eeDomus,n(stepw),Goto(weather,eeDomus,1)
[weather]
exten => eeDomus,1,Answer()
exten => eeDomus,n,GotoIf($[${LEN(${COUNTRY})} = 0]?countrydef:countryset)
exten => eeDomus,n(countrydef),Set(COUNTRY=${WEATHERDEFAULTCOUNTRY})
exten => eeDomus,n(countryset),Set(COUNTRY=${COUNTRY})
exten => eeDomus,n,GotoIf($[${LEN(${CITY})} = 0]?citydef:cityset)
exten => eeDomus,n(citydef),Set(CITY=${WEATHERDEFAULTCITY})
exten => eeDomus,n(cityset),Set(CITY=${CITY})
exten => eeDomus,n,Set(TIMEOUT(response)=10)
exten => eeDomus,n,Wait(1)
exten => eeDomus,n,Set(WFILE=${SHELL(${SCRIPTTTS} -a WEATHER -s ${SCRIPTWEATHER} -c ${CITY} -C ${COUNTRY})})
exten => eeDomus,n,Set(RESULT=${SHELL(${SCRIPTTTS} -a FILE -f tts -t ${WFILE})})
exten => eeDomus,n(repeat),Set(RESULT=${SHELL(${SCRIPTTTS} -a SOUND -f tts -t "Tapez un pour la météo du jour à ${CITY}, ${COUNTRY}.")})
exten => eeDomus,n,Wait(1)
exten => eeDomus,n,Background(${RESULT})
exten => eeDomus,n,Set(RESULT=${SHELL(${SCRIPTTTS} -a SOUND -f tts -t "Tapez deux pour la météo de demain.")})
exten => eeDomus,n,Wait(1)
exten => eeDomus,n,Background(${RESULT})
exten => eeDomus,n,Set(RESULT=${SHELL(${SCRIPTTTS} -a SOUND -f tts -t "Tapez trois pour la météo des trois prochains jours.")})
exten => eeDomus,n,Wait(1)
exten => eeDomus,n,Background(${RESULT})
exten => eeDomus,n,Set(RESULT=${SHELL(${SCRIPTTTS} -a SOUND -f tts -t "Appuyez sur dièse si vous souhaitez réécouter ce message.")})
exten => eeDomus,n,Wait(1)
exten => eeDomus,n,Background(${RESULT})
exten => eeDomus,n,Wait(1)
exten => eeDomus,n,WaitExten()
exten => 1,1,Wait(1)
exten => 1,2,Set(RESULT=${SHELL(${SCRIPTTTS} -a LOAD -t ${WEATHERDEFAULTJSON} -f tts -F day1)})
exten => 1,3,Wait(1)
exten => 1,n,Set(i=1);
exten => 1,n,While($[${i} <= ${RESULT}])
exten => 1,n,Playback(${SHELL(${SCRIPTTTS} -a LOAD -t ${WEATHERDEFAULTJSON} -f tts -F day1_${i})})
exten => 1,n,Set(i=$[ ${i} + 1 ])
exten => 1,n,EndWhile
exten => 1,n,Wait(1)
exten => 2,1,Wait(1)
exten => 2,2,Set(RESULT=${SHELL(${SCRIPTTTS} -a LOAD -t ${WEATHERDEFAULTJSON} -f tts -F day2_)})
exten => 2,3,Wait(1)
exten => 2,n,Set(i=1);
exten => 2,n,While($[${i} <= ${RESULT}])
exten => 2,n,Playback(${SHELL(${SCRIPTTTS} -a LOAD -t ${WEATHERDEFAULTJSON} -f tts -F day2_${i})})
exten => 2,n,Set(i=$[ ${i} + 1 ])
exten => 2,n,EndWhile
exten => 2,n,Wait(1)
exten => 3,1,Wait(1)
exten => 3,n,Set(j=1);
exten => 3,n,While($[${j} <= ${WEATHERDEFAULTNBDAY}])
exten => 3,n,Set(RESULT=${SHELL(${SCRIPTTTS} -a LOAD -t ${WEATHERDEFAULTJSON} -f tts -F day${j}_)})
exten => 3,n,Wait(1)
exten => 3,n,Set(i=1);
exten => 3,n,While($[${i} <= ${RESULT}])
exten => 3,n,Playback(${SHELL(${SCRIPTTTS} -a LOAD -t ${WEATHERDEFAULTJSON} -f tts -F day${j}_${i})})
exten => 3,n,Set(i=$[ ${i} + 1 ])
exten => 3,n,EndWhile
exten => 3,n,Set(j=$[ ${j} + 1 ])
exten => 3,n,EndWhile
exten => 3,n,Wait(1)
exten => 3,n,Hangup()
exten => _[4-9#],1,Goto(weather,eeDomus,repeat)
exten => t,1,Goto(weather,eeDomus,repeat)
Pour faire parler eeDomus sur un SIP, suffit alors de créer un actionneur HTTP et de l'appeler "eeDomus vous parle" par exemple.
Il faut alors rentrer plusieurs valeurs en fonction des alertes vocales souhaitées :
A vous de définir les textes souhaités et les incorporer dans vos règles.
A noter que ces scripts peuvent également être utilisés en batch pour le tts.sh ou en web.
Pour le moment, je suis toujours entrain de les améliorer et je ferais un tuto sur le site
http://www.nas-forum.com/forum/forum/28-tutorials/ quand ils seront parfaits.