Is dhexgalka Asterisk iyo Bitrix24

Is dhexgalka Asterisk iyo Bitrix24
Shabakadu waxay leedahay doorashooyin kala duwan oo loogu talagalay isku dhafka IP-PBX Asterisk iyo CRM Bitrix24, laakiin annagu, si kastaba ha ahaatee, waxaan go'aansanay inaan qorno annaga.

Shaqaale ahaan, wax walba waa heer:

  • Markaad gujiso isku xirka lambarka taleefanka macmiilka ee Bitrix24, Asterisk waxay ku xidhaysaa nambarka gudaha ee isticmaalaha isaga oo ka wakiil ah gujintaan lagu sameeyay lambarka taleefanka macmiilka. Gudaha Bitrix24, diiwaanka wicitaanka ayaa la duubayaa, dhammaadka wicitaanka, rikoorka wada hadalka waa la jiidayaa.
  • Wicitaanku wuxuu ka imaanayaa Asterisk bannaanka - gudaha Bitrix24 interface, waxaan tuseynaa kaarka macmiilka shaqaalaha lambarkiisa uu soo wacay.
    Haddii uusan jirin macmiil noocaas ah, fur kaarka si aad u abuurto rasaas cusub.
    Sida ugu dhakhsaha badan ee wicitaanku dhammeeyo, waxaanu ka tarjumaynaa kaadhka oo aanu kor u qaadnay duubista wada hadalka.

Goynta hoosteeda, waxaan kuu sheegi doonaa sida loo dejiyo wax kasta oo naftaada ah oo aad siiso xiriiriye github - haa, haa, qaado oo isticmaal!

Tafaasiisha guud

Waxaan u yeernay is dhexgalkayaga CallMe. CallMe waa codsi web yar oo ku qoran PHP.

Tignoolajiyada iyo adeegyada la isticmaalay

  • PHP 5.6
  • PHP AMI Library
  • laxamiistaha
  • nginx + php fpm
  • kormeere
  • AMI (Interface Manager Asterisk Manager)
  • Bitrix webhooks (fulinta REST API oo la fududeeyay)

habayn

Seerarka leh Asterisk, waxaad u baahan tahay inaad ku rakibto server-ka shabakadda (waxaan leenahay nginx + php-fpm), kormeere iyo git.

Amarka rakibida (CentOS):

yum install nginx php-fpm supervisor git

Waxaan u gudbinaa tusaha diyaar u ah server-ka shabakada, ka soo jiid codsiga git oo dejinno xuquuqda lagama maarmaanka ah galka:


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

Marka xigta, habee nginx, qaabayntayadu waxay ku taal

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

Waxaan ka tagi doonaa falanqaynta qaabeynta, arrimaha amniga, helitaanka shahaadada, iyo xitaa doorashada server-ka shabakadda oo ka baxsan baaxadda maqaalka - wax badan ayaa laga qoray arrintan. Codsiga ma laha wax xannibaad ah, wuxuu ka shaqeeyaa labadaba http iyo https.

Waxaan haynaa https, aan sirin shahaado.

Haddii aad wax walba si sax ah u samaysay, markaa adigoo gujinaya isku xirka waa inaad aragto wax sidan oo kale ah

Is dhexgalka Asterisk iyo Bitrix24

Qalabaynta Bitrix24

Aynu abuurno laba webhooks.

Qaboojiyaha soo socda.

Hoosta koontada maamulka (oo leh id 1) raac jidka: Codsiyada -> Webhooks -> Ku dar webhook -> webhook soo socda

Is dhexgalka Asterisk iyo Bitrix24

Buuxi cabbiraadaha shabkada soo socota sida sawirada shaashadda:

Is dhexgalka Asterisk iyo Bitrix24

Is dhexgalka Asterisk iyo Bitrix24

Oo guji keydka

Kaydinta ka dib, Bitrix24 waxay bixin doontaa URL-ka webhook soo socda, tusaale ahaan:

Is dhexgalka Asterisk iyo Bitrix24

Keydi nooca URL-ka adiga oo aan raad raacin/profile/ - waxaa loo isticmaali doonaa codsiga si loogula shaqeeyo wicitaanada soo socda.

waan hayaa https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/

Qaboojiyaha ka baxaya.

Codsiyada -> Webhook -> Ku dar Webhook -> Webhook baxaya

Faahfaahinta waxay ku taal shaashadda:

Is dhexgalka Asterisk iyo Bitrix24

Is dhexgalka Asterisk iyo Bitrix24

Keydi oo hel lambarka oggolaanshaha

Is dhexgalka Asterisk iyo Bitrix24

waan hayaa xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6. Waxa kale oo aad u baahan tahay in aad koobi ka samayso naftaada, waxa loo baahan yahay in la sameeyo wicitaano dibadda ah.

Muhiim!

Shahaadada ssl waa in lagu habeeyaa server-ka Bitrix24 (waxaad isticmaali kartaa letsencrypt), haddii kale BitrixXNUMX api ma shaqayn doono. Haddii aad haysatid nooca daruuraha, ha werwerin - ssl waaba meeshaas.

Muhiim!

Goobta "Cinwaanka Processor-ka", ciwaanka laga heli karo internetka waa in lagu tilmaamaa!

Iyo taabashada kama dambaysta ah, aan ku rakibno CallMeOut codsi ahaan wicitaannada wicitaannada (si markaa adigoo gujinaya lambarka PBX, amar ayaa u duuli doona si uu u bilaabo wicitaanka).

