środa, 27 czerwca 2012

Konfiguracja centrali VoIP Asterisk w dystrybucji Elastix


Wprowadzenie

Tematem tego artykułu będzie instalacja oraz konfiguracja softwarowej centrali Asterisk zawartej w pakiecie oprogramowania Elastix. Elastix jest kolekcją „najlepszych z branży” Opean Source produktów i narzędzi skompilowanej w jednym potężnym kombajnie IP PBX. Całość oferuje funkcje nie tylko centrali PBX, ale także całości jakże popularnego dziś „Unifited Communication”.
Produkt znany pod nazwą Asterisk jest oprogramowaniem typu Open Source firmy Digium realizującym funkcje centrali telefonicznej PBX. Asterisk to system oferujący wszystkie funkcję dostępne w centralach telefonicznych, a także i wiele więcej. Nie tylko obsługuje on dźwięk przesyłany technologią VoIP (Voice over Internet Protocol), ale także jest swoistym pomostem pomiędzy technologią internetową a sieciami typu POTS i PSTN. Zapewnia dostęp do wszystkich znanych ludzkości funkcji PBX, a także i Call Center takich jak: przełączanie, przekierowywanie, zawieszanie i nagrywanie rozmów, a także:  poczta głosowa, rozmowy konferencyjne, połączenia oczekujące,  centralna książka telefoniczna, system bilingowy, obsługa FAXów, ACD (Advencing Call Distribution), IVR (Interactive Voice Response) i wiele więcej.
Główne produkty z których składa się Elastix:
Asterisk (obecnie wersja 1.0) - serce centrali PBX
vTiger CRM i Sugar CRM – systemy CRM
A2Billing – platforma billingowa i aplikacja dla Asterisk
Flash Operator Console – webowa konsola operatorska
Hylafax  - softwarowy wirtualny FAX
Openfire  - Server do obsługi wiadomości tekstowych
System do obsługi konferencji
freePBX – webowy panel konfiguracyjny PBX
Postfix – Open Source  serwer pocztowy
OSLEC – aplikacja do softwarowej kancelacji echa
Round Cube webmail – interfejs webowy dla poczty elektronicznej
Panel zarządzania – panel do zarządzania wszystkich wymienionych aplikacji powyżej
CentOS – dystrybucja Linuxa, na której pracują wszystkie wyżej wymienione narzędzia

Projekt system VoIP

Centrala PBX zostanie zainstalowana naw wirtualnej maszynie firmy VMware (VM Player) działającej pod kontrolą systemu MS Windows 7. Dodatkowo, jako końcówki IP służyć będą softphony 3CX  w wersji dla Windows oraz Android (pracujące w oparciu o telefony działające w sieci WiFI), a także hardwarowy telefon SIP marki Polycom. Jako połączenie centrali PBX ze światem zewnętrznym telefonii będą pracowały łącza SIP Trunk połączone z jednym z providerów telefonii VoIP – w tym przypadku operatorem marki Happy Call.  Pokaże to jak w prosty sposób i tanim kosztem można dostarczyć usługi profesjonalnej centrali telefonicznej w firmach z sektora SMB. Z wdrożenia takiego rozwiązania płynie masa korzyści niedostępnych w tradycjonalnej telefonii:
-ethernet jako medium dla przesyłu nie tylko danych ale i usług głosowych (znaczne obniżenie kosztów instalacji okablowania)
- możliwość bezpłatnych rozmów w ramach firmy bez względu na lokalizację
- możliwość rejestracji numeru z innej strefy numeracyjnej – telefon pracujący w Łodzi może mieć numer należący do strefy numeracyjnej Warszawy, Londynu lub innego dowolnego miasta
-brak kosztów zakupu fizycznej centrali PBX, wystarczy komputer wpięty w sieć na którym i tak działają inne usługi, nasz PBX pracuje na maszynie wirtualnej i nie wymaga sporej ilości zasobów
-wszystkie funkcje dostępne do tej pory jedynie dla bogatych firm i korporacji, które jest w stanie dostarczyć Asterisk (kolejkowanie i przekazywanie połączeń, poczta głosowa, pokoje konferencyjne, nagrywanie rozmów).

Instalacja Asterisk na Wirtualnej Maszynie

