ಆಸ್ಟರಿಸ್ಕ್ ಮತ್ತು ಬಿಟ್ರಿಕ್ಸ್ 24 ರ ಏಕೀಕರಣ

ಆಸ್ಟರಿಸ್ಕ್ ಮತ್ತು ಬಿಟ್ರಿಕ್ಸ್ 24 ರ ಏಕೀಕರಣ
ನೆಟ್ವರ್ಕ್ನಲ್ಲಿ IP-PBX ಆಸ್ಟರಿಸ್ಕ್ ಮತ್ತು CRM Bitrix24 ಅನ್ನು ಸಂಯೋಜಿಸಲು ವಿಭಿನ್ನ ಆಯ್ಕೆಗಳಿವೆ, ಆದರೆ ನಾವು ಇನ್ನೂ ನಮ್ಮದೇ ಆದದನ್ನು ಬರೆಯಲು ನಿರ್ಧರಿಸಿದ್ದೇವೆ.

ಕ್ರಿಯಾತ್ಮಕತೆಯ ವಿಷಯದಲ್ಲಿ, ಎಲ್ಲವೂ ಪ್ರಮಾಣಿತವಾಗಿದೆ:

  • Bitrix24 ನಲ್ಲಿನ ಕ್ಲೈಂಟ್‌ನ ಫೋನ್ ಸಂಖ್ಯೆಯೊಂದಿಗಿನ ಲಿಂಕ್ ಅನ್ನು ಕ್ಲಿಕ್ ಮಾಡುವ ಮೂಲಕ, ಆಸ್ಟರಿಸ್ಕ್ ಬಳಕೆದಾರರ ಆಂತರಿಕ ಸಂಖ್ಯೆಯನ್ನು ಕ್ಲೈಂಟ್‌ನ ಫೋನ್ ಸಂಖ್ಯೆಯೊಂದಿಗೆ ಯಾರ ಪರವಾಗಿ ಕ್ಲಿಕ್ ಮಾಡಲಾಗಿತ್ತೋ ಆ ಬಳಕೆದಾರರನ್ನು ಸಂಪರ್ಕಿಸುತ್ತದೆ. Bitrix24 ನಲ್ಲಿ, ಕರೆಯ ರೆಕಾರ್ಡ್ ಅನ್ನು ರೆಕಾರ್ಡ್ ಮಾಡಲಾಗುತ್ತದೆ ಮತ್ತು ಕರೆಯ ಕೊನೆಯಲ್ಲಿ, ಸಂಭಾಷಣೆಯ ರೆಕಾರ್ಡಿಂಗ್ ಅನ್ನು ಎಳೆಯಲಾಗುತ್ತದೆ.
  • ನಕ್ಷತ್ರ ಚಿಹ್ನೆಯು ಹೊರಗಿನಿಂದ ಕರೆಯನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ - Bitrix24 ಇಂಟರ್ಫೇಸ್‌ನಲ್ಲಿ ನಾವು ಈ ಕರೆ ಬಂದ ಉದ್ಯೋಗಿಗೆ ಕ್ಲೈಂಟ್ ಕಾರ್ಡ್ ಅನ್ನು ತೋರಿಸುತ್ತೇವೆ.
    ಅಂತಹ ಕ್ಲೈಂಟ್ ಇಲ್ಲದಿದ್ದರೆ, ಹೊಸ ಲೀಡ್ ಅನ್ನು ರಚಿಸಲು ನಾವು ಕಾರ್ಡ್ ಅನ್ನು ತೆರೆಯುತ್ತೇವೆ.
    ಕರೆ ಪೂರ್ಣಗೊಂಡ ತಕ್ಷಣ, ನಾವು ಇದನ್ನು ಕಾರ್ಡ್‌ನಲ್ಲಿ ಪ್ರತಿಬಿಂಬಿಸುತ್ತೇವೆ ಮತ್ತು ಸಂಭಾಷಣೆಯ ರೆಕಾರ್ಡಿಂಗ್ ಅನ್ನು ಎಳೆಯುತ್ತೇವೆ.

ಕಟ್ ಕೆಳಗೆ ನಾನು ನಿಮಗೆ ಎಲ್ಲವನ್ನೂ ಹೇಗೆ ಹೊಂದಿಸುವುದು ಮತ್ತು ಗಿಥಬ್‌ಗೆ ಲಿಂಕ್ ಅನ್ನು ನೀಡುವುದು ಹೇಗೆ ಎಂದು ಹೇಳುತ್ತೇನೆ - ಹೌದು, ಹೌದು, ಅದನ್ನು ತೆಗೆದುಕೊಂಡು ಅದನ್ನು ಬಳಸಿ!

ಸಾಮಾನ್ಯ ವಿವರಣೆ

ನಾವು ನಮ್ಮ ಏಕೀಕರಣವನ್ನು CallMe ಎಂದು ಕರೆದಿದ್ದೇವೆ. CallMe PHP ಯಲ್ಲಿ ಬರೆಯಲಾದ ಒಂದು ಸಣ್ಣ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಆಗಿದೆ.

