Comhtháthú réiltín agus Bitrix24

Comhtháthú réiltín agus Bitrix24
Tá roghanna éagsúla ann maidir le IP-PBX Asterisk agus CRM Bitrix24 a chomhtháthú ar an líonra, ach shocraigh muid fós ár gcuid féin a scríobh.

I dtéarmaí feidhmiúlacht, tá gach rud caighdeánach:

  • Trí chliceáil ar nasc le huimhir theileafóin an chliaint i Bitrix24, nascann Asterisk uimhir inmheánach an úsáideora a ndearnadh an cliceáil ar a shon le uimhir theileafóin an chliaint. In Bitrix24, déantar taifead den ghlao agus ag deireadh an ghlao, tarraingítear suas taifeadadh den chomhrá.
  • Faigheann réiltín glao ón taobh amuigh - sa chomhéadan Bitrix24 taispeánaimid an cárta cliaint don fhostaí ar tháinig an glao seo chuige.
    Mura bhfuil cliant den sórt sin ann, osclóidh muid an cárta chun luaidhe nua a chruthú.
    Chomh luath agus a bhíonn an glao críochnaithe, déanaimid é seo a léiriú ar an gcárta agus tarraingímid suas taifeadadh den chomhrá.

Faoi bhun an ghearrtha inseoidh mé duit conas gach rud a shocrú duit féin agus nasc a thabhairt duit le github - sea, sea, tóg é agus bain úsáid as!

Cur síos ginearálta

Thugamar CallMe ar ár gcomhtháthú. Is feidhmchlár gréasáin beag é CallMe atá scríofa i PHP.

Teicneolaíochtaí agus seirbhísí a úsáidtear

  • PHP 5.6
  • Leabharlann php AMI
  • Cumadóir
  • Nginx + php-fpm
  • maoirseoir
  • AMI (Comhéadan Bainisteoir Réiltín)
  • Webbhooks Bitrix (cur i bhfeidhm simplithe REST API)

réamhshocrú

Ar fhreastalaí le réiltín, ní mór duit freastalaí gréasáin a shuiteáil (is é nginx + php-fpm é), maoirseoir agus git.

Ordú le haghaidh suiteála (CentOS):

yum install nginx php-fpm supervisor git

Téimid chuig an eolaire atá inrochtana don fhreastalaí gréasáin, tarraingimid an feidhmchlár ó Git agus socróimid na cearta riachtanacha don fhillteán:


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

Next, a ligean ar chumrú nginx, tá ár config suite i

/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;
		}
}

Fágfaidh mé an cumraíocht a pharsáil, saincheisteanna slándála, deimhniú a fháil agus fiú freastalaí gréasáin a roghnú lasmuigh de raon feidhme an ailt - tá go leor scríofa faoi seo. Níl aon srianta ar an bhfeidhmchlár, oibríonn sé thar http agus https.

Bainimid úsáid as https, déanaimis deimhniú a chriptiú.

Má rinne tú gach rud i gceart, ansin trí chliceáil ar an nasc ba cheart duit rud éigin mar seo a fheiceáil

Comhtháthú réiltín agus Bitrix24

Suiteáil Bitrix24

Déanaimis dhá chuach gréasáin a chruthú.

Crúca gréasáin ag teacht isteach.

Faoi chuntas an riarthóra (le haitheantas 1), lean an cosán: Feidhmchláir -> Webhooks -> Cuir cuca gréasáin leis -> Crúca gréasáin ag teacht isteach

Comhtháthú réiltín agus Bitrix24

Líon isteach paraiméadair an chua gréasáin isteach mar atá sna screenshots:

Comhtháthú réiltín agus Bitrix24

Comhtháthú réiltín agus Bitrix24

Agus cliceáil shábháil.

Tar éis a shábháil, soláthróidh Bitrix24 URL an chuaille gréasáin atá ag teacht isteach, mar shampla:

Comhtháthú réiltín agus Bitrix24

Sábháil do leagan den URL gan an / próifíl/ deiridh - úsáidfear é san fheidhmchlár chun oibriú le glaonna isteach.

Tá seo agam https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/

Cuaille gréasáin ag dul as oifig.

Feidhmchláir -> Clúdaigh Ghréasáin -> Cuir cuca gréasáin leis -> Cabhsaí gréasáin amach

Sonraí arís ar na screenshots:

Comhtháthú réiltín agus Bitrix24

Comhtháthú réiltín agus Bitrix24

Sábháil agus faigh an cód údaraithe

Comhtháthú réiltín agus Bitrix24

Tá seo agam xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6. Ní mór duit é a chóipeáil duit féin freisin;

Tábhachtach!

Ní mór teastas SSL a chumrú ar an bhfreastalaí Bitrix24 (is féidir leat letsencrypt a úsáid), nó ní oibreoidh an api Bitrix. Má tá leagan scamall agat, ná bíodh imní ort - tá ssl aige cheana féin.

Tábhachtach!

Caithfidh seoladh a bhfuil rochtain air ón Idirlíon a bheith sa réimse “Seoladh Próiseálaí”!

Agus mar theagmháil dheireanach, déanaimis ár CallMeOut a shuiteáil mar iarratas chun glaonna a dhéanamh (ionas go mbeidh an t-ordú chun an glao a thionscnamh ag eitilt nuair a chliceálann tú ar an uimhir ar an PBX).