Naszą centralę instalujemy na wirtualnej maszynie marki VMware –VMware Player.  Przed rozpoczęciem instalacji pobieramy z Internetu bootowalną płytę z kompilacją systemu Elastix ze strony producenta:  http://www.elastix.org/, pobrany plik jest obrazem płyty CD  z rozszerzeniem. iso. Do dzieła.
W WMware Playerze tworzymy nową maszynę – z całą pewnością do obsługi systemu na maksymalnie 100 użytkowników wystarczy przeznaczyć na nią 512 MB pamięci RAM, oraz przestrzeń dyskową 10 GB. Kartę sieciową wirtualnej maszyny ustawiamy w trybie Bridged, z zaznaczoną opcją replikacji adresów IP. Taki dysk powinien wystarczyć jeśli nie zamierzamy gromadzić na nim i nagrywać sporej ilości rozmów. WAŻNE jest że plik z obrazem płyty instalacyjnej Elastixa podłączamy dopiero po stworzeniu wirtualnej maszyny! Jeśli zrobimy to podczas tworzenia wirtualnego serwera – VM Player wymusi  wykryje że instalowanym systemem jest CentOS i wymusi od nas podanie hasła do Roota przy i instalacji, a finalnie zainstaluje sam CentOS, bez dodatków, które w tym przypadku są dla nas najważniejsze.

Uruchamiamy nasz wirtualny serwer, sama instalacja jest banalna, możemy z powodzeniem wybrać opcję żeby kreator sam podzielił dysk na partycję. Ponadto podczas instalacji podajemy trzy hasła do różych usług systemowych tzn. hasło do profilu Root, do bazy mySQL, oraz do konta Administratora na panelu konfiguracyjnym www.
Po zakończeniu instalacji, logujemy się na roota i wpisujemy polecenie SETUP, wchodzimy w konfigurację sieci i podajemy adres IP wraz z maską. Teraz możemy się zalogować do właściwego Panelu Administracyjnego.

Generalne ustawienia

Wchodzimy w górnym menu w zakładkę PBX, a następnie z lewego menu wybieramy General Settings.
Ważną opcją tutaj jest wybór strefy czasowej,  dostępnej pod International Settings – oczywiście wybieramy Poland. Następnie ze względów bezpieczeństwa ustawiamy pod polem Security Settings  opcję Allow Anonymous Inbound SIP Calls? Na NO – spowoduje to że żadne wszystkie niezaufane połączenia SIPowe ze świata zewnętrznego zostaną zablokowane.

Możemy także ustawić czy chcemy, żeby podczas oczekiwania na odebranie połączenia w słuchawce telefonu grał standardowy dźwięk Ring, bądź muzyka. Ustawiamy to pod sekcją Dialing Options w polu Asterisk Outbound Dial command option. Gdy wpiszemy tam literkę r podczas oczekiwania na dźwięk połączenia usłyszmy charakterystyczny dźwięk dzwonka, lecz jeśli wstawimy tam literę m usłyszymy przyjemną dla ucha melodyjkę.
Każdą zmianę musimy zapisać klikając na dole strony Submit Changes, ale to nie wystarczy – żeby weszła w życie musimy później na górze strony kliknąć Apply Configuration Changes Here.

Konfiguracja Extensions

Extenions to nic innego jak klienci różnych protokołów, będące u nas końcówkami IP, czyli telefonów podłączonych do naszej centrali. My piosługiwać będziemy się tylko klientami protokołu SIP.
Po lewej stronie w sekcji Basic wybieramy zakładkę Extensions. Wybieramy pozycję Generic SIP Devices a następnie klikamy Submit.
W sekcji Add Extension w polu User Extension wpisujemy nasz skrócony numer telefonu.
W sekcji Display Name wpisujemy to co chcemy by pokazywało się jako identyfikacja użytkownika np. Imię i Nazwisko.
W sekcji  Device Options  w polu Secret wpisujemy hasło jakie trzeba podać przy logowaniu się do serwera.