ಬಳಸಿದ ತಂತ್ರಜ್ಞಾನಗಳು ಮತ್ತು ಸೇವೆಗಳು

  • PHP 5.6
  • PHP AMI ಲೈಬ್ರರಿ
  • ಸಂಯೋಜಕ
  • Nginx + php-fpm
  • ಮೇಲ್ವಿಚಾರಕ
  • AMI (ಆಸ್ಟರಿಸ್ಕ್ ಮ್ಯಾನೇಜರ್ ಇಂಟರ್ಫೇಸ್)
  • ಬಿಟ್ರಿಕ್ಸ್ ವೆಬ್‌ಹೂಕ್ಸ್ (ಸರಳೀಕೃತ REST API ಅನುಷ್ಠಾನ)

ಪೂರ್ವಹೊಂದಿಕೆ

ನಕ್ಷತ್ರ ಚಿಹ್ನೆಯೊಂದಿಗೆ ಸರ್ವರ್‌ನಲ್ಲಿ, ನೀವು ವೆಬ್ ಸರ್ವರ್ ಅನ್ನು ಸ್ಥಾಪಿಸಬೇಕಾಗಿದೆ (ನಮಗೆ ಇದು nginx+php-fpm), ಮೇಲ್ವಿಚಾರಕ ಮತ್ತು git.

ಅನುಸ್ಥಾಪನಾ ಆಜ್ಞೆ (CentOS):

yum install nginx php-fpm supervisor git

ನಾವು ವೆಬ್ ಸರ್ವರ್‌ಗೆ ಪ್ರವೇಶಿಸಬಹುದಾದ ಡೈರೆಕ್ಟರಿಗೆ ಹೋಗುತ್ತೇವೆ, ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು Git ನಿಂದ ಎಳೆಯಿರಿ ಮತ್ತು ಫೋಲ್ಡರ್‌ಗೆ ಅಗತ್ಯ ಹಕ್ಕುಗಳನ್ನು ಹೊಂದಿಸಿ:


cd /var/www
git clone https://github.com/ViStepRU/callme.git
chown nginx. -R callme/

ಮುಂದೆ, nginx ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡೋಣ, ನಮ್ಮ ಸಂರಚನೆಯು ಇದೆ

/etc/nginx/conf.d/pbx.vistep.ru.conf

server {
	server_name www.pbx.vistep.ru pbx.vistep.ru;
	listen *:80;
	rewrite ^  https://pbx.vistep.ru$request_uri? permanent;
}

server {
#        listen *:80;
#	server_name pbx.vistep.ru;


	access_log /var/log/nginx/pbx.vistep.ru.access.log main;
        error_log /var/log/nginx/pbx.vistep.ru.error.log;

    listen 443 ssl http2;
    server_name pbx.vistep.ru;
    resolver 8.8.8.8;
    ssl_stapling on;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/pbx.vistep.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/pbx.vistep.ru/privkey.pem;
    ssl_dhparam /etc/nginx/certs/dhparam.pem;
    ssl_session_timeout 24h;
    ssl_session_cache shared:SSL:2m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2;
    ssl_prefer_server_ciphers on;
    add_header Strict-Transport-Security "max-age=31536000;";
    add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:; report-uri /csp-report";
	
	root /var/www/callme;
	index  index.php;
        location ~ /. {
                deny all; # запрет для скрытых файлов
        }

        location ~* /(?:uploads|files)/.*.php$ {
                deny all; # запрет для загруженных скриптов
        }

        location ~* ^.+.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
                access_log off;
                log_not_found off;
                expires max; # кеширование статики
        }

	location ~ .php {
		root /var/www/callme;
		index  index.php;
		fastcgi_pass unix:/run/php/php5.6-fpm.sock;
	#	fastcgi_pass 127.0.0.1:9000;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
		include /etc/nginx/fastcgi_params;
		}
}

ನಾನು ಸಂರಚನೆ, ಭದ್ರತಾ ಸಮಸ್ಯೆಗಳು, ಪ್ರಮಾಣಪತ್ರವನ್ನು ಪಡೆಯುವುದು ಮತ್ತು ಲೇಖನದ ವ್ಯಾಪ್ತಿಯ ಹೊರಗೆ ವೆಬ್ ಸರ್ವರ್ ಅನ್ನು ಆಯ್ಕೆ ಮಾಡುವುದನ್ನು ಬಿಡುತ್ತೇನೆ - ಇದರ ಬಗ್ಗೆ ಬಹಳಷ್ಟು ಬರೆಯಲಾಗಿದೆ. ಅಪ್ಲಿಕೇಶನ್ ಯಾವುದೇ ನಿರ್ಬಂಧಗಳನ್ನು ಹೊಂದಿಲ್ಲ, ಇದು http ಮತ್ತು https ಎರಡರಲ್ಲೂ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.

