د Asterisk او Bitrix24 ادغام

د Asterisk او Bitrix24 ادغام
شبکه د IP-PBX Asterisk او CRM Bitrix24 یوځای کولو لپاره مختلف اختیارونه لري، مګر موږ، سره له دې، پریکړه وکړه چې خپل ځان ولیکئ.

په عملي توګه، هرڅه معیاري دي:

  • په Bitrix24 کې د مراجعینو د تلیفون شمیرې سره په لینک باندې کلیک کولو سره، Asterisk د هغه کاروونکي داخلي شمیره نښلوي چې دا کلیک د پیرودونکي د تلیفون شمیرې سره شوی. په Bitrix24 کې، د تلیفون ریکارډ ثبت شوی، او د زنګ په پای کې، د خبرو اترو ریکارډ پورته کیږي.
  • Asterisk ته له بهر څخه یو زنګ راځي - په Bitrix24 انٹرفیس کې، موږ د پیرودونکي کارت هغه کارمند ته وښایه چې د چا شمیره ته دا زنګ راغلی.
    که چیرې داسې پیرودونکي شتون ونلري، نو د نوي لیډ جوړولو لپاره کارت خلاص کړئ.
    هرڅومره ژر چې زنګ بشپړ شي ، موږ دا په کارت کې منعکس کوو او د خبرو ثبت کول پورته کوو.

د کټ لاندې ، زه به تاسو ته ووایم چې څنګه د ځان لپاره هرڅه تنظیم کړئ او ګیتوب ته لینک ورکړئ - هو ، هو ، دا یې واخلئ او وکاروئ!

عمومي توضیحات

موږ خپل ادغام ته CallMe نوم ورکړ. CallMe یو کوچنی ویب غوښتنلیک دی چې په PHP کې لیکل شوی.

کارول شوي ټیکنالوژي او خدمات

  • پی پی ایکس ایکسیمکس
  • د PHP AMI کتابتون
  • کمپوز
  • nginx + php fpm
  • څارونکي
  • AMI (Asterisk Manager Interface)
  • د بټریکس ویب هکس (د REST API ساده کول)

presetting

د Asterisk سره په سرور کې، تاسو اړتیا لرئ د ویب سرور نصب کړئ (موږ nginx + php-fpm لرو)، څارونکي او git.

د نصب کولو قومانده (CentOS):

yum install nginx php-fpm supervisor git

موږ ویب سرور ته موجود لارښود انتقال کوو، غوښتنلیک له ګیټ څخه راوباسئ او فولډر ته اړین حقونه تنظیم کړئ:


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

بیا، نګینکس تنظیم کړئ، زموږ ترتیب په کې موقعیت لري

/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 لرو، راځئ چې سند کوډ کړو.

که تاسو هرڅه په سمه توګه ترسره کړي، نو د لینک په کلیک کولو سره تاسو باید داسې یو څه وګورئ

د Asterisk او Bitrix24 ادغام

د Bitrix24 تنظیم کول

راځئ چې دوه ویب هکونه جوړ کړو.

راتلونکی ویب هک.

د مدیر حساب لاندې (د 1 ID سره) د لارې په اوږدو کې لاړ شئ: غوښتنلیکونه -> ویب هکس -> ویب هک اضافه کړئ -> راتلونکی ویب هک

د Asterisk او Bitrix24 ادغام

د راتلوونکي ویب هک پیرامیټونه ډک کړئ لکه څنګه چې په سکرین شاټونو کې دي:

د Asterisk او Bitrix24 ادغام

د Asterisk او Bitrix24 ادغام

او خوندي کلیک وکړئ.

د خوندي کولو وروسته، Bitrix24 به د راتلونکی ویب هک URL چمتو کړي، د بیلګې په توګه:

د Asterisk او Bitrix24 ادغام

ستاسو د URL نسخه پرته له تعقیب / پروفایل/ خوندي کړئ - دا به په غوښتنلیک کې د راتلونکو تلیفونونو سره کار کولو لپاره وکارول شي.

زه یې لرم https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/

وتلی ویب هک.

غوښتنلیکونه -> ویب هکس -> ویب هوک اضافه کړئ -> بهر ته روان ویب هک

جزیات په سکرین شاټونو کې دي:

د Asterisk او Bitrix24 ادغام

د Asterisk او Bitrix24 ادغام

د جواز کوډ خوندي کړئ او ترلاسه کړئ

د Asterisk او Bitrix24 ادغام