Opcjonalnie w sekcji Recording Options możemy wybrać, czy dana stacja może być nagrywana, na połączenia wychodzące, bądź przychodzące. Domyślną wartością jest On Demand. Dzieki tej funkcji możemy podczas trwania rozmowy wciskając na telefonie *1 nagrać ją.
W sekcji Voicemail & Directory, możemy włączyć pocztę głosową ustawiając Status na Enable, a w pozycji Voicemail Password wpisujemy hasło numeryczne, jakiego będziemy używać aby odsłuchać pocztę, bądź zmienić z poziomu telefonu jej ustawiania. Aby wdzownić się na pocztę głosową wyvieramy z klawiatury telefonu *98, następnie podajemy numer Extension oraz hasło do poczty. Z tego poziomu, możemy odsłuchać pocztę, zarządzać 
wiadomościami, a także nagrywać powiadomienia.
W celach testowych tworzymy cztery Extensions (numery 101-104).
UWAGA: Po stworzeniu numeru – nie możemy później już go zmienić, jeśli chcemy go zmienić musimy go usunąć i założyć ponownie.
UWAGA: Ostrożni z włączaniem poczty głosowej. Jeśli włączamy ją z automatu dla każdego numeru to później problemem może się okazać jej wyłączenie, bo trzeba to robić oddzielnie.

Konfiguracja 3CX

W naszym projekcie końcówkami IP będą Softphony marki 3CX w wersji dla Windows i Android (działające na smartphonie przez sieć bezprzewodową WiFi), oraz fizyczny telefon marki Polycom.
W 3CX Phonie wystarczy tylko, że w ustawieniach konta wpiszemy nasz numer Extensions, hasło do konta, oraz adres naszego serwera i już możemy się cieszyć działającym telefonem (tak jak na obrazku poniżej). Podobnie sprawa wygląda na Smartphonie z Androidem.

Konfiguracja telefonu Polycom

Sprawa wydaję się być poważniejsza, kiedy przyjdzie nam skonfigurować telefon Polycom. Krok po kroku wygląda to tak:
-odczytujemy z wyświetlacza telefonu jego adres IP wchodząc w  Menu -> Status -> Network->TCP/IP Parameters 
-logujemy się przez przeglądarkę internetową do interfejsu webowego telefonu, domyślne dane do logowania to
Hasło: Polycom
Login: 456
Resztę danych potrzebnych do rejestracji w systemie wpisujemy, czyli nasz numer Extensions, hasło do profilu SIP oraz adres serwera wpisujemy tak jak ma to miejsce na Rysunku 12.
Teraz wszystkie numery mamy już dostępne lokalnie w naszej sieci LAN. Możemy swobodnie dzwonić pomiędzy nimi.  Działają takie funkcje jak zawieszanie, przekierowywanie, transfer rozmów. Fajnie komunikacja wewnątrz jest zapewniona, ale jak najprościej zapewnić kontakt z całym światem zewnętrznym? Odpowiedź jest banalna – łącze VoIP od któregoś z wielu dostawców usług opartych na protokole SIP – my użyjemy dostawcę HappyCall.

Konfiguracja Trunks

Bramą na świat w naszym projekcie będzie konto SIP dostarczone przez firmę Iptell Sp. z o.o., operatora marki HappyCall, dostępnego pod adresem www.happycall.pl Zapewni nam to numer DID, prze który ludzie z „zewnątrz” będą mogli się dodzwonić do naszej firmy. Za pomocą tych kont, także my będziemy mogli dzwonić z naszej centrali do reszty świata.
Wchodzimy w Elastix’u w PBX -> Trunks -> Add a Trunk i wybieramy Add SIP Trunk




W sekcji General Settings wpisujemy nazwę pod jaką nasz Trunk będzie funkcjonował w centrali w polu Trunk Name:, natomiast w  polu Outbound Caller ID wpisujemy numer telefonu, otrzymany od naszego providera VoIP.
W sekcji  Outgoing Settings w polu Trunk Name wpisujemy login otrzymany od naszego operatora, a natomiast  w polu PEER Details, wpisujemy:
username= login od providera VoIP
user= login od providera VoIP
type=friend
secret=hasło do konta SIP
qualify=no
nat=yes
insecure=very
host=adres IP serwera od providera VoIP
fromuser=login od providera VoIP
disallow=all
context=from-trunk
canreinvite=no
allow=alaw
allow=ulaw
allow=gsm

Musimy jeszcze uzupełnić  Registraction Strings, które ogólnie ma postać:
login:hasło@adres_ip_centrali/numer-telefonu
czyli w naszym przypadku:
48223762691:haslo@sip.2call.pl/48223762691
Zapisujemy ustawienia przyciskiem na dole Submit Changes, oraz potwierdzamy przyciskiem na górze strony Apply Configurations Settings.
Czynność tą powtarzamy dla każdego konta, które otrzymaliśmy od operatora, ja na potrzeby tej pracy wprowadzam jeszcze jedno, tym razem z numerem ze strefy łódzkiej.