ನಾವು https ಬಳಸುತ್ತೇವೆ, ಪ್ರಮಾಣಪತ್ರವನ್ನು ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡೋಣ.

ನೀವು ಎಲ್ಲವನ್ನೂ ಸರಿಯಾಗಿ ಮಾಡಿದ್ದರೆ, ಲಿಂಕ್ ಅನ್ನು ಕ್ಲಿಕ್ ಮಾಡುವ ಮೂಲಕ ನೀವು ಈ ರೀತಿಯದನ್ನು ನೋಡಬೇಕು

ಆಸ್ಟರಿಸ್ಕ್ ಮತ್ತು ಬಿಟ್ರಿಕ್ಸ್ 24 ರ ಏಕೀಕರಣ

Bitrix24 ಅನ್ನು ಹೊಂದಿಸಲಾಗುತ್ತಿದೆ

ಎರಡು ವೆಬ್‌ಹೂಕ್‌ಗಳನ್ನು ರಚಿಸೋಣ.

ಒಳಬರುವ ವೆಬ್‌ಹುಕ್.

ನಿರ್ವಾಹಕ ಖಾತೆಯ ಅಡಿಯಲ್ಲಿ (ಐಡಿ 1 ನೊಂದಿಗೆ), ಮಾರ್ಗವನ್ನು ಅನುಸರಿಸಿ: ಅಪ್ಲಿಕೇಶನ್‌ಗಳು -> ವೆಬ್‌ಹೂಕ್ಸ್ -> ವೆಬ್‌ಹೂಕ್ ಸೇರಿಸಿ -> ಒಳಬರುವ ವೆಬ್‌ಹೂಕ್

ಆಸ್ಟರಿಸ್ಕ್ ಮತ್ತು ಬಿಟ್ರಿಕ್ಸ್ 24 ರ ಏಕೀಕರಣ

ಸ್ಕ್ರೀನ್‌ಶಾಟ್‌ಗಳಂತೆ ಒಳಬರುವ ವೆಬ್‌ಹೂಕ್‌ನ ನಿಯತಾಂಕಗಳನ್ನು ಭರ್ತಿ ಮಾಡಿ:

ಆಸ್ಟರಿಸ್ಕ್ ಮತ್ತು ಬಿಟ್ರಿಕ್ಸ್ 24 ರ ಏಕೀಕರಣ

ಆಸ್ಟರಿಸ್ಕ್ ಮತ್ತು ಬಿಟ್ರಿಕ್ಸ್ 24 ರ ಏಕೀಕರಣ

ಮತ್ತು ಉಳಿಸು ಕ್ಲಿಕ್ ಮಾಡಿ.

ಉಳಿಸಿದ ನಂತರ, Bitrix24 ಒಳಬರುವ ವೆಬ್‌ಹೂಕ್‌ನ URL ಅನ್ನು ಒದಗಿಸುತ್ತದೆ, ಉದಾಹರಣೆಗೆ:

ಆಸ್ಟರಿಸ್ಕ್ ಮತ್ತು ಬಿಟ್ರಿಕ್ಸ್ 24 ರ ಏಕೀಕರಣ

ಅಂತಿಮ /ಪ್ರೊಫೈಲ್/ ಇಲ್ಲದೆಯೇ ನಿಮ್ಮ URL ಆವೃತ್ತಿಯನ್ನು ಉಳಿಸಿ - ಒಳಬರುವ ಕರೆಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ಇದನ್ನು ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಬಳಸಲಾಗುತ್ತದೆ.

ನನ್ನ ಬಳಿ ಇದು ಇದೆ https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/

ಹೊರಹೋಗುವ ವೆಬ್‌ಹೂಕ್.

ಅಪ್ಲಿಕೇಶನ್‌ಗಳು -> ವೆಬ್‌ಹೂಕ್‌ಗಳು -> ವೆಬ್‌ಹೂಕ್ ಸೇರಿಸಿ -> ಹೊರಹೋಗುವ ವೆಬ್‌ಹೂಕ್

ವಿವರಗಳು ಮತ್ತೆ ಸ್ಕ್ರೀನ್‌ಶಾಟ್‌ಗಳಲ್ಲಿವೆ:

ಆಸ್ಟರಿಸ್ಕ್ ಮತ್ತು ಬಿಟ್ರಿಕ್ಸ್ 24 ರ ಏಕೀಕರಣ

ಆಸ್ಟರಿಸ್ಕ್ ಮತ್ತು ಬಿಟ್ರಿಕ್ಸ್ 24 ರ ಏಕೀಕರಣ

ದೃಢೀಕರಣ ಕೋಡ್ ಅನ್ನು ಉಳಿಸಿ ಮತ್ತು ಸ್ವೀಕರಿಸಿ

ಆಸ್ಟರಿಸ್ಕ್ ಮತ್ತು ಬಿಟ್ರಿಕ್ಸ್ 24 ರ ಏಕೀಕರಣ