Sa roghchlár, roghnaigh: Níos mó -> Teileafónaíocht -> Níos mó -> Socruithe, socraigh in “Uimhir ghlao réamhshocraithe amach” Feidhmchlár: CallMeOut agus cliceáil “Sábháil”

Comhtháthú réiltín agus Bitrix24

Réiltín a shocrú

Le haghaidh idirghníomhú rathúil idir Asterisk agus Bitrix24, ní mór dúinn an callme úsáideora AMI a chur le 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

Ansin, tá roinnt cleasanna a chaithfear a chur i bhfeidhm trí dhiailphlean (is é seo dúinne extensions.ael).

Soláthróidh mé an comhad iomlán, agus ansin tabharfaidh mé míniú:

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});
}

};

Let tús ón tús: an treoir cruinne.

Athróg TAIFID URL stórálann an URL chuig na comhaid taifeadta comhrá, dá réir a tharraingeoidh Bitrix24 isteach sa chárta teagmhála iad.

Next tá suim againn sa macra macra taifeadadh.

Anseo, chomh maith le comhráite a thaifeadadh, socróimid an athróg Ainm Lán.

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

Stórálann sé an URL iomlán chuig comhad ar leith (tugtar an macra i ngach áit).

Déanaimis anailís ar an nglao amach:

_. => {
	&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});
}

Ligean le rá go gcuirimid glaoch ar 89991234567, ar an gcéad dul síos théimid anseo:

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

siúd. Glaoitear an macra taifeadta comhrá agus socraítear na hathróga riachtanacha.

Tuilleadh

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

Déanaimid taifead ar cé a chuir tús leis an nglao agus taifeadaimid am tosaithe an ghlao.

Agus nuair a bheidh sé críochnaithe, i gcomhthéacs speisialta 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});
}

díchumasaigh iontráil sa tábla CDR don síneadh seo (níl sé ag teastáil ann), socraigh am deiridh an ghlao, ríomh an fad, mura bhfuil toradh an ghlao ar eolas - socraigh (athraitheach CallMeDISPOSITION) agus, an chéim dheireanach, seol gach rud chuig Bitrix trí chuach an chórais.

Agus beagán níos mó draíochta - glao ag teacht isteach:

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();
        }

Anseo níl suim againn ach i líne amháin.

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

Insíonn sí don PBX a shuiteáil ID Glaoiteora(ainm) comhionann le athróg CallMeCallerIDName.

Socraítear an athróg CallMeCallerIDName féin, faoi seach, leis an bhfeidhmchlár CallMe (má tá ainm iomlán ag Bitrix24 d'uimhir an ghlaoiteora, socraigh mar ID Glaoiteora(ainm), ní hea - ní dhéanfaimid tada).

An t-iarratas a shocrú

Comhad socruithe iarratais - /var/www/pbx.vistep.ru/config.php

Cur síos ar pharaiméadair an fheidhmchláir:

  • Glaoigh MeDEBUG — más 1, scríobhfar chuig an logchomhad, 0 — ní scríobhaimid faic
  • tech - SIP/PJSIP/IAX/etc
  • authToken — Comhartha údaraithe Bitrix24, cód údaraithe cuaille gréasáin atá ag dul as oifig
  • bitrixApiUrl — URL an chuaille atá ag teacht isteach, gan phróifíl/
  • fairsinge — liosta d'uimhreacha seachtracha
  • comhthéacs — comhthéacs inar cuireadh tús le glao
  • am istigh éisteoir — luas próiseála an imeachta ó réiltín
  • réiltín — eagar le socruithe chun nascadh leis an réiltín:
  • óstach — IP nó óstainm an fhreastalaí réiltín
  • scéim — léaráid naisc (tcp: //, tls: //)
  • calafort - port
  • ainm úsáideora - Ainm Úsáideora
  • rúnda - pasfhocal
  • connect_time out — teorainn ama an cheangail
  • am istigh léite - am istigh a léamh

comhad socruithe shampla:

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

);

Socrú an mhaoirseora

Úsáidtear Maoirseoir chun an próiseas láimhseála imeachta a sheoladh ó Asterisk CallMeIn.php, a dhéanann monatóireacht ar ghlaonna isteach agus a idirghníomhaíonn le Bitrix24 (cárta taispeána, cárta folaigh, etc.).

Comhad socruithe le cruthú:

/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

Seoladh agus atosú an feidhmchlár:

supervisorctl start callme
supervisorctl restart callme

Ag féachaint ar stádas oibriúcháin an fheidhmchláir:

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

Conclúid

Iompaigh sé amach a bheith casta go leor, ach tá mé cinnte go mbeidh riarthóir taithí a bheith in ann é a chur i bhfeidhm agus le do thoil a chuid úsáideoirí.

Mar a gealladh, nasc chuig github.

Ceisteanna, moltaí - fág iad le do thoil sna tuairimí. Chomh maith leis sin, má tá suim agat conas a chuaigh forbairt an chomhtháthaithe seo, scríobh, agus sa chéad alt eile déanfaidh mé iarracht gach rud a nochtadh níos mionsonraithe.

Foinse: will.com

Ceannaigh óstáil iontaofa do shuímh le cosaint DDoS, freastalaithe VPS VDS 🔥 Ceannaigh óstáil gréasáin iontaofa le cosaint DDoS, freastalaithe VPS VDS | ProHoster