Te whakaurunga o Asterisk me Bitrix24

Te whakaurunga o Asterisk me Bitrix24
He rereke nga whiringa mo te whakauru IP-PBX Asterisk me CRM Bitrix24 i runga i te whatunga, engari i whakatau tonu matou ki te tuhi i a maatau ake.

Mo nga mahi, he paerewa nga mea katoa:

  • Ma te paato i te hono me te nama waea a te kiritaki i roto i te Bitrix24, ka hono a Asterisk i te nama o roto o te kaiwhakamahi i mahia te paato me te nama waea a te kaihoko. I roto i te Bitrix24, ka tuhia he rekoata o te waea, a, i te mutunga o te waea, ka tohia te rekoata o te korerorero.
  • Ka whiwhi waea a Asterisk mai i waho - i roto i te atanga Bitrix24 ka whakaatuhia e matou te kaari kiritaki ki te kaimahi i tae mai ai tenei waea.
    Mena kaore he kaihoko pera, ka whakatuwherahia e matou te kaari mo te hanga kaiarahi hou.
    Ka mutu te waea, ka whakaatahia tenei ki runga i te kaari ka tohia he rekoata o te korerorero.

I raro i te tapahi ka korero ahau ki a koe me pehea te whakarite i nga mea katoa mo koe ake ka hoatu he hononga ki a koe ki te github - ae, ae, tangohia ka whakamahi!

Whakaahuatanga whānui

I karanga matou i to taatau whakauru CallMe. Ko CallMe he tono paetukutuku iti kua tuhia ki te PHP.

Hangarau me nga ratonga e whakamahia ana

  • PHP 5.6
  • PHP AMI whare pukapuka
  • kaitito
  • Nginx + php-fpm
  • kaiwhakahaere
  • AMI (Atanga Kaiwhakahaere Whetūriki)
  • Bitrix webhooks (whakamahinga REST API ngawari)

Tuhinga o mua

I runga i te tūmau me te Asterisk, me whakauru e koe he tūmau tukutuku (mo matou ko te nginx+php-fpm), te kaiwhakahaere me te git.

Tono tāutanga (CentOS):

yum install nginx php-fpm supervisor git

Ka haere matou ki te whaiaronga e uru ana ki te tūmau tukutuku, toia te tono mai i a Git ka tautuhi i nga mana tika ki te kōpaki:


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

I muri mai, me whirihora i te nginx, kei roto to maatau whirihora

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

Ka waiho e ahau te whakamaarama i te whirihora, nga take haumarutanga, te whiwhi tiwhikete me te kowhiri i tetahi tūmau tukutuku i waho o te waahanga o te tuhinga - he maha nga mea kua tuhia mo tenei. Karekau he here o te tono, ka mahi i runga i te http me te https.

Ka whakamahi matou i te https, me whakamuna te tiwhikete.

Mena i tika nga mea katoa, ma te panui i te hono ka kite koe i tetahi mea penei

Te whakaurunga o Asterisk me Bitrix24

Whirihorahia te Bitrix24

Me hanga e rua nga matapae tukutuku.

Matau tukutuku taumai.

I raro i te kaute a te kaiwhakahaere (me te id 1), whai i te ara: Nga tono -> Paetukutuku -> Taapirihia te matapae -> Taumai webhook

Te whakaurunga o Asterisk me Bitrix24

Whakakiia nga tawhā o te webhook taumai penei i nga Whakaahuamata:

Te whakaurunga o Asterisk me Bitrix24

Te whakaurunga o Asterisk me Bitrix24

Na ka paato i te tiaki.

Whai muri i te penapena, ka tukuna e Bitrix24 te URL o te webhook taumai, hei tauira:

Te whakaurunga o Asterisk me Bitrix24

Tiakina to putanga o te URL me te kore he / profile / - ka whakamahia i roto i te tono ki te mahi me nga waea taumai.

Kei a au tenei https://b24-xsynia.bitrix24.ru/rest/1/7eh61lh8pahw0fwt/

Puta tukutuku.

Taupānga -> Paetukutuku -> Taapirihia te matapaetukutuku -> Hook tukutuku putaatu

Ko nga korero kei runga i nga whakaahua whakaahua:

Te whakaurunga o Asterisk me Bitrix24

Te whakaurunga o Asterisk me Bitrix24

Tiakina ka whiwhi i te waehere whakamana

Te whakaurunga o Asterisk me Bitrix24

Kei a au tenei xcrp2ylhzzd2v43cmfjqmkvrgrcbkni6. Me kape ano e koe maau ake; me waea atu koe ki waho.

Mea nui!

Me whirihora he tiwhikete SSL i runga i te tūmau Bitrix24 (ka taea e koe te whakamahi i te letsencrypt), ki te kore ka kore te Bitrix api e mahi. Mena kei a koe he putanga kapua, kaua e manukanuka - kei a ia ano te ssl.

Mea nui!

Ko te mara "Wāhitau Tukatuka" me whai wāhitau mai i te Ipurangi!

A, hei pa whakamutunga, me whakauru ta tatou CallMeOut hei tono mo te waea waea (na ka paato koe i te nama kei runga i te PBX, ka rere atu te whakahau mo te tiimata o te waea).