ನನ್ನ ಬಳಿ ಇದು ಇದೆ xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6. ನೀವು ಅದನ್ನು ನಿಮಗಾಗಿ ನಕಲಿಸಬೇಕಾಗುತ್ತದೆ; ಹೊರಹೋಗುವ ಕರೆಗಳನ್ನು ಮಾಡಲು ನಿಮಗೆ ಇದು ಬೇಕಾಗುತ್ತದೆ.

ಪ್ರಮುಖ!

Bitrix24 ಸರ್ವರ್‌ನಲ್ಲಿ SSL ಪ್ರಮಾಣಪತ್ರವನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಬೇಕು (ನೀವು letsencrypt ಅನ್ನು ಬಳಸಬಹುದು), ಇಲ್ಲದಿದ್ದರೆ Bitrix api ಕಾರ್ಯನಿರ್ವಹಿಸುವುದಿಲ್ಲ. ನೀವು ಕ್ಲೌಡ್ ಆವೃತ್ತಿಯನ್ನು ಹೊಂದಿದ್ದರೆ, ಚಿಂತಿಸಬೇಡಿ - ಇದು ಈಗಾಗಲೇ ssl ಅನ್ನು ಹೊಂದಿದೆ.

ಪ್ರಮುಖ!

"ಪ್ರೊಸೆಸರ್ ವಿಳಾಸ" ಕ್ಷೇತ್ರವು ಇಂಟರ್ನೆಟ್ನಿಂದ ಪ್ರವೇಶಿಸಬಹುದಾದ ವಿಳಾಸವನ್ನು ಹೊಂದಿರಬೇಕು!

ಮತ್ತು ಅಂತಿಮ ಸ್ಪರ್ಶವಾಗಿ, ಕರೆಗಳನ್ನು ಮಾಡಲು ನಮ್ಮ CallMeOut ಅನ್ನು ಅಪ್ಲಿಕೇಶನ್‌ನಂತೆ ಸ್ಥಾಪಿಸೋಣ (ಆದ್ದರಿಂದ ನೀವು PBX ನಲ್ಲಿನ ಸಂಖ್ಯೆಯನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ, ಕರೆಯನ್ನು ಹುಟ್ಟುಹಾಕುವ ಆಜ್ಞೆಯು ಹಾರಿಹೋಗುತ್ತದೆ).

ಮೆನುವಿನಲ್ಲಿ, ಆಯ್ಕೆಮಾಡಿ: ಇನ್ನಷ್ಟು -> ಟೆಲಿಫೋನಿ -> ಇನ್ನಷ್ಟು -> ಸೆಟ್ಟಿಂಗ್‌ಗಳು, "ಡೀಫಾಲ್ಟ್ ಹೊರಹೋಗುವ ಕರೆ ಸಂಖ್ಯೆ" ನಲ್ಲಿ ಹೊಂದಿಸಿ ಅಪ್ಲಿಕೇಶನ್: CallMeOut ಮತ್ತು "ಉಳಿಸು" ಕ್ಲಿಕ್ ಮಾಡಿ

ಆಸ್ಟರಿಸ್ಕ್ ಮತ್ತು ಬಿಟ್ರಿಕ್ಸ್ 24 ರ ಏಕೀಕರಣ

ನಕ್ಷತ್ರ ಚಿಹ್ನೆಯನ್ನು ಹೊಂದಿಸಲಾಗುತ್ತಿದೆ

Asterisk ಮತ್ತು Bitrix24 ನಡುವಿನ ಯಶಸ್ವಿ ಸಂವಹನಕ್ಕಾಗಿ, ನಾವು AMI ಬಳಕೆದಾರ callme ಅನ್ನು manager.conf ಗೆ ಸೇರಿಸಬೇಕಾಗಿದೆ:

[callme]
secret = JD3clEB8_f23r-3ry84gJ
deny = 0.0.0.0/0.0.0.0
permit = 127.0.0.1/255.255.255.0
permit= 10.100.111.249/255.255.255.255
permit = 192.168.254.0/255.255.255.0
read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
write = system,call,agent,log,verbose,user,config,command,reporting,originate

ಮುಂದೆ, ಡಯಲ್‌ಪ್ಲಾನ್ ಮೂಲಕ ಕಾರ್ಯಗತಗೊಳಿಸಬೇಕಾದ ಹಲವಾರು ತಂತ್ರಗಳಿವೆ (ನಮಗೆ ಇದು extensions.ael ಆಗಿದೆ).

ನಾನು ಸಂಪೂರ್ಣ ಫೈಲ್ ಅನ್ನು ಒದಗಿಸುತ್ತೇನೆ ಮತ್ತು ನಂತರ ನಾನು ವಿವರಣೆಯನ್ನು ನೀಡುತ್ತೇನೆ:

globals {
    WAV=/var/www/pbx.vistep.ru/callme/records/wav; //Временный каталог с WAV
    MP3=/var/www/pbx.vistep.ru/callme/records/mp3; //Куда выгружать mp3 файлы
    URLRECORDS=https://pbx.vistep.ru/callme/records/mp3;
    RECORDING=1; // Запись, 1 - включена.
};

