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
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
Llenwch baramedrau'r bachyn gwe sy'n dod i mewn fel yn y sgrinluniau:
A chliciwch arbed.
Ar Γ΄l arbed, bydd Bitrix24 yn darparu URL y bachyn gwe sy'n dod i mewn, er enghraifft:
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:
Cadw a chael y cod awdurdodi
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"
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,
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