VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Asterisk 18+WebRTC+JsSIP 3.7+Node.js 10+CentOS 8 Stream

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

Ответить
gopstopochka
Сообщения: 6
Зарегистрирован: 22 сен 2016, 12:06

Asterisk 18+WebRTC+JsSIP 3.7+Node.js 10+CentOS 8 Stream

Сообщение gopstopochka »

При развёртывании WebRTC, накладывается требования:
- Наличие белого статического IP адреса, который выкуплен у регистратора;
- Наличие имени домена, который выкуплен у регистратора и привязан к IP адресу;
- Веб браузеры проверяю наличие SSL Сертификата регистратора, который привязан к домену.

Установка Node.js и Express 4 HTTP Web Server
yum install nodejs
npm install -g express-generator
cd /opt
express -e web
cd web
npm install

Установка и сборка из исходного программного кода jssip.min.js и jssip.js
cd /opt/web
npm install jssip
cd node_modules/jssip
npm install
./node_modules/.bin/gulp
Проверка:
ll dist/
-rw-r--r-- 1 root root 718056 фев 13 12:56 jssip.js
-rw-r--r-- 1 root root 230043 фев 13 12:56 jssip.min.js

Установка бесплатных SSL сертификатов от регистратора Let's Encrypt, издают на 60 дней
С учётом того, что acme.sh "Заточен" под Apache Web Server, необходимо его однократно
запустить в целях получения сертификатов.
yum install httpd
systemctl start httpd

wget -O - https://get.acme.sh | sh
Shell Клиент acme.sh будет установлен папку .acme.sh в корневую папку
пользователя от которого будет выполнена далее команда

Переходим в папку пользователя
cd
cd .acme.sh
./acme.sh --issue -d mydoamain.ru -w /var/www/html
systemctl stop httpd
Проверка:
ll mydomain.ru
итого 28
-rw-r--r-- 1 root root 1587 фев 13 15:58 ca.cer
-rw-r--r-- 1 root root 3433 фев 13 15:58 fullchain.cer
-rw-r--r-- 1 root root 1846 фев 13 15:58 mydomain.ru.cer
-rw-r--r-- 1 root root 647 фев 13 15:58 mydomain.ru.conf
-rw-r--r-- 1 root root 980 фев 13 15:58 mydomain.ru.csr
-rw-r--r-- 1 root root 211 фев 13 15:58 mydomain.ru.csr.conf
-rw-r--r-- 1 root root 1675 фев 13 15:58 mydomain.ru.key

Запуск в режиме Express 4 HTTPS Web Server
npm -s install https
cd /opt/web/bin
mkdir ssl
cd ssl
cp ~/.acme.sh/mydomain.ru/{ca.cer,mydomain.ru.cer,mydomain.ru.key} .
cd /opt/web/bin
Выпоняемый файл www строки, строки программного кода, приводим к виду:
var http = require('https');
//добавляем
var fs = require('fs');
var server = http.createServer(
{
ca: fs.readFileSync(__dirname+'/ssl/ca.cer'),
key: fs.readFileSync(__dirname+'/ssl/mydomain.ru.key'),
cert: fs.readFileSync(__dirname+'/ssl/mydomain.ru.cer')
},app);
Проверяем запуск Express 4 HTTPS Web Server
./www

Установка IP Телефонии Asterisk 18.2.0
Отключаем SELinux
В файле /etc/selinux/config строку SELINUX=enforcing приводим виду:
SELINUX=disabled
yum config-manager --set-enabled powertools
yum install epel-release
cd /usr/local/src/
wget http://downloads.asterisk.org/pub/telep ... 2.0.tar.gz
tar xvfz asterisk-18.2.0.tar.gz
cd asterisk-18.2.0/contrib/scripts
./install_prereq install
./install_prereq install-unpackaged
cd ../..
./configure
make menuselect
make
make install
make samples
make config
make install-logrotate
ldconfig
systemctl enable asterisk
systemctl start asterisk
Проверка:
asterisk -rvvvvv

Переводим IP Телефонию Asterisk 18.2.0 на SIP канальный драйвер
В файле /etc/asterisk/modules.conf строку, приводим виду:
;noload => chan_sip.so
systemctl restart asterisk

Запуск Asterisk HTTPS Server
В файле /etc/asterisk/http.conf строки, приводим виду:
tlsenable=yes
tlsbindaddr=0.0.0.0:8089
tlscertfile=/opt/web/bin/ssl/mydomain.ru.cer
tlsprivatekey=/opt/web/bin/ssl/mydomain.ru.key
Проверка:
systemctl restart asterisk
nmap localhost -p 8089
PORT STATE SERVICE
8089/tcp open unknown

Добавление 400(SIP) и 401(WebRTC) номера в IP Телефонию Asterisk
В файле /etc/asterisk/sip.conf добавляем строки:
[400]
type=friend
secret=sippasswd
host=dynamic
disallow=all
allow=alaw
context=webrtc_out
qualify=yes
directmedia=no
;deny=0.0.0.0/0.0.0.0
;permit=10.8.0.0/24