Konfiguracja połączeń wychodzących, czyli Outband Routers

W tym rozdziale opisze jak skonfigurować połączenia wychodzące. Wchodzimy w PBX, w sekcji Basic Settings klikamy Outband Routers i przechodzimy do strony Add Route. W oknie Route Name wpisujemy nazwę naszej konfiguracji połączenia wychodzące – w tym przypadku out_world.
Następnie w sekcji  Dial Patterns that will use this Route konfigurujmy nasz Dialplan połączeń wychodzących. Jako prefiks określamy 0 – oznacza to, że aby zadzwonić na zewnątrz musimy dowolny numer DID poprzedzić 0, następnie z racji tego, że numery w naszym kraju są zawsze dziewięciocyfrowe wpisujemy: [1-689]XXXXXXXX.
Dzięki wpisowi  [1-689] zablokowaliśmy połączenia zaczynające się na 7 oraz 0, czyli odrzucone zostaną połączenia błędne w których użytkownik wybrał jako drugą cyfrę (po prefiksie) 0, oraz płatne numery typu 7XX popularnie zwane  0700.
Ogólny schemat Dialplan’u tworzymy w następujący sposób:
X – zastępuje każdą cyfrę z przedziału 0-9
Z – zastępuje każdą cyfrę z przedziału 1-9
N – zastępuje każdą cyfrę z przedziału 2-9
[1237-9] – blokowanie określonych liczb, tak możemy zablokować niektóre liczby, w tym przypadku jako liczba mogą zostać wybrane następujące: 1, 2, 3, 7,8,9
Pozostało nam jeszcze przypisanie konkretnego SIP Trunku, który zadziała przy próbie nawiązania połączenia z naszej centrali,  w sekcji  Trunk Sequence for Matched Routes wybieramy nasze 2 wcześniejsze SIP Trunki. Zapisujemy ustawienia i możemy już wykonywać połączenia na świat.

Konfiguracja Inbound Routes

Teraz sprawimy żeby ludzie z zewnątrz mogli dodzwonić się na naszą centralkę.
Wchodzimy na stronę PBX i w sekcji Inbound Call Control dostępnej  po lewej stronie wybieramy Inbound Routes, a następnie po prawo Add Incoming Route. W tym przypadku przypiszemy konkretne SIP Trunki do konkretnych Extenion, ale należy pamiętać że Asterisk ma masę możliwości konfiguracyjnych – możemy np. stworzyć Grupy odbierania, zawansowane IVR etc.
W polu Description wpisujemy nazwę danej reguły odbierania połączeń, w tym przypadku in_warsaw.
W polu DID Number wpisujemy numer telefoniczny naszego konta SIP – w tym przypadku SIP Trunku o nazwie Warszawa.
Następnie na samej dole w sekcji Set Destination  docelową ścieżkę, gdzie ma trafić połączenie – w tym przypadku wybieramy Extension i nasz numer 1001 <Pawel>.
Zapisujemy ustawienia standardową metodą.  Teraz skonfigurowaliśmy, że wszystkie połączenia kierujące na nasz warszawki numer trafią do telefonu 1001.
W tym momencie wiemy już jak konfigurować podstawowe funkcje na centrali telefonicznej i możemy bez problemu skonfigurować system na kilkudziesięciu, albo nawet kilkuset użytkowników.

Konfiguracja Ring Groups

Funkcja Ring Groups pozwala nam skonfigurować reguły grup dzwoniących. Możemy ustawić kolejki odbierania połączeń, bądź sprawić żeby wszystkie telefony dzwoniły  naraz.  W tym przykładzie nasz SIP Trunk z numerem łódzkim przypiszemy do Działu Handlowego, którym będą Extensions 1002, 1003 i 1004. Numery te zaczną dzwonić wszystkie naraz, gdy ktoś zadzwoni na nasz łódzki numer.
W lewej stronie w sekcji Inbound Call Control wybieramy Ring Groups i wybieramy Add Ring Groups.
W polu Ring Group Number wpisujemy numer, który będzie miała nasza grupa. Ze skróconego wybierania  będzie można używając go wdzwonić się na niego z dowolnego Extension w naszym systemie. Naszej grupie nadajemy numer 600, to będzie wewnętrzny numer Działu Handlowego.
W polu Group Description wpisujemy opis naszej grupy – w tym przypadku handlowy.
W polu Extension Quick Pick możemy dodać wcześniej stworzone Extenions, które mają dzwonić w tej grupie. Wystarczy że klikniemy na dany numer a zostanie on od razu dodany do listy. My dodajemy numery 1002, 1003, 1004.
Na samym dole strony w sekcji Destination if no answer wybieramy regułę, co ma się dziać, gdy żaden z numerów nie odbierze połączenia. My je zakończymy wybierając najpierw Terminate Call, a następnie Hang Up.
Zapisujemy ustawienia tak jak robiliśmy to w każdym przypadku wcześniej.
Teraz przypiszemy naszą grupę do numeru łózkiego, w tym celu powtarzamy kroki z wcześniejszego rozdziału Inbaunt Routers, gdzie konfigurowaliśmy numer do wdzwonienia się na Extension 1001, z tą tylko róźnicą, że w sekcji Set Destination wybieramy  Ring Groups a następnie wcześniej stworzoną naszą grupę Ring Groups.
Po wykonaniu tych kroków mamy skonfigurowany numer do całego działu handlowgo naszej firmy.

Konfiguracja rozmów konferencyjnych

Elastix daje nam możliwość stworzenia pokojów konferencyjnych tzn. numerów, na który może się wdzwonić wielu użytkowników i wspólnie mogą prowadzić rozmowę. Aby zabezpieczyć ją przed niepowoływanymi słuchaczami istnieje możliwość dostępu do pokoju za pomocą kodu PIN. A więc do dzieła.
W lewym menu w sekcji Internal Options & Configuration wybieramy Conferences. W polu Conferences Number wpisujemy numer naszego pokoju konferencyjnego – my nadamy mu numer 9000. W polu Conference Name wpisujemy nazwę naszego pokoju – nazwiemy go pokoj1.
W polu User Pin wpisujemy kod PIN, który użytkownik musi podać aby wziąć udział w konferencji, w tym przypadku damy 1234.
W polu Admin PIN – kod, którym ma się posłużyć osoba, która będzie mogła konferencję zakończyć, usuwać niektórych jej użytkowników etc. Wpisujemy 4321

Użytkownicy Webowi

Elasix umożliwia logowanie się do centrali za pomocą przeglądarki internetowej nie tylko Administratorom, ale także wszystkim użytkownikom. Dzięki tej funkcji, właściciel danego numeru Extension, może bezpośrednio ze strony internetowej odsłuchiwać, bądź kasować pocztę głosową, ustawić przekierowywania na inny numer telefoniczny, zarządzać, czy może nagrywać połączenia i wiele więcej.
Aby utworzyć konto użytkownika wchodzimy w System -> User i wybieramy Add User
Następnie podajemy Login, hasło i powiązujemy go z konkretnym Extenion i zapisujemy ustawienia.
Teraz możemy zalogować się na naszego użytkownika podając w przeglądarce www adres IP naszej centrali.

Monitorowanie Centrali VoIP

Elastix dostarcza nam wiele możliwości monitorowania centrali, tzn sprawdzenia kto jest zalogowany, w tej chili, kto prowadzi rozmowę, sprawdzenia statusu pokoju konfiguracyjnego etc.  Aby dostać się do Panelu Operatorskiego wybieramy kolejno PBX -> Operation Panel

Na załączonym obrazku widzimy, że mamy zalogowanych 3 użytkowników jako Extension, dwóch z nich prowadzi rozmowę konferencyjną w pokoju numer 9000. Możemy także zobaczyć, że jesteśmy podłączenie do dwóch kont SIP zewnętrznych, czyli wcześniej stworzonych przez nas SIP Trunków.
Ciekawym rozwiązaniem jest też Panel CDR (Call Detail Record). Pozwala nam on zobaczyć raporty z wszystkich rozmów, jakie przeszły przez naszą centralę, wyeksportować je do Excela, bądź do pliku .CSV w celu dalszej edycji, policzenia kosztów rozmów etc. Do Panelu wchodzimy z webowego menu wybierając Reports -> CDR Reports

Podsumowanie

