Набор голосом абонентов Астериск
Добавлено: 13 авг 2020, 16:14
Друзья, всем привет. Хочу настроить голосовой набор внутренних абонентов.
Нашел несколько статей по этому делу и делал все идентично, один в один , пункт за пунктом, в итоге снимаю трубку, набираю 777, слышу "beep", произношу имя, в ответ слышу -ошибочный номер. Ну помогите , пожалуйста!
1. Я зарегался на wit.ai , мне достался ключ API
2. Все, что надо подгрузил в Linux систему . (NodeJS, Voicer и тд)
3. Создал файл сonfig.js в папке /etc/voicer . так же в папке voicer создал папку data где в дальнейшем должен размещаться будет файл peernames.json
4. Файл config.js привел к следующему виду :
module.exports ={
agi: {
port: 3000
},
processing: {
totalAttempts: 2,
playGreeting: true,
playBeepBeforeRecording: false
},
asterisk: {
sounds: {
onErrorBeforeFinish: 'invalid',
onErrorBeforeRepeat: 'invalid',
greeting: 'beep'
},
recognitionDialplanVars: {
status: 'RECOGNITION_RESULT',
target: 'RECOGNITION_TARGET'
}
},
record: {
directory: '/tmp',
type: 'wav',
duration: 2,
},
recognize: {
directory: '/tmp',
type: 'witai', // ['yandex', 'google', 'witai']
options: {
developer_key: '5RMQCLSHGIB5BZW3CRWCONIRNKFZxxxx'
}
},
lookup: {
type: 'file',
options: {
dataFile: '/etc/data/peernames.json'
}
}
};
5. Установил системную переменную VOICER_CONFIGFILE=/etc/voicer/config.js
6.В папке /usr/src/ создал файл parser.sh . Данный файл местит в себе скрипт парсинга такого вида:
#!/bin/bash -x
r="\33[0;31m"
g="\33[0;32m"
y="\33[0;33m"
n="\33[0m"
FILE=/etc/voicer/data/peernames.json
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
clear
echo -e "${y}Привет! Я скрипт выгрузки информации по внутренним номерам ${n}"
rm -f $FILE && echo -e "${y}Я уже удалил предыдущий файлик и приступил к заполнению нового ${n}"
for i in $(asterisk -rx 'sip show peers' | grep -P 'OK|UNKNOWN' | sed 's/\// /g' | awk '{print $1}'); do
if [[ "${#i}" < 6 && -z "${i//[0-9]/}" ]];then
#echo ${i}
str=$( asterisk -rx "sip show peer $i" | grep "Reg. Contact : sip"; )
#echo $str
name=$( asterisk -rx "sip show peer $i" | grep "Callerid"; )
#echo $name
ext=${str##*'sip:'}
ext=${ext%%'@'*}
name=${name##*': "'}
name=${name%%'" <'*}
name=${name%%' '*}
echo -e "\n {\n \"name\": \"$ext\",\n \"target\": \"SIP/$ext\",\n \"variants\": [\n \"${name}\"\n ]\n }," >> $FILE
echo -e "${g}Номерок $ext уже обработан и добавлен в список. Следующий…${n}"
fi
done
sed -i -e '1 s/^/[/;' $FILE
echo ']' >> $FILE
echo -e "${y}Я закончил! До свидания! =^_^=${n}"
7. Запустил скрипт, гляжу он выполнился, я перешел в файл файл peernames.json чтобы в этом убедиться. Вижу следующее :
[
{
"name": "2020",
"target": "SIP/2020",
"variants": [
"Igor"
]
},
{
"name": "",
"target": "SIP/",
"variants": [
"Иван"
]
},
{
"name": "2030",
"target": "SIP/2030",
"variants": [
"Василий"
]
},
]
8. Установил python36, установил python36-setuptools, выполнил команду easy_install-3.6 supervisor.
9. Создал папку supervisor в каталоге etc. Создал файл supervisord.conf в папке supervisor. Открыл конфигурационный файл и добавил в конец его следующее:
[program:voicer]
command=/usr/bin/voicer -c /etc/voicer/config.js -d /etc/voicer/data/peernames.json
user=root
autostart=true
autorestart=true
10. Создал файл службы supervisord-service в каталоге usr/lib/systemd/system . Привел его в следующий вид :
[Unit]
Description=Supervisor process control system for UNIX
Documentation=http://supervisord.org
After=network.target
[Service]
ExecStart=/usr/local/bin/supervisord -n -c /etc/supervisor/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl shutdown
ExecReload=/usr/local/bin/supervisorctl -c /etc/supervisor/supervisord.conf reload
KillMode=process
Restart=on-failure
RestartSec=50s
[Install]
WantedBy=multi-user.target
11. Выполнил команды:
# systemctl enable supervisord.service
# systemctl start supervisord.service
# ps aux | grep voicer
12.Внес в диалплан такие строки:
exten=777,1,AGI(agi://localhost:3000)
exten=777,n,GotoIf($[${RECOGNITION_RESULT}=SUCCESS]?:default,777,4)
exten=777,n,Dial(${RECOGNITION_TARGET})
13. Звоню и получаю следующее:
== Using SIP VIDEO CoS mark 6
== Using SIP RTP CoS mark 5
-- Executing [777@phone:1] AGI("SIP/2030-00000013", "agi://localhost:3000") in new stack
-- <SIP/2030-00000013> Playing 'beep.slin' (language 'ru')
-- Got SIP INFO response 415 "Unsupported Media Type" back from host '192.168.хх.161:57470'
-- <SIP/2030-00000013> Playing 'invalid.slin' (escape_digits=#) (sample_offset 0) (language 'ru')
-- <SIP/2030-00000013> Playing 'beep.slin' (language 'ru')
-- Got SIP INFO response 415 "Unsupported Media Type" back from host '192.168.хх.161:57470'
-- <SIP/2030-00000013> Playing 'invalid.slin' (escape_digits=#) (sample_offset 0) (language 'ru')
-- <SIP/2030-00000013>AGI Script agi://localhost:3000 completed, returning 0
-- Executing [777@phone:2] GotoIf("SIP/2030-00000013", "0?:default,777,4") in new stack
-- Goto (default,777,4)
-- Channel 'SIP/2030-00000013' sent to invalid extension: context,exten,priority=default,777,4
-- Executing [i@default:1] playback("SIP/2030-00000013", "invalid")
-- <SIP/2030-00000013> Playing 'invalid.slin' (language 'ru')
-- Executing [i@default:1] background("SIP/2030-00000013", "demo-instruct")
.
Друзья, честно, я не знаю, что делаю не так. Люди добрые , помогите пожалуйста!! Спасибо
Нашел несколько статей по этому делу и делал все идентично, один в один , пункт за пунктом, в итоге снимаю трубку, набираю 777, слышу "beep", произношу имя, в ответ слышу -ошибочный номер. Ну помогите , пожалуйста!
1. Я зарегался на wit.ai , мне достался ключ API
2. Все, что надо подгрузил в Linux систему . (NodeJS, Voicer и тд)
3. Создал файл сonfig.js в папке /etc/voicer . так же в папке voicer создал папку data где в дальнейшем должен размещаться будет файл peernames.json
4. Файл config.js привел к следующему виду :
module.exports ={
agi: {
port: 3000
},
processing: {
totalAttempts: 2,
playGreeting: true,
playBeepBeforeRecording: false
},
asterisk: {
sounds: {
onErrorBeforeFinish: 'invalid',
onErrorBeforeRepeat: 'invalid',
greeting: 'beep'
},
recognitionDialplanVars: {
status: 'RECOGNITION_RESULT',
target: 'RECOGNITION_TARGET'
}
},
record: {
directory: '/tmp',
type: 'wav',
duration: 2,
},
recognize: {
directory: '/tmp',
type: 'witai', // ['yandex', 'google', 'witai']
options: {
developer_key: '5RMQCLSHGIB5BZW3CRWCONIRNKFZxxxx'
}
},
lookup: {
type: 'file',
options: {
dataFile: '/etc/data/peernames.json'
}
}
};
5. Установил системную переменную VOICER_CONFIGFILE=/etc/voicer/config.js
6.В папке /usr/src/ создал файл parser.sh . Данный файл местит в себе скрипт парсинга такого вида:
#!/bin/bash -x
r="\33[0;31m"
g="\33[0;32m"
y="\33[0;33m"
n="\33[0m"
FILE=/etc/voicer/data/peernames.json
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
clear
echo -e "${y}Привет! Я скрипт выгрузки информации по внутренним номерам ${n}"
rm -f $FILE && echo -e "${y}Я уже удалил предыдущий файлик и приступил к заполнению нового ${n}"
for i in $(asterisk -rx 'sip show peers' | grep -P 'OK|UNKNOWN' | sed 's/\// /g' | awk '{print $1}'); do
if [[ "${#i}" < 6 && -z "${i//[0-9]/}" ]];then
#echo ${i}
str=$( asterisk -rx "sip show peer $i" | grep "Reg. Contact : sip"; )
#echo $str
name=$( asterisk -rx "sip show peer $i" | grep "Callerid"; )
#echo $name
ext=${str##*'sip:'}
ext=${ext%%'@'*}
name=${name##*': "'}
name=${name%%'" <'*}
name=${name%%' '*}
echo -e "\n {\n \"name\": \"$ext\",\n \"target\": \"SIP/$ext\",\n \"variants\": [\n \"${name}\"\n ]\n }," >> $FILE
echo -e "${g}Номерок $ext уже обработан и добавлен в список. Следующий…${n}"
fi
done
sed -i -e '1 s/^/[/;' $FILE
echo ']' >> $FILE
echo -e "${y}Я закончил! До свидания! =^_^=${n}"
7. Запустил скрипт, гляжу он выполнился, я перешел в файл файл peernames.json чтобы в этом убедиться. Вижу следующее :
[
{
"name": "2020",
"target": "SIP/2020",
"variants": [
"Igor"
]
},
{
"name": "",
"target": "SIP/",
"variants": [
"Иван"
]
},
{
"name": "2030",
"target": "SIP/2030",
"variants": [
"Василий"
]
},
]
8. Установил python36, установил python36-setuptools, выполнил команду easy_install-3.6 supervisor.
9. Создал папку supervisor в каталоге etc. Создал файл supervisord.conf в папке supervisor. Открыл конфигурационный файл и добавил в конец его следующее:
[program:voicer]
command=/usr/bin/voicer -c /etc/voicer/config.js -d /etc/voicer/data/peernames.json
user=root
autostart=true
autorestart=true
10. Создал файл службы supervisord-service в каталоге usr/lib/systemd/system . Привел его в следующий вид :
[Unit]
Description=Supervisor process control system for UNIX
Documentation=http://supervisord.org
After=network.target
[Service]
ExecStart=/usr/local/bin/supervisord -n -c /etc/supervisor/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl shutdown
ExecReload=/usr/local/bin/supervisorctl -c /etc/supervisor/supervisord.conf reload
KillMode=process
Restart=on-failure
RestartSec=50s
[Install]
WantedBy=multi-user.target
11. Выполнил команды:
# systemctl enable supervisord.service
# systemctl start supervisord.service
# ps aux | grep voicer
12.Внес в диалплан такие строки:
exten=777,1,AGI(agi://localhost:3000)
exten=777,n,GotoIf($[${RECOGNITION_RESULT}=SUCCESS]?:default,777,4)
exten=777,n,Dial(${RECOGNITION_TARGET})
13. Звоню и получаю следующее:
== Using SIP VIDEO CoS mark 6
== Using SIP RTP CoS mark 5
-- Executing [777@phone:1] AGI("SIP/2030-00000013", "agi://localhost:3000") in new stack
-- <SIP/2030-00000013> Playing 'beep.slin' (language 'ru')
-- Got SIP INFO response 415 "Unsupported Media Type" back from host '192.168.хх.161:57470'
-- <SIP/2030-00000013> Playing 'invalid.slin' (escape_digits=#) (sample_offset 0) (language 'ru')
-- <SIP/2030-00000013> Playing 'beep.slin' (language 'ru')
-- Got SIP INFO response 415 "Unsupported Media Type" back from host '192.168.хх.161:57470'
-- <SIP/2030-00000013> Playing 'invalid.slin' (escape_digits=#) (sample_offset 0) (language 'ru')
-- <SIP/2030-00000013>AGI Script agi://localhost:3000 completed, returning 0
-- Executing [777@phone:2] GotoIf("SIP/2030-00000013", "0?:default,777,4") in new stack
-- Goto (default,777,4)
-- Channel 'SIP/2030-00000013' sent to invalid extension: context,exten,priority=default,777,4
-- Executing [i@default:1] playback("SIP/2030-00000013", "invalid")
-- <SIP/2030-00000013> Playing 'invalid.slin' (language 'ru')
-- Executing [i@default:1] background("SIP/2030-00000013", "demo-instruct")
.
Друзья, честно, я не знаю, что делаю не так. Люди добрые , помогите пожалуйста!! Спасибо