I roto i te tahua, tohua: Ētahi atu -> Waea -> Atu -> Tautuhinga, whakaturia ki "Tau waea putaatu taunoa" Taupānga: CallMeOut ka paato i te "Tiaki"

Te whakaurunga o Asterisk me Bitrix24

Te whakarite whetūriki

Mo te taunekeneke angitu i waenga i a Asterisk me Bitrix24, me taapiri te waea a te kaiwhakamahi AMI ki 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

I muri mai, he maha nga mahi tinihanga me whakatinana ma te mahere waea (mo matou ko extensions.ael tenei).

Ka hoatu e ahau te katoa o te konae, katahi ka hoatu he whakamarama:

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

};

Me timata mai i te timatanga: te tohutohu ao.

Taurangi URLRECORDS ka penapena i te URL ki nga konae rekoata korero, e ai ki a Bitrix24 ka kumea ki roto i te kaari whakapiri.

Whai muri ka aro atu ki te tonotono tonotono tuhi.

I konei, i tua atu i te tuhi korero, ka tautuhia e matou te taurangi IngoaKatoa.

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

Ka penapenahia te URL katoa ki tetahi konae motuhake (ka karangahia te tonotono ki nga waahi katoa).

Kia tātarihia te waea puta:

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

Me kii tatou ka waea 89991234567, tuatahi ka tae mai ki konei:

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

aua. Ka karangahia te tonotono tuhi korero ka whakatauhia nga taurangi e tika ana.

atu

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

Ka tuhi matou ko wai i timata te waea me te tuhi i te wa tiimata o te waea.

A, i te otinga, i roto i tetahi horopaki motuhake 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});
}

monohia te urunga ki te ripanga CDR mo tenei toronga (kaore e hiahiatia ki reira), tautuhia te wa mutunga o te waea, tatauhia te roa, mena kaore i te mohiotia te hua o te waea - tautuhia (taurangi CallMeDISPOSITION) a, ko te taahiraa whakamutunga, tukuna nga mea katoa ki a Bitrix ma te korikori punaha.

Me etahi atu makutu - he waea taumai:

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

I konei ka aro noa tatou ki te rarangi kotahi.

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

Ka kii ia ki te PBX kia whakauruhia Kaiwaea(ingoa) rite ki te taurangi CallMeCallerIDName.

Ko te taurangi CallMeCallerIDName ake, ka whakatauhia e te tono CallMe (mehemea he ingoa katoa a Bitrix24 mo te nama o te kaikaea, tautuhia hei Kaiwaea(ingoa), kaore - kaore matou e mahi i tetahi mea).

Te whakarite i te tono

Kōnae tautuhinga tono - /var/www/pbx.vistep.ru/config.php

Whakaahuatanga o nga tawhā tono:

  • CallMeDEBUG — ki te 1, katahi ka tuhia nga huihuinga katoa i tukatukahia e te tono ki te konae raarangi, 0 — kaore matou e tuhi i tetahi mea
  • tech - SIP/PJSIP/IAX/etc
  • authToken — Tohu whakamanatanga Bitrix24, he waehere whakamana webhook puta
  • bitrixApiUrl — URL o te pae tukutuku e haere mai ana, kaore he tohu /
  • toronga — rarangi nama o waho
  • Horopaki — te horopaki mo te tiimata i te waea
  • whakarongo_waoma — tere o te tukatuka takahanga mai i te whetūriki
  • tohu — he huinga me nga tautuhinga mo te hono ki te whetūriki:
  • ope — ip, ingoa rangatira ranei o te tūmau whetūriki
  • kaupapa — hoahoa hononga (tcp://, tls://)
  • tauranga - tauranga
  • ingoa kaiwhakamahi - Ingoa Kaiwhakamahi
  • ngaro - kupuhipa
  • hono_wauma — te mutunga o te hononga
  • panui_wauma - taima taima

tauira tautuhinga kōnae:

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

);

Tatūnga Kaitirotiro

Ka whakamahia te Kaitirotiro ki te whakarewa i te tukanga kaikawe huihuinga mai i Asterisk CallMeIn.php, e aro turuki ana i nga waea taumai me te taunekeneke ki a Bitrix24 (kaari whakaatu, kaata huna, me etahi atu).

Kōnae Tautuhinga hei hanga:

/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

Whakarewa me te whakaara ano i te tono:

supervisorctl start callme
supervisorctl restart callme

Te tiro i te mana whakahaere o te tono:

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

mutunga

I puta mai he tino uaua, engari e mohio ana ahau ka taea e te kaiwhakahaere mohio te whakatinana me te pai ki ana kaiwhakamahi.

Ka rite ki te kupu whakaari, hono ki github.

He patai, he whakaaro - waiho mai ki roto i nga korero. Ano, ki te hiahia koe ki te pehea i haere ai te whanaketanga o tenei whakauru, tuhia, a i roto i te tuhinga e whai ake nei ka ngana ahau ki te whakaatu i nga mea katoa i roto i nga korero taipitopito.

Source: will.com

Tāpiri i te kōrero