[401]
type=friend
host=dynamic
secret=webrtcpasswd
encryption=yes
icesupport=yes
context=webrtc_out
directmedia=no
transport=wss
dtlsenable=yes
dtlsverify=fingerprint
dtlsautogeneratecert=yes
dtlssetup=actpass
rtcp_mux=yes
disallow=all
allow=alaw
;deny=0.0.0.0/0.0.0.0
;permit=10.8.0.0/24

Добавление в IP Телефонию Asterisk правило дозвона:
В файле /etc/asterisk/extensions.conf добавляем строки:
[webrtc_out]
exten => _40X,1,Wait(0.25)
same => n,Answer
same => n,Dial(SIP/${EXTEN})

Активируем изменения в конфигурации в IP Телефонии Asterisk
systemctl restart asterisk

Размещение программного кода JsSIP, который будет принимать входящий звонок в веб браузер
cd /opt/web/views
В файле /opt/web/views/index.ejs приводим к виду:

<!DOCTYPE html>
<html>

<head>
<title>
<%= title %>
</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
<script src="jssip.js"></script>
</head>

<body>
<h1>
<%= title %>
</h1>
<p>Welcome to <%= title %>
</p>
<script>
JsSIP.debug.enable('JsSIP:*')
var socket = new JsSIP.WebSocketInterface('wss://mydomain.ru:8089/ws');
var configuration = {
sockets: [socket],
uri: 'sip:401@mydomain.ru',
password: 'webrtcpasswd',
realm: 'mydomain.ru',
registrar_server: 'sip:mydomain.ru',
display_name: '401',
contact_uri: 'sip:401@mydomain.ru'
};
var ua = new JsSIP.UA(configuration);
ua.start();
var options = {
'mediaConstraints': { 'audio': true, 'video': false }
};
ua.on("newRTCSession", function (data) {
var session = data.session;
if (session.direction === "incoming") {
// incoming call here
session.on("accepted", function () {
// the call has answered
});
session.on("confirmed", function () {
// this handler will be called for incoming calls too
});
session.on("ended", function () {
// the call has ended
});
session.on("failed", function () {
// unable to establish the call
});
session.on('addstream', function (e) {
var audio = new Audio()
audio.srcObject = e.stream
audio.play()
});
// Answer call
session.answer(options);
session.connection.addEventListener('addstream', (e) => {
var audio = new Audio()
audio.srcObject = e.stream
audio.play()
});
// Reject call (or hang up it)
// session.terminate();
}
});

</script>
</body>

</html>

Для активизации программного кода, необходимо запустить Express 4 HTTPS Web Server
/opt/web/bin/www
И далее в веб браузере набрать адрес https://mydoamain.ru, делаете звонок с номера 400(Прописан в MicroSIP) на 401(любой веб браузер).
В веб браузере, нужно будет дать разрешение на активацию микрофона.

Размещение программного кода JsSIP, который будет звонить с веб браузера - это номер 401 на номер 400:
cd /opt/web/views
В файле /opt/web/views/index.ejs приводим к виду:

<!DOCTYPE html>
<html>

<head>
<title>
<%= title %>
</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
<script src="jssip.js"></script>
</head>

<body>
<h1>
<%= title %>
</h1>
<p>Welcome to <%= title %>
</p>
<script>
JsSIP.debug.enable('JsSIP:*')
var socket = new JsSIP.WebSocketInterface('wss://mydomain.ru:8089/ws');
var configuration = {
sockets: [socket],
uri: 'sip:401@mydomain.ru',
password: 'webrtcpasswd',
realm: 'mydomain.ru',
registrar_server: 'sip:mydomain.ru',
display_name: '401',
contact_uri: 'sip:401@mydomain.ru'
};

var ua = new JsSIP.UA(configuration);

ua.start();

// Register callbacks to desired call events
var eventHandlers = {
'progress': function (e) {
console.log('call is in progress');
},
'failed': function (e) {
console.log('call failed with cause: ' + e.cause);
},
'ended': function (e) {
console.log('call ended with cause: ' + e.cause);
},
'confirmed': function (e) {
console.log('call confirmed');
}
};

var options = {
'eventHandlers': eventHandlers,
'mediaConstraints': { 'audio': true, 'video': false }
};

var session = ua.call('sip:400@mydomain.ru', options);
if (session) {
session.connection.addEventListener('addstream', (e) => {
var audio = new Audio()
audio.srcObject = e.stream
audio.play()
});
}

</script>
</body>

</html>

Для активизации программного кода, необходимо запустить Express 4 HTTPS Web Server
/opt/web/bin/www
И далее в веб браузере набрать адрес https://mydoamain.ru как только загрузится программный код в веб браузере со стороны Express 4 HTTPS Web Server, произойдёт звонок с номера 401(любой веб браузер) на номер 400(Прописан в MicroSIP).
В веб браузере, нужно будет дать разрешение на активацию микрофона.

Удачи!
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH