Ho kopanngoa ha Asterisk le Bitrix24

Ho kopanngoa ha Asterisk le Bitrix24
Marang-rang a na le likhetho tse fapaneng tsa ho kopanya IP-PBX Asterisk le CRM Bitrix24, empa rona, leha ho le joalo, re ile ra etsa qeto ea ho ngola ea rona.

Ha e le hantle, ntho e 'ngoe le e' ngoe e tloaelehile:

  • Ka ho tobetsa sehokelo se nang le nomoro ea mohala ea moreki ho Bitrix24, Asterisk e hokela nomoro ea ka hare ea mosebelisi eo lebitso la hae le entsoeng ho tobetsa le nomoro ea mohala ea moreki. Ho Bitrix24, rekoto ea mohala e rekotoa, 'me qetellong ea mohala, rekoto ea moqoqo e huloa.
  • Mohala o fihla Asterisk o tsoa kantle - ho sebopeho sa Bitrix24, re bonts'a karete ea bareki ho mosebeletsi eo mohala ona o fihlileng ho nomoro ea hae.
    Haeba ho se na moreki ea joalo, bula karete bakeng sa ho theha tataiso e ncha.
    Hang ha mohala o phethiloe, re bonahatsa sena ka karete ebe re hula rekoto ea moqoqo.

Tlas'a sehiloeng, ke tla u bolella mokhoa oa ho iketsetsa ntho e 'ngoe le e' ngoe 'me u fane ka sehokelo ho github - e, e, e nke 'me u e sebelise!

Tlhaloso e akaretsang

Re bitsitse kopano ea rona CallMe. CallMe ke sesebelisoa se senyenyane sa marang-rang se ngotsoeng ka PHP.

Theknoloji le litšebeletso tse sebelisitsoeng

  • PHP 5.6
  • PHP AMI Library
  • Moqapi
  • nginx + php fpm
  • mookameli
  • AMI (Asterisk Manager Interface)
  • Bitrix webhooks (ts'ebetso e nolofalitsoeng ea REST API)

ho seta pele

Ho seva e nang le Asterisk, o hloka ho kenya seva sa marang-rang (re na le nginx + php-fpm), mookameli le git.

Taelo ea ho kenya (CentOS):

yum install nginx php-fpm supervisor git

Re fetisetsa bukana e fumanehang ho seva sa marang-rang, re hula sesebelisoa ho tsoa ho git ebe re beha litokelo tse hlokahalang foldareng:


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

E latelang, lokisa nginx, config ea rona e teng

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

Ke tla tlohela tlhahlobo ea config, litaba tsa ts'ireletso, ho fumana setifikeiti, esita le ho khetha seva sa marang-rang ka ntle ho sebaka sa sengoloa - ho ngotsoe ho hongata ka sena. Kopo ha e na lithibelo, e sebetsa ho http le https.

Re na le https, ha re khopiseng setifikeiti.

Haeba u entse ntho e 'ngoe le e' ngoe ka nepo, ka ho tobetsa sehokela u lokela ho bona ntho e kang ena

Ho kopanngoa ha Asterisk le Bitrix24

Ho theha Bitrix24

Ha re theheng li-webhook tse peli.

Webhook e kenang.

Tlas'a ak'haonte ea motsamaisi (ka id 1) tsamaea tseleng: Likopo -> Webhooks -> Eketsa webhook -> Webhook e kenang

Ho kopanngoa ha Asterisk le Bitrix24

Tlatsa liparamente tsa webhook tse kenang joalo ka li-screenshots:

Ho kopanngoa ha Asterisk le Bitrix24

Ho kopanngoa ha Asterisk le Bitrix24

Ebe o tobetsa boloka.

Kamora ho boloka, Bitrix24 e tla fana ka URL ea webhook e kenang, mohlala:

Ho kopanngoa ha Asterisk le Bitrix24

Boloka mofuta oa hau oa URL ntle le ho latela / profil/ - e tla sebelisoa ts'ebelisong ho sebetsa ka mehala e kenang.

Ke na le eona https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/

Webhook e tswang.

Lisebelisoa -> Li-Webhooks -> Eketsa Webhook -> Webhook e Tsoang

Lintlha li hlaha skrineng:

Ho kopanngoa ha Asterisk le Bitrix24

Ho kopanngoa ha Asterisk le Bitrix24

Boloka 'me u fumane khoutu ea tumello

Ho kopanngoa ha Asterisk le Bitrix24

Ke na le eona xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6. U boetse u hloka ho e kopitsa ho uena, hoa hlokahala ho etsa mehala e tsoang.

Bohlokoa!

Setifikeiti sa ssl se tlameha ho hlophisoa ho seva sa Bitrix24 (o ka sebelisa letsencrypt), ho seng joalo BitrixXNUMX api e ke ke ea sebetsa. Haeba u na le mofuta oa leru, seke oa tšoenyeha - ssl e se e le teng.

Bohlokoa!

Sebakeng sa "Aterese ea processor", aterese e fumanehang ho Internet e tlameha ho bontšoa!

'Me ka ho ama la ho qetela, ha re kenyeng CallMeOut ea rona e le sesebelisoa sa ho letsa (e le hore ka ho tobetsa nomoro e ho PBX, taelo e tla fofa ho qala mohala).

Ho menu, khetha: Tse ling -> Telephony -> More -> Settings, set to "Nomoro ea mehala e tsoang ka mokhoa o ikhethileng" Sesebelisoa: CallMeOut ebe o tobetsa "Save"

Ho kopanngoa ha Asterisk le Bitrix24

ho hlophisoa ha linaleli

Bakeng sa tšebelisano e atlehileng lipakeng tsa Asterisk le Bitrix24, re hloka ho kenyelletsa mosebelisi oa callme AMI ho 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

Ka mor'a moo, ho na le maqheka a 'maloa a tla hloka ho kenngoa ts'ebetsong ho sebelisa dialplan (re na le extensions.ael).

Ke tla qotsa faele eohle, ebe ke fana ka litlhaloso:

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

};

Ha re qale ho tloha qalong: tataiso li-globule.

E fapaneng URLRECORDS e boloka URL ho lifaele tsa ho rekota tsa moqoqo, ho latela hore na Bitrix24 e tla li hulela kareteng ea ho ikopanya.

Ka mor'a moo, re thahasella macro macro Ho rekota.

Mona, ho phaella lipuisanong tsa ho rekota, re tla beha phetoho FullFname.

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

E boloka URL e felletseng faeleng e itseng (macro e bitsoa hohle).

Ha re sekaseke mohala o hlahang:

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

Ha re re re bitsa 89991234567, ntho ea pele eo re e fumanang mona:

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

tseo. macro recording call e bitswa mme diphapano tse hlokehang di setilwe.

ka ho eketsehileng

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

re rekota hore na ke mang ea qalileng mohala ebe re rekota nako e qalang ea mohala.

'Me ha e phethoa, maemong a khethehileng 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});
}

tima ho kena ka har'a tafole ea CDR bakeng sa katoloso ena (ha e hlokehe moo), beha nako ea ho qetela ea mohala, bala nako, haeba sephetho sa mohala se sa tsejoe - sete (phapang). Mpiletseng MORAO) 'me, mohato oa ho qetela, romela ntho e' ngoe le e 'ngoe ho Bitrix ka mokhoa oa ho pota-pota.

Le boselamose bo bong hape - mohala o kenang:

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

Mona re thahasella mola o le mong feela.

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

O re PBX e kenye ID ea mohalaleli(lebitso) feto-fetoha CallMeCallerIDName.

CallMeCallerIDName e feto-fetoha ka boeona, e behiloe ke CallMe application (haeba Bitrix24 e na le lebitso le felletseng la nomoro ea moletsi, re tla e beha joalo ka ID ea mohalaleli(lebitso), che - re ke ke ra etsa letho).

Tlhophiso ea lisebelisoa

Faele ea litlhophiso tsa kopo - /var/www/pbx.vistep.ru/config.php

Tlhaloso ea li-parameter tsa kopo:

  • CallMeDEBUG - haeba 1, joale liketsahalo tsohle tse sebetsitsoeng ke kopo li tla ngolloa faeleng ea log, 0 - ha re ngole letho
  • theknoloji SIP/PJSIP/IAX/etc
  • authToken - Letšoao la tumello la Bitrix24, khoutu ea tumello ea webhook e tsoang
  • bitrixApiUrl - URL ea webhook e kenang, ntle le profil/
  • katoloso — lenane la linomoro tsa kantle
  • moelelo - moelelo oa ho qala mohala
  • momamedi_timeout - lebelo la ts'ebetso ea ketsahalo ho tloha ho asterisk
  • asterisk - lethathamo le nang le litlhophiso tsa khokahano ho asterisk:
  • moamoheli - ip kapa hostname ea seva sa asterisk
  • moralo - setšoantšo sa khokahano (tcp://, tls://)
  • kepe boo - koung
  • mosebedisi - Username
  • sephiri - password
  • connect_timeout - nako ea khokahano
  • bala_nako - bala nako ea ho qetela

mohlala oa li-setting file:

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

);

Tlhophiso ea mookameli

Mookameli o sebelisetsoa ho qalisa mokhoa oa ho sebetsana le liketsahalo tsa Asterisk CallMeIn.php, tse hlokomelang li-call tse kenang le ho sebelisana le Bitrix24 (bontša karete, pata karete, joalo-joalo).

Litlhophiso tsa faele eo u ka e etsang:

/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

Ho qala le ho qala sesebelisoa hape:

supervisorctl start callme
supervisorctl restart callme

sheba boemo ba sesebelisoa:

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

fihlela qeto e

Ho bile thata haholo, empa ke na le bonnete ba hore molaoli ea nang le boiphihlelo o tla khona ho kenya ts'ebetsong le ho khahlisa basebelisi ba hae.

Joalokaha ho tšepisitsoe, link ho github.

Lipotso, litlhahiso - ka kopo ho litlhaloso. Hape, haeba u thahasella hore na tsoelo-pele ea kopano ena e tsamaile joang, ngola, 'me sehloohong se latelang ke tla leka ho senola ntho e' ngoe le e 'ngoe ka ho qaqileng haholoanyane.

Source: www.habr.com

Eketsa ka tlhaloso