W artykule została przedstawiona krop po kroku podstawowa konfiguracja centrali PBX VoIP, dystrybucji Elastix działającej w oparciu o jądro Asteriska. Centrala została skonfigurowana do pracy z czterema numerami wewnętrznymi, dwoma łączami od operatora VoIP tzw. SIP TRUNKS. Włączona została obsługa nagrywania rozmów, włączenie i obsługa poczty głosowej, stworzony przykładowy pokój konferencyjny. W centrali domyślnie działają takie funkcje jak przekazywanie i przkierowywanie rozmów, oraz ich zawieszanie. Pokazano dodatkowo jak skonfigurować telefony IP, zarówno hardwarowe (Polycom), jaki softwarowe (3CX). 

















16 komentarzy:

  1. Bardzo przydatny wpis. Może napisałbyś coś jeszcze o konfiguracji Elastix? Np ustawienia kolejek, IVR, nagrywanie rozmów?

    OdpowiedzUsuń
  2. Cześć, mam problem z konfiguracją Elastixa... wszelkie telefony (softowe czy stacjonarne) nie znajdują serwera (błąd 408). Wygląda to tak, jakby firewall blokował te połączenia. SSh i telnet działają normalnie, serwer pinguje WLAN i LAN. Możecie mi pomóc?

    OdpowiedzUsuń
  3. Cześć, mam pytanie. Czy możliwe jest stworzenie za pomocą Asteriska automatu do przeprowadzania płatności kartą poprzez połączenie telefoniczne ? Czy może ktoś wie coś więcej na ten temat ?

    OdpowiedzUsuń
  4. Hej, mam skonfigurowaną centralę na Asterisku. Wszystkie wewnętrzne połączenia działają bez problemu. Mam też ustawiony sip trunk z freeconet. Połączenia przychodzące działają. Chcę zrobić coś takiego: dzwoniący dzwoni na numer sip trunk (numer freeconet) a asterisk przekierowuje go na numer komórkowy lub jakiś inny. Jak to ustawiać w dialplanie w konfiguracji asteriska (extensions.conf)?

    OdpowiedzUsuń
    Odpowiedzi
    1. Ten komentarz został usunięty przez autora.

      Usuń
    2. exten => 234234234,1,Dial(SIP/freeconet_trunk/666666666)

      Gdzie :
      234234234 - extension do którego wpada połączenie z freeconet
      freeconet_trunk - nazwa trunka z pliku sip.conf
      666666666 - numer, na który chcesz przekierować rozmowę.

      Usuń
  5. 3CX jak wyczytałem przed zainstalowaniem już nie współpracuje z żadnymi PBX poza swoim własnym. Jest coś równie dobrego do polecenia w zamian?

    OdpowiedzUsuń
  6. Witam,
    mam problem z połączeniami z zewnątrz tzn. połączenie z zewnątrz przychodzi, odbieram połączenie ale nic nie słychać. W drugą stronę działa wszystko ok. Macie jakiś trop, gdzie szukać przyczyny. Sip Trunk do happycall.
    W logach nie ma błędów
    Pozdrawiam

    OdpowiedzUsuń
  7. Jak w elastix zmienic sekretarke na polski?

    OdpowiedzUsuń
  8. Fajnie napisane. Pozdrawiam i gratuluję.

    OdpowiedzUsuń
  9. Witam
    Orientuje się ktoś czy w ELASTIXie można ustawić gdzie zróżnicowanie połączeń przychodzących między np. 8-16 i po 16?

    OdpowiedzUsuń
    Odpowiedzi
    1. Można to zrobić za pomocą funkcji time conditions: https://wiki.freepbx.org/display/FPG/Time+Conditions+Module

      Usuń
  10. Wydaje mi się, że jest to dość poważna sprawa i chyba nie wiem czy byłbym w stanie sam to wszystko zrozumieć. Ja również polecam przeczytanie artykułu https://techunbox.pl/jak-dziala-wirtualna-centrala-telefoniczna gdzie fajnie wyjaśniono jak działa wirtualna centrala telefoniczna.

    OdpowiedzUsuń
  11. Ja jestem zachwycona jak wirtualna centrala 3CX odmieniła sposób, w jaki moja firma prowadzi komunikację. Praca z systemem jest intuicyjna i oferuje mnóstwo przydatnych funkcji, które codziennie ułatwiają mi i mojemu zespołowi życie. Gorąco polecam wirtualną centralę 3CX każdemu, kto szuka efektywnego i nowoczesnego rozwiązania :)

    OdpowiedzUsuń