рддреЗрдЬ рдЖрд╡рд╛рдЬ рдкрд╣рдЪрд╛рди рдЖрдИрд╡реАрдЖрд░ - рддреЗрдЬ, рдЖрд╕рд╛рди, рдореБрдлреНрдд

рдбреАрдЯреАрдПрдордПрдл рдФрд░ рдХрд░реНрдордЪрд╛рд░реА рдирд╛рдореЛрдВ (рд╕рдореНрдорд╛рдирд┐рдд рдПрдВрдЯреАрд░реИрдХ рд╕реЗ рд╡рд╛рдпрд╕рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд) рдХреА рдорд╛рдиреНрдпрддрд╛ рдФрд░ рдореМрдЬреВрджрд╛ рдкреАрдмреАрдПрдХреНрд╕ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде, рдПрд╕реНрдЯрд░рд┐рд╕реНрдХ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЖрдИрд╡реАрдЖрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред

рдЖрдЧрд╛рдореА рдирдпрд╛ рд╡рд░реНрд╖ рдЙрд╕ рдХрдВрдкрдиреА рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рдЦрдмрд░ рдирд╣реАрдВ (рд▓рд╛рдпрд╛) рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ - рдЖрдИрд╡реАрдЖрд░ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдЪреАрди рд╕рд░реНрд╡рд░ рдФрд░ рдбрд╛рдпрд▓реЛрдЧрд┐рдХ рд╕реЗ 4 рдПрдирд╛рд▓реЙрдЧ рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреЗ рд▓рд┐рдП рдкреАрд╕реАрдЖрдИ-рдмреЛрд░реНрдб рдХреА рдореГрддреНрдпреБ рд╣реЛ рдЧрдИред рдпрд╣ рдЕрдЪрд╛рдирдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдЖрдзреБрдирд┐рдХ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреАрд╕реАрдЖрдИ рд╕реНрд▓реЙрдЯ рдирд╣реАрдВ рд╣реИрдВ, рдкреБрд░рд╛рдиреЗ рдУрдПрд╕ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдпрд╣ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдХрд┐рддрдиреЗ рд╕рдордп рддрдХ рд░рд╣реЗрдВрдЧреЗ, рдФрд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред
рддреЛ рдЖрдЗрд╕реНрдЯрд░ рдХрд╛ рдЬрдиреНрдо рдПрдХ рдмреЛрд░реНрдб рдХреЗ рдмрд┐рдирд╛ рдЖрдИрд╡реАрдЖрд░ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдЖ рдерд╛ (рдФрд░ рдореБрдХреНрдд) рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдореЗрдВ рддрд╛рд░рд╛рдВрдХрди рдЪрд┐рд╣реНрди рдХреЗ рд╕рд╛рдеред

рдХреБрд▓, рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИ:

  • рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд╕рд╛рде рдореМрдЬреВрджрд╛ рдкреАрдмреАрдПрдХреНрд╕
  • рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди (рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, ubuntu 18.04 lts)ред
  • рдЖрд╡рд╛рдЬ рдкрд╣рдЪрд╛рди рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдкрд░ рдкрдВрдЬреАрдХрд░рдг: wit.ai, google рдпрд╛ Yandex
  • рд▓рд┐рдирдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдиреНрдпреВрдирддрдо рдЬреНрдЮрд╛рди
  • рддрд╛рд░рд╛рдВрдХрди рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛

рдпрджрд┐ рд╕рднреА рдмрд┐рдВрджреБ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░реНрдг рд╣реЛ рдЧрдП рд╣реИрдВ - рдЖрдк рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЦреБрдж рдХреЛ рддрд╛рд░рд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрд╡рд╛рдЬ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рджреЗрддреА рд╣реИ, рд╕рд╛рде рд╣реА рдиреЛрдбрдЬ рдФрд░ рдПрдирдкреАрдПрдо рднреАред

apt install nodejs asterisk npm asterisk-core-sounds-ru-gsm 

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЙрдпрд╕рд░ рдкрд╣рдЪрд╛рди рд╕реЗрд╡рд╛ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 npm install voicer -g npm install pm2 -g 

