Haɗin Taurari da Bitrix24

Haɗin Taurari da Bitrix24
Akwai zaɓuɓɓuka daban-daban don haɗa alamar alamar IP-PBX da CRM Bitrix24 akan hanyar sadarwar, amma har yanzu mun yanke shawarar rubuta namu.

Dangane da aiki, komai daidai yake:

  • Ta danna hanyar haɗi tare da lambar wayar abokin ciniki a cikin Bitrix24, Alamar alama tana haɗa lambar ciki na mai amfani wanda a madadinsa aka yi danna tare da lambar wayar abokin ciniki. A cikin Bitrix24, ana yin rikodin rikodin kiran kuma, a ƙarshen kiran, ana ɗaukar rikodin tattaunawar.
  • Alamar alama tana karɓar kira daga waje - a cikin ƙirar Bitrix24 muna nuna katin abokin ciniki ga ma'aikaci wanda lambarsa wannan kiran ya isa.
    Idan babu irin wannan abokin ciniki, za mu buɗe katin don ƙirƙirar sabon jagora.
    Da zarar an gama kiran, muna yin la'akari da wannan akan katin kuma mu ɗauki rikodin tattaunawar.

A ƙasa da yanke zan gaya muku yadda za ku saita komai don kanku kuma in ba ku hanyar haɗi zuwa github - a, a, ɗauka kuma kuyi amfani da shi!

Janar bayanin

Mun kira haɗin gwiwarmu CallMe. CallMe ƙaramar aikace-aikacen gidan yanar gizo ce da aka rubuta a cikin PHP.

Fasaha da sabis da aka yi amfani da su

  • PHP 5.6
  • PHP AMI library
  • mawaki
  • Nginx + php-fpm
  • Mai kulawa
  • AMI (Tsarin Alaji Manager)
  • Bitrix webhooks (sauƙaƙe REST API aiwatarwa)

Pre-saitin

A kan sabar da Alamar alama, kuna buƙatar shigar da sabar yanar gizo (a gare mu shine nginx+php-fpm), mai kulawa da git.

Umurnin shigarwa (CentOS):

yum install nginx php-fpm supervisor git

Muna zuwa jagorar da ke samun damar sabar gidan yanar gizo, cire aikace-aikacen daga Git kuma saita haƙƙoƙin da suka dace zuwa babban fayil ɗin:


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

Na gaba, bari mu saita nginx, tsarin mu yana cikin

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

Zan bar yin nazarin saitin, batutuwan tsaro, samun takaddun shaida har ma da zabar sabar yanar gizo a waje da iyakokin labarin - an rubuta da yawa game da wannan. Aikace-aikacen ba shi da hani, yana aiki akan duka http da https.

Muna amfani da https, bari mu ɓoye takaddun shaida.

Idan kun yi komai daidai, to ta danna mahaɗin ya kamata ku ga wani abu kamar wannan

Haɗin Taurari da Bitrix24

Saita Bitrix24

Bari mu ƙirƙiri ƙugiya guda biyu.

ƙugiya mai shigowa.

Ƙarƙashin asusun mai gudanarwa (tare da id 1), bi hanyar: Aikace-aikace -> Webhooks -> Ƙara webhook -> Wurin yanar gizo mai shigowa

Haɗin Taurari da Bitrix24

Cika ma'auni na ƙugiya mai shigowa kamar yadda yake a cikin hotunan kariyar kwamfuta:

Haɗin Taurari da Bitrix24

Haɗin Taurari da Bitrix24

Kuma danna save.

Bayan adanawa, Bitrix24 zai samar da URL na ƙugiya mai shigowa, misali:

Haɗin Taurari da Bitrix24

Ajiye sigar URL ɗin ku ba tare da ƙarshen /profile/ - za a yi amfani da shi a cikin aikace-aikacen don aiki tare da kira mai shigowa.

Ina da wannan https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/

Wutar gidan yanar gizo mai fita.

Aikace-aikace -> Webhooks -> Ƙara webhook -> Wurin yanar gizo mai fita

Cikakkun bayanai suna sake kan hotunan kariyar kwamfuta:

Haɗin Taurari da Bitrix24

Haɗin Taurari da Bitrix24

Ajiye kuma karɓi lambar izini

Haɗin Taurari da Bitrix24

Ina da wannan xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6. Hakanan kuna buƙatar kwafa shi da kanku; kuna buƙatar shi don yin kira mai fita.

Muhimmin!

Dole ne a saita takardar shaidar SSL akan sabar Bitrix24 (zaka iya amfani da letsencrypt), in ba haka ba api Bitrix ba zai yi aiki ba. Idan kuna da sigar girgije, kada ku damu - ya riga ya sami ssl.

Muhimmin!

Filin "Adireshin Mai sarrafawa" dole ne ya ƙunshi adireshin da ake samun dama daga Intanet!

Kuma a matsayin taɓawa ta ƙarshe, bari mu shigar da CallMeOut ɗinmu azaman aikace-aikacen yin kira (don idan kun danna lamba akan PBX, umarnin ƙirƙirar kiran zai tashi).