زه یې لرم xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6. تاسو اړتیا لرئ دا د ځان لپاره کاپي کړئ؛ تاسو دې ته اړتیا لرئ د وتلو تلیفونونو لپاره.

مهم!

د ایس ایس ایل سند باید په Bitrix24 سرور کې تنظیم شي (تاسو کولی شئ letsencrypt وکاروئ)، که نه نو د BitrixXNUMX api به کار ونکړي. که تاسو د بادل نسخه لرئ، اندیښنه مه کوئ - ssl لا دمخه شتون لري.

مهم!

د "پروسیسر پته" ساحه کې، د انټرنیټ څخه د لاسرسي وړ پته باید په نښه شي!

او د وروستي تماس سره، راځئ چې د زنګ وهلو لپاره د غوښتنلیک په توګه زموږ CallMeOut نصب کړو (د دې لپاره چې په PBX کې په شمیره کلیک کولو سره، یو کمانډ به د تلیفون پیل کولو لپاره الوتنه وکړي).

په مینو کې، غوره کړئ: نور -> ټیلیفوني -> نور -> ترتیبات، "د ډیفالټ لخوا د وتلو کالونو لپاره شمیره" کې واچوئ: CallMeOut او "Save" کلیک وکړئ.

د Asterisk او Bitrix24 ادغام

ستوری ترتیب

د Asterisk او Bitrix24 ترمنځ د بریالي تعامل لپاره، موږ اړتیا لرو چې د callme AMI کاروونکي په 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});
}

};

راځئ چې له پیل څخه پیل وکړو: لارښود نړیوال.

متغیر URLRECORDS 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 جدول کې ننوتل بند کړئ (هلته اړتیا نشته) ، د زنګ پای وخت وټاکئ ، موده محاسبه کړئ ، که د زنګ پایله معلومه نه وي - ترتیب کړئ (متغیر ما ته زنګ ووهئ DISPOSITION) او، وروستی ګام، هرڅه د سیسټم curl له لارې Bitrix ته واستوئ.

او یو څه نور جادو - یو راتلونکی کال:

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 نصب کړئ کالر ID(نوم) متغیر CallMeCallerIDName.

د CallMeCallerIDName متغیر پخپله د CallMe غوښتنلیک لخوا تنظیم شوی (که Bitrix24 د زنګ وهونکي شمیرې لپاره بشپړ نوم ولري، موږ به یې په توګه وټاکو. کالر ID(نوم)، نه - موږ به هیڅ ونه کړو).

د غوښتنلیک تنظیم کول

د غوښتنلیک ترتیبات فایل - /var/www/pbx.vistep.ru/config.php

د غوښتنلیک پیرامیټونو توضیحات:

  • میډیبګ ته زنګ ووهئ - که 1 وي، نو د غوښتنلیک لخوا پروسس شوي ټولې پیښې به د لاګ فایل ته ولیکل شي، 0 - موږ هیڅ نه لیکو
  • سمباله SIP/PJSIP/IAX/etc
  • authToken - د Bitrix24 اجازه لیک نښه، د وتلو ویب هک اختیار کوډ
  • bitrixApiUrl - د راتلونکی ویب هک URL، پرته له پروفایل/
  • تمدیدونه - د بهرنیو شمیرو لیست
  • شرایط - د زنګ وهلو لپاره شرایط
  • اوریدونکی_ وخت پای - د ستوري څخه د پیښې پروسس کولو سرعت
  • ستاره - ستوري ته د پیوستون ترتیباتو سره یو لړ:
  • کوربه - د ستوري سرور ip یا کوربه نوم
  • پلان - د پیوستون ډیاګرام (tcp://, tls://)
  • بندر - بندر
  • کارن نوم - کارن نوم
  • پټ - رمز
  • connect_timeout - د پیوستون مهال ویش
  • د لوستلو_ مهال ویش - د لوستلو مهال ویش

د مثال د ترتیباتو فایل:

 <?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

پایلې

دا خورا ستونزمن وګرځید، مګر زه ډاډه یم چې یو تجربه لرونکی مدیر به وکولی شي خپل کاروونکي پلي او خوښ کړي.

لکه څنګه چې ژمنه شوې وه، د ګیتوب سره لینک.

پوښتنې، وړاندیزونه - مهرباني وکړئ په نظرونو کې. همچنان ، که تاسو علاقه لرئ چې د دې ادغام پرمختګ څنګه پرمخ لاړ ، ولیکئ ، او په راتلونکي مقاله کې به زه هڅه وکړم چې هرڅه په ډیر تفصیل سره څرګند کړم.

سرچینه: www.habr.com

Add a comment