рд╡реЙрдЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдлреЛрд▓реНрдбрд░ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдПрдВ:

 mkdir -p /etc/voicer/data 

рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рд╕реЗрд╡рд╛ рдореЗрдВ рдЕрдкрдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо / рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ рдХреБрдВрдЬреА (developer_key) рдЬреЛрдбрд╝рдХрд░ рдлрд╝рд╛рдЗрд▓ /etc/voicer/config.js рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓рд┐рдЦреЗрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, wit.ai рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ - рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░, рд╕рдЯреАрдХред

 module.exports = { agi: { port: 3000 }, web: { port: 3100, auth: true, username: '_', password: '_', realm: '_' }, processing: { totalAttempts: 2, playGreeting: true, playBeepBeforeRecording: false //use system beep }, asterisk: { sounds: { onErrorBeforeFinish: 'invalid', onErrorBeforeRepeat: 'invalid', greeting: 'beep' }, recognitionDialplanVars: { status: 'RECOGNITION_RESULT', target: 'RECOGNITION_TARGET' } }, record: { directory: '/tmp', type: 'wav', duration: 3, }, recognize: { directory: '/tmp', type: 'witai', // ['yandex', 'google', 'witai'] options: { developer_key: 'XXXXXXXXXXXXXXXXXXX' } }, lookup: { type: 'file', options: { dataFile: '/etc/voicer/data/peernames.json' } }, logger: { console: { colorize: true }, file: { filename: '/var/log/voicer.log', json: false } } }; 

рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рд╡реЙрдпрд╕ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдлрд╝рд╛рдЗрд▓ /etc/init.d/voicer рд╣реЛрдЧреА:

 #!/bin/sh ### BEGIN INIT INFO # Provides: voicer # Required-Start: $network $syslog $named # Required-Stop: $network $syslog $named # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start/stop voicer ### END INIT INFO set -e if [ -z "$1" ] ; then echo "Usage: $0 [start|stop|restart]" exit 0 fi if [ "$1" = "start" ] ; then VOICER_CONFIGFILE=/etc/voicer/config pm2 start voicer elif [ "$1" = "stop" ] ; then pm2 stop voicer elif [ "$1" = "restart" ] ; then $0 stop sleep 5 $0 start fi 

рдЦреИрд░, рдЗрд╕реЗ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВ:

 systemctl daemon-reload systemctl enable voicer systemctl start voicer 

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡реЙрдЗрд╕рд░ / tmp рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рдордп-рд╕рдордп рдкрд░ рдЗрд╕реЗ рд╕рд╛рдл рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ /etc/cron.daily рдкрд░ рдЬреЛрдбрд╝реЗрдВ

 #!/bin/sh rm /tmp/*.wav 

рдареАрдХ рд╣реИ, рдЕрдм рдФрд░ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛ рд╣реБрдЖ рд╣реИ - рдЦреБрдж рдХреЛ рддрд╛рд░рд╛рдВрдХрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреАрдмреАрдПрдХреНрд╕ рд╣реИ рдФрд░ рд╕рднреА рдЧреНрд░рд╛рд╣рдХ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдо рд╣рдЯрд╛рддреЗ рд╣реИрдВ (рдпрд╛ рдПрдХ рдЕрдВрдзреЗрд░реЗ, рд╢рд╛рдВрдд, рд╢реБрд╖реНрдХ рд╕реНрдерд╛рди рдореЗрдВ рдмрдЪрд╛рддреЗ рд╣реИрдВ - рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ) / asterisk.conf, рдореЙрдбреНрдпреВрд▓.conf рдФрд░ sip.conf рдХреЛ рдЫреЛрдбрд╝рдХрд░ / etc / рддрд╛рд░рд╛рдВрдХрди рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рд╕рдм рдХреБрдЫред рдФрд░ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде sip.conf рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдорд╛рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

  • fromdomain - рддрд╛рд░рд╛рдВрдХрди рдЪрд┐рд╣реНрди рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдХрд╛ рдкрддрд╛
  • рд╣реЛрд╕реНрдЯ - рдкреАрдмреАрдПрдХреНрд╕ рдкрддрд╛
  • Fromuser: рдЧреБрдкреНрдд рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ: remotesecret - рд▓реЙрдЧрд┐рди: asterisk рдФрд░ PBX рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХрд┐рдП рдЧрдП рдкрд╛рд╕рд╡рд░реНрдб рдЬреЛрдбрд╝реЗ

 [main_link] fromdomain=xxx.xxx.xxx.xxx host=xxx.xxx.xxx.yyy insecure=port port=5060 realm=asterisk sendrpid=pai fromuser=111 secret=111 defaultuser=222 remotesecret=222 qualify=yes type=friend disallow=all allow=alaw context=main_link promiscredir=yes dtmfmode=auto 

рдпрд╣рд╛рдВ рдпрд╣ рдЙрд╕ рдореЛрдб рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдЬрд┐рд╕рдореЗрдВ dtmf рдХрдорд╛рдВрдб рдЖрдкрдХреЗ PBX тАЛтАЛрдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдмрд╛рд╣рд░реА рдкреАрдмреАрдПрдХреНрд╕ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢рд╣рд░ рдпрд╛ рдореЛрдмрд╛рдЗрд▓ рдлреЛрди рд╕реЗ) рдФрд░ рдЖрдкрдХреЗ рдкреАрдмреАрдПрдХреНрд╕ рдХреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдмреАрдЪ рдЖрдВрддрд░рд┐рдХ рдХреЙрд▓ред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдпрд╣ int dtmf рд╕рд┐рдЧреНрдирд▓ рдерд╛, рджреВрд╕рд░реЗ рдореЗрдВ - rfc2833ред рд▓реЗрдХрд┐рди рдСрдЯреЛ рдиреЗ рдХрд░ рджрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЗ рдкреАрдмреАрдПрдХреНрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреА рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЖрдкрдХреЛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд╕рдХрддреА рд╣реИрдВ - рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдИрд╡реАрдЖрд░ (рдмрд╛рд╣рд░реА) рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдЖрдИрд╡реАрдЖрд░ рд╕реЗ рдкреАрдмреАрдПрдХреНрд╕ (рд╕реЗрдВрдбрд░ рд▓рд╛рдЗрди) рдкрд░ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред

рдФрд░ рдПрдХ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдереАред рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдбрд╛рдпрд▓рдирд╛рди, рдЙрд░реНрдл тАЛтАЛрдПрдХреНрд╕рдЯреЗрдВрд╢рди.рдХреЙрдиреНрдлрд╝ред рдЗрд╕рдореЗрдВ рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдмрд╛рд╣рд░реА рдирдВрдмрд░ (рдЬрд┐рд╕реЗ рд▓реЛрдЧ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ), рд╕реЗрдХреНрд░реЗрдЯрд░реА рдирдВрдмрд░ (рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛) рдФрд░ рдЖрдкрдХреА рдЖрд╡рд╛рдЬрд╝ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдмрддрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 [general] static=yes writeprotect=no [globals] [main_link] exten => __,1,Goto(ivr_tree,s,1) [ivr_tree] ;allow direct dialing to internal users exten => _40XX,1,Background(custom/common/SoedinyauVas) ;check user voice existance same => n,Set(exists=${STAT(e,${ASTDATADIR}/sounds/custom/${EXTEN}.vox)}) same => n,Playback(custom/${IF($[ ${exists} = 1 ] ? ${EXTEN} : Sotrudnik)}) same => n,Transfer(SIP/${EXTEN}@_) ;start intro exten => s,1,Answer() same => n,Set(CHANNEL(language)=ru) same => n,Background(custom/common/Welcome) ;start recognition same => n,AGI(agi://localhost:3000) same => n,GotoIf($[${RECOGNITION_RESULT}=SUCCESS]?:default) same => n,Background(custom/common/SoedinyauVas) ;check user voice existance same => n,Set(exists=${STAT(e,${ASTDATADIR}/sounds/custom/${RECOGNITION_TARGET}.vox)}) ;play user name or default name same => n,Playback(custom/${IF($[ ${exists} = 1 ] ? ${RECOGNITION_TARGET} : Sotrudnik)}) same => n,Transfer(SIP/${RECOGNITION_TARGET}@_) same => n,Hangup() ;default route same => n(default),Transfer(SIP/4001@_) 

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЕрднрд┐рд╡рд╛рджрди, рдХрд░реНрдордЪрд╛рд░реА рдХреЗ рдирд╛рдо, рдФрд░ рд╡рд╛рдХреНрдпрд╛рдВрд╢ "рдЖрдкрдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдПрдХ рдХрд░реНрдордЪрд╛рд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрдд рдЙрд╕рдХреЗ рдирдВрдмрд░ рдХреЗ рд▓рд┐рдП рдорд╛рдВрдЧрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ "рдХрд░реНрдордЪрд╛рд░реА рдХреЗ рд╕рд╛рде" рдХреЗрд╡рд▓ рдЙрдЪреНрдЪрд╛рд░рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рд╕реНрдЯреВрдбрд┐рдпреЛ - рднрд╛рд╖рдг рд╕рд┐рдВрдереЗрд╕рд┐рд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдРрд╕реЗ рд╕рдВрдХреЗрдд рджреЗрдиреЗ рдХрд╛ рдЖрджреЗрд╢ рджреЗрддрд╛ рд╣реВрдВ, рдЬреЛ рд╕рд╣реА рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреА рдХрдВрдкрдиреА рдХреЗ рдирд╛рдо рдХрд╛ рдЙрдирдХрд╛ рдЙрдЪреНрдЪрд╛рд░рдг рдФрд░ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рдХреЗрд╡рд▓ рдордиреЛрд░рдВрдЬрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВред 40XX - рдХрдВрдкрдиреА рдореЗрдВ рд╕рдВрдЦреНрдпрд╛, 4001 - рд╕рдЪрд┐рд╡ред

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкреАрдмреАрдПрдХреНрд╕ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдХреЙрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рд╛рдорд╛рдиреНрдп рдбрд╛рдпрд▓ рдХрдорд╛рдВрдб рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - рдФрд░ рдлрд┐рд░ рдЖрдИрд╡реАрдЖрд░ рдХреЗ рдмрд╛рдж рдЖрдиреЗ рд╡рд╛рд▓реА рдХреЙрд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддрд╛рд░рд╛рдВрдХрди рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдФрд░ рдкреАрдмреАрдПрдХреНрд╕ рд╕рд┐рдк рдЪреИрдирд▓ рдХреЛ рдореБрдХреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИ (рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрдХреНрд╕рд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ рджреНрд╡рд╛рд░рд╛ рд╣рд╛рд░реНрдб-рдХреЛрдбрд┐рдд рд╣реЛрддреА рд╣реИ)ред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХрдорд╛рдВрдб рдХреЛ рджрд┐рд╢рд╛ (main_link) рдХреЗ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкреАрдмреАрдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╕реНрдЯреЗрд╢рди рдкрддреЗ рдХрд╛ рдПрдХ рд╕реАрдзрд╛ рд╕рдВрдХреЗрдд рдЙрдкрдпреБрдХреНрдд рдерд╛ред

рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдХреЗ рдкрддреЗ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ 3100 рдкреЛрд░реНрдЯ рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рдмрд╛рдж рд╣рдо рд╡рд╣рд╛рдВ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рдирд╛рдо, рдЙрдкрдирд╛рдо рдФрд░ рд╕рдВрдЦреНрдпрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВред

рдЕрдм рд╣рдорд╛рд░рд╛ рддрд╛рд░рд╛рдВрдХрди рдЗрдирдХрдорд┐рдВрдЧ рдХреЙрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, DTMF рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рд╣реИ, рдХрд░реНрдордЪрд╛рд░реА рдирд╛рдореЛрдВ рдХреЛ рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрдирдХреЗ рдЖрдВрддрд░рд┐рдХ рдирдВрдмрд░реЛрдВ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЙрд╕ рд╕реНрдЯреЗрд╢рди рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЗрдирдХрдорд┐рдВрдЧ рдХреЙрд▓ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рд╡рд┐рдз рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рдВрдЫрд┐рдд рдкрде рдореЗрдВ рд╢рдмреНрдж ARS рдФрд░ рдХреЙрд▓ рд░реВрдЯрд┐рдВрдЧ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реИред

Source: https://habr.com/ru/post/hi436016/


All Articles