macro recording(calling,called) {
        if ("${RECORDING}" = "1"){
              Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${calling}-${called});
	      Set(datedir=${STRFTIME(${EPOCH},,%Y/%m/%d)});
	      System(mkdir -p ${MP3}/${datedir});
	      System(mkdir -p ${WAV}/${datedir});
              Set(monopt=nice -n 19 /usr/bin/lame -b 32  --silent "${WAV}/${datedir}/${fname}.wav"  "${MP3}/${datedir}/${fname}.mp3" && rm -f "${WAV}/${fname}.wav" && chmod o+r "${MP3}/${datedir}/${fname}.mp3");
	      Set(FullFname=${URLRECORDS}/${datedir}/${fname}.mp3);
              Set(CDR(filename)=${fname}.mp3);
	      Set(CDR(recordingfile)=${fname}.wav);
              Set(CDR(realdst)=${called});
              MixMonitor(${WAV}/${datedir}/${fname}.wav,b,${monopt});

       };
};


context incoming {
888999 => {
	&recording(${CALLERID(number)},${EXTEN});
        Answer();
        ExecIF(${CallMeCallerIDName}?Set(CALLERID(name)=${CallMeCallerIDName}):NoOp()); // выставляем CallerID если узнали его у Битрикс24
        Set(CallStart=${STRFTIME(epoch,,%s)});  
        Queue(Q1,tT);
        Set(CallMeDISPOSITION=${CDR(disposition)}); 
        Hangup();
        }

h => {
    Set(CDR_PROP(disable)=true); 
    Set(CallStop=${STRFTIME(epoch,,%s)}); 
    Set(CallMeDURATION=${MATH(${CallStop}-${CallStart},int)}); 
    ExecIF(${ISNULL(${CallMeDISPOSITION})}?Set(CallMeDISPOSITION=${CDR(disposition)}):NoOP(=== CallMeDISPOSITION already was set ===));  
}

}


context default {

_X. => {
        Hangup();
        }
};


