Integreiddio Seren a Bitrix24

Integreiddio Seren a Bitrix24
Mae gan y rhwydwaith opsiynau gwahanol ar gyfer integreiddio IP-PBX Asterisk a Bitrix24 CRM, ond fe benderfynon ni, serch hynny, ysgrifennu ein rhai ein hunain.

Yn swyddogaethol, mae popeth yn safonol:

  • Trwy glicio ar y ddolen gyda rhif ffΓ΄n y cleient yn Bitrix24, mae Asterisk yn cysylltu rhif mewnol y defnyddiwr y gwnaed y clic hwn ar ei ran Γ’ rhif ffΓ΄n y cleient. Yn Bitrix24, mae cofnod o'r alwad yn cael ei recordio, ac ar ddiwedd yr alwad, mae'r cofnod sgwrs yn cael ei dynnu i fyny.
  • Mae galwad yn cyrraedd Asterisk o'r tu allan - yn y rhyngwyneb Bitrix24, rydym yn dangos y cerdyn cleient i'r gweithiwr y cyrhaeddodd yr alwad hon ei rif.
    Os nad oes cleient o'r fath, agorwch y cerdyn ar gyfer creu arweinydd newydd.
    Cyn gynted ag y bydd yr alwad wedi'i chwblhau, rydym yn adlewyrchu hyn yn y cerdyn ac yn tynnu recordiad y sgwrs i fyny.

O dan y toriad, byddaf yn dweud wrthych sut i sefydlu popeth i chi'ch hun a rhoi dolen i github - ie, ie, cymerwch ef a'i ddefnyddio!

Disgrifiad cyffredinol

Fe wnaethon ni alw ein hintegreiddio CallMe. Mae CallMe yn gymhwysiad gwe bach wedi'i ysgrifennu yn PHP.

Technolegau a gwasanaethau a ddefnyddir

  • PHP 5.6
  • Llyfrgell PHP AMI
  • Cyfansoddi
  • nginx + php fpm
  • goruchwyliwr
  • AMI (Rhyngwyneb Rheolwr Seren)
  • Bachau gwe Bitrix (gweithredu API REST symlach)

rhagosod

Ar y gweinydd gyda Asterisk, mae angen i chi osod gweinydd gwe (mae gennym nginx + php-fpm), goruchwyliwr a git.

Gorchymyn gosod (CentOS):

yum install nginx php-fpm supervisor git

Rydyn ni'n pasio'r cyfeiriadur sydd ar gael i'r gweinydd gwe, yn tynnu'r rhaglen o'r git ac yn gosod yr hawliau angenrheidiol i'r ffolder:


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

Nesaf, ffurfweddu nginx, mae ein cyfluniad wedi'i leoli yn

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

Byddaf yn gadael y dadansoddiad o'r config, materion diogelwch, cael tystysgrif, a hyd yn oed ddewis gweinydd gwe y tu allan i gwmpas yr erthygl - mae llawer wedi'i ysgrifennu am hyn. Nid oes gan y cais unrhyw gyfyngiadau, mae'n gweithio ar http a https.

Mae gennym https, gadewch i ni amgryptio tystysgrif.

Os gwnaethoch bopeth yn gywir, yna trwy glicio ar y ddolen dylech weld rhywbeth fel hyn

Integreiddio Seren a Bitrix24

Sefydlu Bitrix24

Gadewch i ni greu dau we bachyn.

Bachyn gwe sy'n dod i mewn.

O dan y cyfrif gweinyddwr (gydag id 1) ewch ar hyd y llwybr: Ceisiadau -> Webhooks -> Ychwanegu webhook -> webhook sy'n dod i mewn

Integreiddio Seren a Bitrix24

Llenwch baramedrau'r bachyn gwe sy'n dod i mewn fel yn y sgrinluniau:

Integreiddio Seren a Bitrix24

Integreiddio Seren a Bitrix24

A chliciwch arbed.

Ar Γ΄l arbed, bydd Bitrix24 yn darparu URL y bachyn gwe sy'n dod i mewn, er enghraifft:

Integreiddio Seren a Bitrix24

Arbedwch eich fersiwn o'r URL heb y trΔ™l / proffil / - bydd yn cael ei ddefnyddio yn y rhaglen i weithio gyda galwadau sy'n dod i mewn.

Mae gen i https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/

Bachyn gwe sy'n mynd allan.

Cymwysiadau -> Webhooks -> Ychwanegu Webhook -> Webhook Allanol

Mae'r manylion ar y sgrinluniau:

Integreiddio Seren a Bitrix24

Integreiddio Seren a Bitrix24

Cadw a chael y cod awdurdodi

Integreiddio Seren a Bitrix24

Mae gen i xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6. Mae angen i chi hefyd ei gopΓ―o i chi'ch hun, mae ei angen i wneud galwadau sy'n mynd allan.

Pwysig!

Rhaid ffurfweddu tystysgrif ssl ar y gweinydd Bitrix24 (gallwch ddefnyddio letsencrypt), fel arall ni fydd yr api BitrixXNUMX yn gweithio. Os oes gennych chi fersiwn cwmwl, peidiwch Γ’ phoeni - mae ssl yno eisoes.

Pwysig!

Yn y maes "Cyfeiriad Prosesydd", rhaid nodi cyfeiriad sy'n hygyrch o'r Rhyngrwyd!

A chyda'r cyffyrddiad olaf, gadewch i ni osod ein CallMeOut fel cais ar gyfer gwneud galwadau (fel bod trwy glicio ar y rhif ar y PBX, bydd gorchymyn yn hedfan i gychwyn yr alwad).