A cikin menu, zaɓi: Ƙari -> Waya -> Ƙari -> Saituna, saita a cikin "Tsohon lambar kira mai fita" Aikace-aikacen: CallMeOut kuma danna "Ajiye"

Haɗin Taurari da Bitrix24

Saita alamar alama

Don samun nasarar hulɗa tsakanin Alaji da Bitrix24, muna buƙatar ƙara kiran mai amfani na AMI zuwa 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

Bayan haka, akwai dabaru da yawa waɗanda za a buƙaci aiwatar da su ta hanyar dialplan (a gare mu wannan shine extensions.ael).

Zan ba da cikakken fayil ɗin, sannan in ba da bayani:

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

};

Bari mu fara daga farko: umarnin ƙasashen duniya.

Mai canzawa RUBUTUN URL yana adana URL ɗin zuwa fayilolin rikodin tattaunawa, gwargwadon abin da Bitrix24 zai ja su cikin katin sadarwar.

Na gaba muna sha'awar macro rikodi.

Anan, ban da yin rikodin tattaunawa, za mu saita mai canzawa Cikakken suna.

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

Yana adana cikakken URL zuwa takamaiman fayil (ana kiran macro a ko'ina).

Mu yi nazarin kiran mai fita:

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

Bari mu ce mu kira 89991234567, da farko mun isa nan:

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

wadanda. Ana kiran macro na rikodin tattaunawa kuma an saita masu canji masu mahimmanci.

m

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

Muna rikodin wanda ya fara kiran kuma muna rikodin lokacin fara kiran.

Kuma bayan kammala shi, a cikin yanayi na musamman 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});
}

musaki shigarwa zuwa teburin CDR don wannan tsawo (ba a buƙatar shi a can), saita ƙarshen lokacin kira, ƙididdige tsawon lokacin, idan sakamakon kiran ba a san shi ba - saita (mai canzawa). KiraMeDISPOSITION) kuma, mataki na ƙarshe, aika komai zuwa Bitrix ta hanyar tsarin curl.

Kuma ɗan ƙara sihiri - kira mai shigowa:

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

Anan muna sha'awar layi ɗaya kawai.

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

Ta gaya wa PBX su girka ID (suna) daidai da m CallMeCallerIDSunan.

Canjin sunan CallMeCallerIDName kanta, bi da bi, an saita shi ta aikace-aikacen CallMe (idan Bitrix24 yana da cikakken suna don lambar mai kiran, saita shi azaman ID (suna), a'a - ba za mu yi kome ba).

Saitin aikace-aikacen

Fayil ɗin saitunan aikace-aikacen - /var/www/pbx.vistep.ru/config.php

Bayanin sigogin aikace-aikacen:

  • KiraMeDEBUG - idan 1, to, duk abubuwan da aikace-aikacen da aka sarrafa za a rubuta su zuwa fayil ɗin log, 0 - ba mu rubuta komai ba.
  • tech - SIP/PJSIP/IAX/da sauransu
  • authToken - Alamar izini Bitrix24, lambar izini na gidan yanar gizo mai fita
  • bitrixApiUrl - URL na ƙugiya mai shigowa, ba tare da bayanin martaba ba/
  • girman kai - jerin lambobin waje
  • mahallin - mahallin asalin kira
  • saurare_lokaci - gudun sarrafa taron daga alamar alama
  • alama - tsararru mai saiti don haɗawa da alamar alama:
  • rundunar - ip ko sunan mai masaukin sabar alamar alama
  • makirci - tsarin haɗin kai (tcp: //, tls: //)
  • tashar jiragen ruwa - tashar jiragen ruwa
  • sunan mai amfani - Sunan mai amfani
  • m - kalmar sirri
  • connect_lokaci - lokacin haɗi
  • lokacin karantawa_ - lokacin karantawa

misali fayil saituna:

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

);

Saitin mai kulawa

Ana amfani da mai kulawa don ƙaddamar da tsarin mai sarrafa taron daga Asterisk CallMeIn.php, wanda ke sa ido kan kira mai shigowa da hulɗa tare da Bitrix24 (katin nuni, katin ɓoye, da sauransu).

Za a ƙirƙiri fayil ɗin saituna:

/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

Kaddamar da sake kunna aikace-aikacen:

supervisorctl start callme
supervisorctl restart callme

Duba yanayin aiki na aikace-aikacen:

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

ƙarshe

Ya zama mai rikitarwa, amma na tabbata cewa gogaggen mai gudanarwa zai iya aiwatar da shi kuma ya faranta wa masu amfani da shi rai.

Kamar yadda akayi alkawari, hanyar haɗi zuwa github.

Tambayoyi, shawarwari - don Allah a bar su a cikin sharhi. Har ila yau, idan kuna sha'awar yadda ci gaban wannan haɗin kai ya tafi, rubuta, kuma a cikin labarin na gaba zan yi ƙoƙarin bayyana kome dalla-dalla.

source: www.habr.com

Add a comment