context dial_out {

_[1237]XX => {
	&recording(${CALLERID(number)},${EXTEN});
        Set(__CallIntNum=${CALLERID(num)})
	Set(CallStart=${STRFTIME(epoch,,%s)});
        Dial(SIP/${EXTEN},,tTr);
        Hangup();
        }

_11XXX => {
	&recording(${CALLERID(number)},${EXTEN});
	Set(CallStart=${STRFTIME(epoch,,%s)});
	Set(__CallIntNum=${CALLERID(num)});
        Dial(SIP/${EXTEN:2}@toOurAster,,t);
        Hangup();
        }

_. => {
	&recording(${CALLERID(number)},${EXTEN});
        Set(__CallIntNum=${CALLERID(num)})
	Set(CallStart=${STRFTIME(epoch,,%s)});
	Dial(SIP/${EXTEN}@toOurAster,,t);
	Hangup();
        }

h => {
        Set(CDR_PROP(disable)=true);
        Set(CallStop=${STRFTIME(epoch,,%s)});
        Set(CallMeDURATION=${MATH(${CallStop}-${CallStart},int)});
	if(${ISNULL(${CallMeDISPOSITION})}) {
          Set(CallMeDISPOSITION=${CDR(disposition)});
        }
	System(curl -s http://pbx.vistep.ru/CallMeOut.php --data action=sendcall2b24 --data call_id=${CallMeCALL_ID} --data-urlencode FullFname=${FullFname} --data CallIntNum=${CallIntNum} --data CallDuration=${CallMeDURATION} --data-urlencode CallDisposition=${CallMeDISPOSITION});
}

};

ಮೊದಲಿನಿಂದ ಪ್ರಾರಂಭಿಸೋಣ: ನಿರ್ದೇಶನ ಗ್ಲೋಬಲ್ಸ್.

ವೇರಿಯಬಲ್ URL ರೆಕಾರ್ಡ್ಸ್ ಸಂಭಾಷಣೆ ರೆಕಾರ್ಡಿಂಗ್ ಫೈಲ್‌ಗಳಿಗೆ URL ಅನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ, ಅದರ ಪ್ರಕಾರ Bitrix24 ಅವುಗಳನ್ನು ಸಂಪರ್ಕ ಕಾರ್ಡ್‌ಗೆ ಎಳೆಯುತ್ತದೆ.

ಮುಂದೆ ನಾವು ಮ್ಯಾಕ್ರೋ ಮ್ಯಾಕ್ರೋದಲ್ಲಿ ಆಸಕ್ತಿ ಹೊಂದಿದ್ದೇವೆ ರೆಕಾರ್ಡಿಂಗ್.

ಇಲ್ಲಿ, ಸಂಭಾಷಣೆಗಳನ್ನು ರೆಕಾರ್ಡ್ ಮಾಡುವುದರ ಜೊತೆಗೆ, ನಾವು ವೇರಿಯಬಲ್ ಅನ್ನು ಹೊಂದಿಸುತ್ತೇವೆ ಪೂರ್ಣ ಹೆಸರು.

Set(FullFname=${URLRECORDS}/${datedir}/${fname}.mp3);

ಇದು ಸಂಪೂರ್ಣ URL ಅನ್ನು ನಿರ್ದಿಷ್ಟ ಫೈಲ್‌ಗೆ ಸಂಗ್ರಹಿಸುತ್ತದೆ (ಮ್ಯಾಕ್ರೋವನ್ನು ಎಲ್ಲೆಡೆ ಕರೆಯಲಾಗುತ್ತದೆ).

ಹೊರಹೋಗುವ ಕರೆಯನ್ನು ವಿಶ್ಲೇಷಿಸೋಣ:

_. => {
	&recording(${CALLERID(number)},${EXTEN});
        Set(__CallIntNum=${CALLERID(num)})
	Set(CallStart=${STRFTIME(epoch,,%s)});
	Dial(SIP/${EXTEN}@toOurAster,,t);
	Hangup();
        }

h => {
        Set(CDR_PROP(disable)=true);
        Set(CallStop=${STRFTIME(epoch,,%s)});
        Set(CallMeDURATION=${MATH(${CallStop}-${CallStart},int)});
	if(${ISNULL(${CallMeDISPOSITION})}) {
          Set(CallMeDISPOSITION=${CDR(disposition)});
        }
	System(curl -s http://pbx.vistep.ru/CallMeOut.php --data action=sendcall2b24 --data call_id=${CallMeCALL_ID} --data-urlencode FullFname=${FullFname} --data CallIntNum=${CallIntNum} --data CallDuration=${CallMeDURATION} --data-urlencode CallDisposition=${CallMeDISPOSITION});
}

ನಾವು 89991234567 ಗೆ ಕರೆ ಮಾಡುತ್ತೇವೆ ಎಂದು ಹೇಳೋಣ, ಮೊದಲನೆಯದಾಗಿ ನಾವು ಇಲ್ಲಿಗೆ ಬರುತ್ತೇವೆ:

&recording(${CALLERID(number)},${EXTEN});

ಆ. ಸಂಭಾಷಣೆಯನ್ನು ರೆಕಾರ್ಡಿಂಗ್ ಮ್ಯಾಕ್ರೋ ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ ಮತ್ತು ಅಗತ್ಯ ಅಸ್ಥಿರಗಳನ್ನು ಹೊಂದಿಸಲಾಗಿದೆ.

ಮತ್ತಷ್ಟು

        Set(__CallIntNum=${CALLERID(num)})
	Set(CallStart=${STRFTIME(epoch,,%s)});

ಕರೆಯನ್ನು ಪ್ರಾರಂಭಿಸಿದವರನ್ನು ನಾವು ರೆಕಾರ್ಡ್ ಮಾಡುತ್ತೇವೆ ಮತ್ತು ಕರೆ ಪ್ರಾರಂಭದ ಸಮಯವನ್ನು ರೆಕಾರ್ಡ್ ಮಾಡುತ್ತೇವೆ.

ಮತ್ತು ಅದರ ಪೂರ್ಣಗೊಂಡ ನಂತರ, ವಿಶೇಷ ಸಂದರ್ಭದಲ್ಲಿ h

h => {
        Set(CDR_PROP(disable)=true);
        Set(CallStop=${STRFTIME(epoch,,%s)});
        Set(CallMeDURATION=${MATH(${CallStop}-${CallStart},int)});
	if(${ISNULL(${CallMeDISPOSITION})}) {
          Set(CallMeDISPOSITION=${CDR(disposition)});
        }
	System(curl -s http://pbx.vistep.ru/CallMeOut.php --data action=sendcall2b24 --data call_id=${CallMeCALL_ID} --data-urlencode FullFname=${FullFname} --data CallIntNum=${CallIntNum} --data CallDuration=${CallMeDURATION} --data-urlencode CallDisposition=${CallMeDISPOSITION});
}

ಈ ವಿಸ್ತರಣೆಗಾಗಿ CDR ಟೇಬಲ್‌ಗೆ ಪ್ರವೇಶವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ (ಅದು ಅಲ್ಲಿ ಅಗತ್ಯವಿಲ್ಲ), ಕರೆಯ ಅಂತಿಮ ಸಮಯವನ್ನು ಹೊಂದಿಸಿ, ಅವಧಿಯನ್ನು ಲೆಕ್ಕಹಾಕಿ, ಕರೆಯ ಫಲಿತಾಂಶವು ತಿಳಿದಿಲ್ಲದಿದ್ದರೆ - ಸೆಟ್ (ವೇರಿಯಬಲ್ ಕರೆಮೆಡಿಸ್ಪೋಸಿಷನ್) ಮತ್ತು, ಕೊನೆಯ ಹಂತ, ಸಿಸ್ಟಮ್ ಕರ್ಲ್ ಮೂಲಕ ಬಿಟ್ರಿಕ್ಸ್‌ಗೆ ಎಲ್ಲವನ್ನೂ ಕಳುಹಿಸಿ.

ಮತ್ತು ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಮ್ಯಾಜಿಕ್ - ಒಳಬರುವ ಕರೆ:

888999 => {
	&recording(${CALLERID(number)},${EXTEN});
        Answer();
        ExecIF(${CallMeCallerIDName}?Set(CALLERID(name)=${CallMeCallerIDName}):NoOp()); // выставляем CallerID если узнали его у Битрикс24
        Set(CallStart=${STRFTIME(epoch,,%s)}); // начинаем отсчет времени звонка
        Queue(Q1,tT);
        Set(CallMeDISPOSITION=${CDR(disposition)}); 
        Hangup();
        }

ಇಲ್ಲಿ ನಾವು ಒಂದು ಸಾಲಿನಲ್ಲಿ ಮಾತ್ರ ಆಸಕ್ತಿ ಹೊಂದಿದ್ದೇವೆ.

ExecIF(${CallMeCallerIDName}?Set(CALLERID(name)=${CallMeCallerIDName}):NoOp());

PBX ಅನ್ನು ಸ್ಥಾಪಿಸಲು ಅವಳು ಹೇಳುತ್ತಾಳೆ ಕಾಲರ್ ಐಡಿ(ಹೆಸರು) ವೇರಿಯಬಲ್ಗೆ ಸಮಾನವಾಗಿರುತ್ತದೆ CallMeCallerIDName.

CallMeCallerIDName ವೇರಿಯೇಬಲ್ ಅನ್ನು ಸ್ವತಃ CallMe ಅಪ್ಲಿಕೇಶನ್‌ನಿಂದ ಹೊಂದಿಸಲಾಗಿದೆ (Bitrix24 ಕರೆ ಮಾಡುವವರ ಸಂಖ್ಯೆಗೆ ಪೂರ್ಣ ಹೆಸರನ್ನು ಹೊಂದಿದ್ದರೆ, ಅದನ್ನು ಹೀಗೆ ಹೊಂದಿಸಿ ಕಾಲರ್ ಐಡಿ(ಹೆಸರು), ಇಲ್ಲ - ನಾವು ಏನನ್ನೂ ಮಾಡುವುದಿಲ್ಲ).

ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಹೊಂದಿಸಲಾಗುತ್ತಿದೆ

ಅಪ್ಲಿಕೇಶನ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳ ಫೈಲ್ - /var/www/pbx.vistep.ru/config.php

ಅಪ್ಲಿಕೇಶನ್ ನಿಯತಾಂಕಗಳ ವಿವರಣೆ:

  • ಕಾಲ್‌ಮೀಡೆಬಗ್ — 1 ಆಗಿದ್ದರೆ, ಅಪ್ಲಿಕೇಶನ್‌ನಿಂದ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲಾದ ಎಲ್ಲಾ ಈವೆಂಟ್‌ಗಳನ್ನು ಲಾಗ್ ಫೈಲ್‌ಗೆ ಬರೆಯಲಾಗುತ್ತದೆ, 0 — ನಾವು ಏನನ್ನೂ ಬರೆಯುವುದಿಲ್ಲ
  • ಟೆಕ್ - SIP/PJSIP/IAX/ಇತ್ಯಾದಿ
  • authToken — Bitrix24 ದೃಢೀಕರಣ ಟೋಕನ್, ಹೊರಹೋಗುವ ವೆಬ್‌ಹೂಕ್ ದೃಢೀಕರಣ ಕೋಡ್
  • bitrixApiUrl - ಪ್ರೊಫೈಲ್ ಇಲ್ಲದೆ ಒಳಬರುವ ವೆಬ್‌ಹೂಕ್‌ನ URL/
  • ವಿಸ್ತರಣೆಗಳು - ಬಾಹ್ಯ ಸಂಖ್ಯೆಗಳ ಪಟ್ಟಿ
  • ಸನ್ನಿವೇಶ - ಕರೆ ಹುಟ್ಟುವ ಸಂದರ್ಭ
  • ಕೇಳುಗ_ಸಮಯ ಮೀರಿದೆ - ನಕ್ಷತ್ರ ಚಿಹ್ನೆಯಿಂದ ಈವೆಂಟ್ ಪ್ರಕ್ರಿಯೆಯ ವೇಗ
  • ನಕ್ಷತ್ರ ಚಿಹ್ನೆ - ನಕ್ಷತ್ರ ಚಿಹ್ನೆಗೆ ಸಂಪರ್ಕಿಸಲು ಸೆಟ್ಟಿಂಗ್‌ಗಳೊಂದಿಗೆ ಒಂದು ಶ್ರೇಣಿ:
  • ಹೋಸ್ಟ್ — ip ಅಥವಾ ನಕ್ಷತ್ರಾಕಾರದ ಸರ್ವರ್‌ನ ಹೋಸ್ಟ್ ಹೆಸರು
  • ಯೋಜನೆ - ಸಂಪರ್ಕ ರೇಖಾಚಿತ್ರ (tcp://, tls://)
  • ಬಂದರು - ಬಂದರು
  • ಬಳಕೆದಾರ ಹೆಸರು - ಬಳಕೆದಾರ ಹೆಸರು
  • ರಹಸ್ಯ - ಗುಪ್ತಪದ
  • ಕನೆಕ್ಟ್_ಟೈಮ್ ಔಟ್ - ಸಂಪರ್ಕದ ಅವಧಿ ಮೀರಿದೆ
  • ಓದು_ಸಮಯ ಮೀರಿದೆ - ಸಮಯ ಮೀರಿದೆ ಓದಿ

ಉದಾಹರಣೆಗೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳ ಫೈಲ್:

 <?php
return array(

        'CallMeDEBUG' => 1, // дебаг сообщения в логе: 1 - пишем, 0 - не пишем
        'tech' => 'SIP',
        'authToken' => 'xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6', //токен авторизации битрикса
        'bitrixApiUrl' => 'https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/', //url к api битрикса (входящий вебхук)
        'extentions' => array('888999'), // список внешних номеров, через запятую
        'context' => 'dial_out', //исходящий контекст для оригинации звонка
        'asterisk' => array( // настройки для подключения к астериску
                    'host' => '10.100.111.249',
                    'scheme' => 'tcp://',
                    'port' => 5038,
                    'username' => 'callme',
                    'secret' => 'JD3clEB8_f23r-3ry84gJ',
                    'connect_timeout' => 10000,
                    'read_timeout' => 10000
                ),
        'listener_timeout' => 300, //скорость обработки событий от asterisk

);

ಮೇಲ್ವಿಚಾರಕ ಸೆಟಪ್

ಮೇಲ್ವಿಚಾರಕರನ್ನು Asterisk CallMeIn.php ನಿಂದ ಈವೆಂಟ್ ಹ್ಯಾಂಡ್ಲರ್ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಪ್ರಾರಂಭಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ, ಇದು ಒಳಬರುವ ಕರೆಗಳನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುತ್ತದೆ ಮತ್ತು Bitrix24 ನೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸುತ್ತದೆ (ಕಾರ್ಡ್ ತೋರಿಸಿ, ಕಾರ್ಡ್ ಮರೆಮಾಡಿ, ಇತ್ಯಾದಿ.).

ರಚಿಸಬೇಕಾದ ಸೆಟ್ಟಿಂಗ್‌ಗಳ ಫೈಲ್:

/etc/supervisord.d/callme.conf

[program:callme]
command=/usr/bin/php CallMeIn.php
directory=/var/www/pbx.vistep.ru
autostart=true
autorestart=true
startretries=5
stderr_logfile=/var/www/pbx.vistep.ru/logs/daemon.log
stdout_logfile=/var/www/pbx.vistep.ru/logs/daemon.log

ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಿ ಮತ್ತು ಮರುಪ್ರಾರಂಭಿಸಿ:

supervisorctl start callme
supervisorctl restart callme

ಅಪ್ಲಿಕೇಶನ್‌ನ ಕಾರ್ಯಾಚರಣೆಯ ಸ್ಥಿತಿಯನ್ನು ವೀಕ್ಷಿಸಲಾಗುತ್ತಿದೆ:

supervisorctl status callme
callme                           RUNNING   pid 11729, uptime 17 days, 16:58:07

ತೀರ್ಮಾನಕ್ಕೆ

ಇದು ಸಾಕಷ್ಟು ಜಟಿಲವಾಗಿದೆ, ಆದರೆ ಅನುಭವಿ ನಿರ್ವಾಹಕರು ಅದನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಮತ್ತು ಅವರ ಬಳಕೆದಾರರನ್ನು ಮೆಚ್ಚಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ ಎಂದು ನನಗೆ ಖಾತ್ರಿಯಿದೆ.

ಭರವಸೆ ನೀಡಿದಂತೆ, github ಗೆ ಲಿಂಕ್.

ಪ್ರಶ್ನೆಗಳು, ಸಲಹೆಗಳು - ದಯವಿಟ್ಟು ಅವುಗಳನ್ನು ಕಾಮೆಂಟ್‌ಗಳಲ್ಲಿ ಬಿಡಿ. ಅಲ್ಲದೆ, ಈ ಏಕೀಕರಣದ ಅಭಿವೃದ್ಧಿಯು ಹೇಗೆ ಹೋಯಿತು ಎಂಬುದರ ಬಗ್ಗೆ ನೀವು ಆಸಕ್ತಿ ಹೊಂದಿದ್ದರೆ, ಬರೆಯಿರಿ ಮತ್ತು ಮುಂದಿನ ಲೇಖನದಲ್ಲಿ ನಾನು ಎಲ್ಲವನ್ನೂ ಹೆಚ್ಚು ವಿವರವಾಗಿ ಬಹಿರಂಗಪಡಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತೇನೆ.

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