Yn y ddewislen, dewiswch: Mwy -> Teleffoni -> Mwy -> Gosodiadau, gosodwch i "Rhif ar gyfer galwadau sy'n mynd allan yn ddiofyn" Cais: CallMeOut a chliciwch ar "Save"

Integreiddio Seren a Bitrix24

gosodiad seren

Ar gyfer rhyngweithio llwyddiannus rhwng Asterisk a Bitrix24, mae angen i ni ychwanegu'r defnyddiwr AMI callme at 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

Nesaf, mae yna ychydig o driciau y bydd angen eu gweithredu gan ddefnyddio cynllun deialu (mae gennym estyniadau.ael).

Dyfynnaf y ffeil gyfan, ac yna rhoddaf esboniadau:

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

};

Gadewch i ni ddechrau o'r dechrau: cyfarwyddeb globals.

Amrywiol COFNODION URL yn storio'r URL i'r ffeiliau recordio sgwrs, yn Γ΄l y bydd Bitrix24 yn eu tynnu i mewn i'r cerdyn cyswllt.

Nesaf, mae gennym ddiddordeb mewn macro macro cofnodi.

Yma, yn ogystal Γ’ recordio sgyrsiau, byddwn yn gosod y newidyn Enw Llawn.

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

Mae'n storio'r URL llawn i ffeil benodol (gelwir y macro ym mhobman).

Gadewch i ni ddadansoddi'r alwad sy'n mynd allan:

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

Gadewch i ni ddweud ein bod yn ffonio 89991234567, y peth cyntaf a gawn yma:

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

y rhai. gelwir y macro recordio galwadau a gosodir y newidynnau angenrheidiol.

Pellach

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

rydym yn cofnodi pwy a gychwynnodd yr alwad ac yn cofnodi amser cychwyn yr alwad.

Ac ar Γ΄l ei gwblhau, mewn cyd-destun arbennig 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});
}

trowch y cofnod yn y tabl CDR ar gyfer yr estyniad hwn i ffwrdd (nid oes ei angen yno), gosodwch amser gorffen yr alwad, cyfrifwch yr hyd, os nad yw canlyniad yr alwad yn hysbys - set (newidyn Ffoniwch Fi GWAREDU) ac, y cam olaf, anfonwch bopeth i Bitrix trwy'r system curl.

Ac ychydig mwy o hud - galwad sy'n dod i mewn:

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

Yma dim ond mewn un llinell sydd gennym ddiddordeb.

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

Mae hi'n dweud gosod PBX ID galwr(enw) newidyn CallMeCallerIDName.

Mae'r newidyn CallMeCallerIDName ei hun, yn ei dro, yn cael ei osod gan y cymhwysiad CallMe (os oes gan Bitrix24 enw llawn ar gyfer rhif y galwr, byddwn yn ei osod fel ID galwr(enw), na - ni fyddwn yn gwneud dim).

Gosod cais

Ffeil gosodiadau cais - /var/www/pbx.vistep.ru/config.php

Disgrifiad o baramedrau cais:

  • GalwMeDEBUG - os 1, yna bydd yr holl ddigwyddiadau a brosesir gan y cais yn cael eu hysgrifennu i'r ffeil log, 0 - nid ydym yn ysgrifennu unrhyw beth
  • dechnoleg SIP/PJSIP/IAX/etc
  • authToken β€” Tocyn awdurdodi Bitrix24, cod awdurdodi bachau gwe sy'n mynd allan
  • bitrixApiUrl β€” URL y bachyn gwe sy'n dod i mewn, heb broffil /
  • estyniadau β€” rhestr o rifau allanol
  • cyd-destun β€” cyd-destun ar gyfer tarddiad galwad
  • goramser_gwrandΓ€wr - cyflymder prosesu digwyddiadau o'r seren
  • seren - arae gyda'r gosodiadau cysylltiad Γ’'r seren:
  • llu - ip neu enw gwesteiwr y gweinydd seren
  • cynllun β€” diagram cysylltiad (tcp: //, tls://)
  • porthladd - porthladd
  • enw defnyddiwr - Enw defnyddiwr
  • gyfrinachol - cyfrinair
  • terfyn amser cysylltu - terfyn amser cysylltiad
  • goramser darllen - goramser darllen

ffeil gosodiadau enghreifftiol:

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

);

Gosodiad goruchwyliwr

Defnyddir Goruchwyliwr i lansio proses trin digwyddiad Asterisk CallMeIn.php, sy'n monitro galwadau sy'n dod i mewn ac yn rhyngweithio Γ’ Bitrix24 (dangoswch y cerdyn, cuddiwch y cerdyn, ac ati).

Ffeil gosodiadau i'w chreu:

/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

Cychwyn ac ailgychwyn y cais:

supervisorctl start callme
supervisorctl restart callme

gweld statws y cais:

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

Casgliad

Trodd allan yn eithaf anodd, ond rwy'n siΕ΅r y bydd gweinyddwr profiadol yn gallu gweithredu a phlesio ei ddefnyddwyr.

Fel yr addawyd, dolen i github.

Cwestiynau, awgrymiadau - os gwelwch yn dda yn y sylwadau. Hefyd, os oes gennych ddiddordeb mewn sut aeth datblygiad yr integreiddio hwn, ysgrifennwch, ac yn yr erthygl nesaf byddaf yn ceisio datgelu popeth yn fwy manwl.

Ffynhonnell: hab.com

Ychwanegu sylw