Gudaha menu, dooro: More -> Telefoon -> Wax badan -> Settings, u deji "Lambarka wicitaanada baxaya by default" Codsiga: CallMeOut oo guji "Save"

Is dhexgalka Asterisk iyo Bitrix24

habaynta xidigta

Si loo helo is dhexgalka guusha leh ee u dhexeeya Asterisk iyo Bitrix24, waxaan u baahanahay inaan ku darno isticmaalaha 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

Marka xigta, waxaa jira dhowr farsamooyin oo u baahan doona in la hirgeliyo iyadoo la adeegsanayo dialplan (waxaan leenahay extensions.ael).

Waxaan soo qaadan doonaa faylka oo dhan, ka dibna waxaan bixin doonaa sharraxaad:

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

};

Aan ka bilowno bilowga: dardaaran caalamka.

Isbadal RECORDS waxay ku kaydisaa URL faylalka duubista wada sheekeysiga, iyadoo la raacayo taas oo Bitrix24 ay u jiidi doonto kaarka xiriirka.

Marka xigta, waxaan xiiseyneynaa macro wax lagu qoro.

Halkan, marka lagu daro duubista wada sheekaysiga, waxaanu dejin doonaa doorsoomaha Magaca buuxa.

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

Waxay ku kaydisaa URL buuxa faylal gaar ah (makro waxaa loogu yeeraa meel kasta).

Aan falanqeyno wicitaanka baxaya:

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

Aynu nidhaahno waxaan wacnaa 89991234567, waxa ugu horreeya ee aan halkan helno:

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

kuwaas. macro duubista wicitaanka ayaa la yiraahdaa doorsoomayaasha lagama maarmaanka ah waa la dejiyaa.

dheeraad ah

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

Waxaan duubnaa cidda wacday, waxaanan diiwaangelinnaa waqtiga wicitaanka.

Iyo marka la dhammeeyo, oo ku jira xaalad gaar ah 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});
}

dami gelitaanka miiska CDR ee kordhintan (looma baahna halkaas), deji waqtiga dhamaadka wicitaanka, xisaabi muddada, haddii natiijada wicitaanku aan la garanayn - dejin (la beddeli karo) Igu wac DHISAN) iyo, tallaabada ugu dambeysa, u dir wax walba Bitrix iyada oo loo marayo curlka nidaamka.

Iyo wax yar oo sixir ah - wicitaan soo socda:

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

Halkan waxaan xiisaynaynaa hal sadar oo kaliya.

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

Waxay tidhi PBX rakib Aqoonsiga soo wacaha (magaca) doorsoome WacMeCallerIDMagaca.

Doorsoomiyaha CallMeCallerIDName laftiisa, dhankeeda, waxaa dejiyay arjiga CallMe (haddii Bitrix24 ay magac buuxa u leedahay lambarka soo wacaha, waxaan u dejin doonaa sida Aqoonsiga soo wacaha (magaca), maya - waxba yeeli mayno).

Dejinta codsiga

Faylka habaynta codsiga - /var/www/pbx.vistep.ru/config.php

Sharaxaadda cabbirrada codsiga:

  • WacMeDEBUG - haddii 1, markaa dhammaan dhacdooyinka lagu habeeyo codsiga waxaa lagu qori doonaa faylka log, 0 - waxba ma qorinno
  • casriga ah SIP/PJSIP/IAX/iwm
  • AuthToken - Calaamadda oggolaanshaha Bitrix24, koodka oggolaanshaha webhook baxaya
  • bitrixApiUrl - URL-ka webhook soo socda, oo aan lahayn profile/
  • xad-dhaaf - liiska lambarrada dibadda
  • Macnaha guud - macnaha guud ee asalka call
  • dhagaystaha_waqti-dhamaaday - Xawaaraha habaynta dhacdada oo ka imanaya xiddigga
  • asterisk - array leh jaangooyooyinka isku xirka calaamadda:
  • ciidankii - ip ama magaca martida loo yahay ee server-ka xidigta
  • nidaam - jaantuska isku xirka (tcp: //, tls: //)
  • dekedda - dekedda
  • username - Magaca isticmaalaha
  • qarsoodi ah - erayga sirta ah
  • isku xidhka_waqti dhamaa - wakhtiga xidhidhku
  • akhriska_waqti dhamaatey - wakhtiga wax akhrinta

tusaale ahaan faylka dejinta:

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

);

Dejinta kormeeraha

Kormeeraha waxa loo isticmaalaa in lagu bilaabo nidaamka maamulaha dhacdada Asterisk CallMeIn.php, kaas oo la socda wicitaanada soo socda oo la falgala Bitrix24 (muuji kaadhka, qari kaadhka, iwm.).

Faylka dejinta si loo abuuro:

/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

Bilaabida iyo dib u bilaabida codsiga:

supervisorctl start callme
supervisorctl restart callme

arag heerka codsiga

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

gunaanad

Waxay noqotay arrin aad u adag, laakiin waxaan hubaa in maamule khibrad leh uu awoodi doono inuu hirgeliyo oo ka farxiyo isticmaalayaashiisa.

Sidii ballanku ahaa, link to github.

Su'aalo, talooyin - fadlan faallooyinka. Sidoo kale, haddii aad xiisaynayso sida horumarka is-dhexgalkani u dhacay, qor, maqaalka soo socdana waxaan isku dayi doonaa inaan wax walba si faahfaahsan u muujiyo.

Source: www.habr.com

Add a comment