Integracja enova z centralką telefoniczną (cti2enova). Dokumentacja techniczna + Instrukcja użytkownika DRIT 1
Opis ogólny Dodatek cti2enova jest rozszerzeniem systemu ERP enova dedykowanym dla firm chcących podnieść standard obsługi na polu zarządzania relacjami z klientem (CRM). Jest przeznaczony dla tych przedsiębiorców i instytucji dla których wydajność i szybkość działania a przy tym również optymalizacja interakcji użytkownika z programem (np. powiadomienie o przychodzącej rozmowie i podniesienie kartoteki kontrahenta) zwiększa nie tylko prostotę użytkowania systemu, ale dzięki temu daje możliwość lepszej merytorycznie obsługi klienta, zwalniając operatora z konieczności zbędnego wyszukiwania danych, pamiętania o zapisaniu zdarzenia, ustawienia przypomnienia etc. Dodatek jest zalecany dla każdej firmy która szuka nowych narzędzi usprawniających procesy CRM, w tym zarówno małe i średnie przedsiębiorstwa, jak i duże call center. Instalacja i konfiguracja Wymagania techniczne: cecha System enova w wersji 9.6 wzwyż Framework.NET 4.0/4.5 Centrala telefoniczna Slican Infrastruktura techniczna uwagi Dodatek korzysta z funkcjonalności nowych formularzy (w standardzie od wersji 10.x.x) stąd nie będzie współpracował poprawnie z wersjami starszymi jak 8.x.x/9.x.x wcześniejsze niż 9.6 Dodatek zapewnia wsparcie dla wszystkich centralek SLICAN współpracujących z protokołem CTI i wyposażonych w moduł LAN tj. IPL-256, CCT- 1688.EU etc. (UWAGA: Od wersji 8 protokołu wymagane jest włączenie znacznika CTI=1 w arkuszu abonenckim konfiguracji bazy danych centrali CCA i NCT) Aparaty telefoniczne zapewniające poprawną współpracę z centralką, tzn. reagujące na sygnały sterujące przychodzące / generujące poprawne sygnały wychodzące np. podniesienie mikrotelefonu. W tym większość znanych obecnie na rynku telefonów zarówno analogowych jak i cyfrowych w tym z implementacją obsługi VoIP. Instalacja: Instalacja dodatku ogranicza się do wgrania biblioteki dll do odpowiedniego katalogu Assemblies (w zależności od uruchamianej wersji enova). - dla wersji x64 Soneta.Explorer.exe: C:\Program Files\Common Files\Soneta\Assemblies - dla wersji x86 Soneta.Explorer32.exe: C:\Program Files (x86)\common Files\Soneta\Assemblies DRIT 2
Konfiguracja Podstawowa konfiguracja dodatku obejmuje: - Konfigurację globalną: z poziomu Narzędzia / Opcje / CTI / Ogólne - Konfigurację abonenta: w kontekście operatora (zakładka CTI) Konfiguracja globalna. Podstawowe dane (sekcja ogólne): - Protokół CTI włączony: uruchamia lub dezaktywuje globalnie obsługę CTI w enova - Adres serwera CTI: adres IP bądź nazwa hostname wskazująca lokalizację serwera centralki LAN\WAN -Długość numeru wew.: długość numerów wewnętrznych obowiązujących w danej korporacji/organizacji. Wartość nie może przekraczać 4 znaków (ograniczenie centralki) - Prefix linii zew.: Określa prefiks wyjścia na linię zewnętrzną (wyjście na miasto) z sieci wewnętrznej. Domyślna wartość w większość przypadków 0. Konfiguracja abonenta: W ramach konfiguracji pojedynczego operatora do pracy z dodatkiem, najważniejszym są ustawienia w sekcji Ustawienia abonenta. Reszta ustawień jest opcjonalna i domyślnie ustawiona. DRIT 3
Pola i ich znaczenie: - Abonent CTI: uruchamia lub dezaktywuje obsługę CTI dla danego operatora enova - Dostęp do panelu WebCTI: informuje czy użytkownik ma widzieć panel rozszerzony, więcej w rozdziale następnym - Numer katalogowy: numer telefonu w sieci korporacyjnej (max cztery znaki) - Klucz dostępu: hasło dostępu do usługi CTI Testowanie usługi: Test #1 logowanie i komunikacja enova z centralką W celu przetestowania poprawności konfiguracji po zapisaniu wszystkich niezbędnych danych, należy zamknąć enova i uruchomić ponownie logując się na konto operatora który został wskazany jako abonent. Widok okna enova po poprawnym zalogowaniu do centralki: DRIT 4
Okno logów powinno rozszerzyć się o zakładkę CTI, która z kolei powinna wypełnić się danymi dotyczącymi procesu logowania. Jeśli konfiguracja zarówno po stronie enova jak i centralki była poprawna, powinnyśmy ujrzeć komunikat: OK + nazwa/model/typ centralki (+ dane dodatkowe związane z konkretnym abonentem): Przykład poprawnej odpowiedzi z centralki. Test #2. reakcja na sygnały sterujące z telefonu Test ogranicza się do podniesienia mikrotelefonu (słuchawka) bądź wyboru opcji gotowości do nadawania numeru (zielona słuchawka). Poprawna reakcja systemu powinna być taka jak poniżej: Test #3 - Pierwszy telefon: Dodatek działa w kontekście obiektów enova implementujących interfejs IAdresHost, w tym min: Kontrahent, KontaktOsoba (osoba kontaktowa), Lokalizacja, Zadanie CRM (zadanie, spotkanie, zdarzenie, notatka etc.). Nawiązanie połączenia wywoływane jest przez worker (czynność: Zadzwoń ) zarówno z poziomu listy jak i formularza dla każdego w.w. obiektu biznesowego. Domyślnie w ramach formularza, na obiektach mogących zawierać więcej niż jeden numer telefonu (np. Kontrahent) wywoływane jest okno parametrów z wyborem numeru na który chcemy wykonać połączenie. DRIT 5
Na listach natomiast domyślnie wybierany jest numer główny. Jeśli taki nie został oznaczony w kartotece np. kontrahenta, wówczas system sam wymusi podniesienie okna parametrów z listą wyboru. Można też wymusić taką funkcjonalność opcjonalnie zmieniając odpowiednie ustawienie w konfiguracji abonenta (sekcja Telefon): Inne ustawienie to sposób wybierania numeru. - opcja Czekaj na podniesienie mikrotelefonu czyli ta która jest wybrana domyślnie, sprawdza się w większości telefonów zarówno analogowych jak i cyfrowych. Jej działanie polega na oczekiwaniu na przejście w stan gotowości do nadawania tonowego numeru, czyli na podniesienie mikrotelefonu lub wybranie znaku gotowości (tzw. zielona słuchawka). W tym trybie system podejmuje też próbę wysłania do końcówki informacji o żądaniu podniesienia mikrotelefonu (PICK UP). Jeśli jednak aparat nie obsługuje takiej funkcjonalności, w logu pojawi się odpowiedni komunikat + numer błędu (NA) Po czym automatycznie przejdzie w stan oczekiwania. Podniesienie mikrotelefonu zakończy czas oczekiwania i system rozpocznie wybieranie numeru i nawiązania połączenia. DRIT 6
- opcja Inicjuj połączenie wymusza reakcję zwrotną. Do centralki wysłany jest specjalny sygnał który w odpowiedzi nawiązuje kontakt z mikrotelefonem tak jak podczas połączenia przychodzącego. Operator widzi na wyświetlaczy (tryb CLIP) numer wybierany tak jakby to on inicjował połączenie. Odbiór telefonu, powoduje przejście w stan nadawania, i cała dalsza procedura jest analogiczna do punktu wcześniejszego. Algorytm Doświadczenie we wdrożeniach systemów IT uczy, że nie ma dwóch identycznych sparametryzowanych środowisk. Każdy klient ma pewien zestaw wytycznych oraz wymagań co do działania oprogramowania. Częstokroć wynika to z faktu migracji na inny system, szukając bardziej wydajnych rozwiązań, ale zachowując przy tym zbliżoną organizację pracy (mniejszy nakład na koszty szkoleń pracowników do pracy z nowym systemem). Inna kwestia wynika ze specyfiki branży lub ograniczeń bądź założeń co do infrastruktury zarówno technicznej jak i logicznej. Stąd skalowalność jest obecnie bardzo pożądaną cechą i dlatego dodano możliwość implementowania własnych algorytmów na zdarzenia centralki, np. zakończenie rozmowy, połączenie przychodzące etc. To właśnie te algorytmy przypominające swą koncepcją wbudowane makra pakietu Office, są odpowiedzialne za np. podnoszenie formatki kontrahenta czy zapisywanie zdarzeń CRM z automatu, o których w punktach powyżej. Zaletą tej funkcjonalności jest to, że można dopasowywać i rozbudowywać funkcjonalność obsługi połączeń i tego jak ma reagować na nie system (nie ograniczając przy tym zakresu na sztywno tylko do modułu CRM) we własnym zakresie, bez potrzeby rekompilacji dodatku. Algorytm modyfikuje się w zakładce konfiguracji globalnej. Włączenie tej opcji domyślnie zainicjuje edytor pustymi wzorcami wymaganych metod. Edytor zawiera intellisense wspomagający pisanie algorytmów implementujących poszczególne funkcjonalności oraz weryfikator kodu (wewnętrzny kompilator enova). DRIT 7
OnLogin() OnUnlogin() BeforeDial() OnDial() BeforeRinging() OnRinging() Nazwa Zestaw dostępnych metod i właściwości: Opis implementacji Implementuje algorytm na moment logowania do centralki CTI Implementuje algorytm na zdarzenie wylogowania z centralki CTI (wołane przed zamknięciem połączenia) Implementuje algorytm na czas podniesienia mikrotelefonu, jeszcze przed rozpoczęciem nadawania tonowego numeru do centralki Implementuje algorytm na moment wybierania numeru Implementuje algorytm na akcję połączenia przychodzącego, ale jeszcze przed wyszukaniem obiektu (Row jest puste) Implementuje algorytm już na samo połączenie przychodzące w momencie kiedy jest już logowane przez enova DRIT 8
OnRelease() Implementuje algorytm na zdarzenie zakończenia rozmowy/ odłożenia słuchawki/ wysłania sygnału zajętości Jako właściwości przekazane do algorytmu możemy rozróżnić: Row Context Session Numer Nazwa Opis IAdresHost - Obiekt dla którego generowane jest zdarzenie, np. Kontrahent, KontaktOsoba etc. Zwraca aktualny kontekst programu Zwraca aktualną sesję programu Daje dostęp z akcesorem na GET i SET do numeru telefonu aktualnie w kontekście (string) W kodzie możemy również dodawać własne klasy (w tym również statyczne), metody, enumeratory etc. Poniżej kilka przykładów dodających właściwe funkcjonalności (dostępne również jako Starter- Kit do zaimportowania przez XML bezpośrednio w systemie). Algorytm public enum TypFormatki Kontrahent = 1, Zdarzenie = 2 ( ) public override void OnRinging() // Tutaj umieść kod na zdarzenie połączenia przychodzącego if (Row.GetType() == typeof(kontrahent)) Kontrahent _kontrahent = (Kontrahent)Row; Soneta.Business.View _zadania = _kontrahent.zadania.createview(); _zadania.condition &= new FieldCondition.Equal("Rodzaj", RodzajZadania.Zdarzenie); _zadania.condition &= new FieldCondition.Equal("Aktywny", true); if (_zadania.count == 0) if (System.Windows.Forms.MessageBox.Show (new System.Windows.Forms.Form() TopMost = true, String.Format("Dzwoni: 0. \r\n Czy otworzyć kartotekę kontrahenta?", Row), "enova", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) Otworz(TypFormatki.Kontrahent); else return; else if (System.Windows.Forms.MessageBox.Show (new System.Windows.Forms.Form() TopMost = true, String.Format("Dzwoni: 0. \r\n Czy otworzyć aktywne zdarzenie?", Row), "enova", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) Otworz(TypFormatki.Zdarzenie); else return; DRIT 9
Algorytm c.d. public void Otworz(TypFormatki typ) if (Row.GetType() == typeof(kontrahent) && typ == TypFormatki.Kontrahent) Kontrahent kontr = (Kontrahent)Row; Context context = Context.Empty.Clone(kontr.Session); Soneta.Business.Forms.ObjectNavigator on = new Soneta.Business.Forms.ObjectNavigator(kontr, kontr.session, context); Soneta.Business.Forms.FormManager.OpenForm(on, false); if (Row.GetType() == typeof(kontrahent) && typ == TypFormatki.Zdarzenie) Kontrahent kontr = (Kontrahent)Row; Soneta.Business.View _zadania = kontr.zadania.createview(); _zadania.condition &= new FieldCondition.Equal("Rodzaj", RodzajZadania.Zdarzenie); _zadania.condition &= new FieldCondition.Equal("Aktywny", true); Zadanie _zdarzenie = (Zadanie)_zadania.GetFirst(); Context context = Context.Empty.Clone(_zdarzenie.Session); Soneta.Business.Forms.ObjectNavigator on = new Soneta.Business.Forms.ObjectNavigator(_zdarzenie, _zdarzenie.session, context); Soneta.Business.Forms.FormManager.OpenForm(on, false); Podnosimy odpowiednią formatkę w reakcji na połączenie przychodzące: DRIT 10
Efekt na zdarzeniu przychodzącym. Jeśli numer zostanie rozpoznany jako przynależący do kartoteki kontrahenta, to sprawdzony zostanie warunek czy z danym podmiotem prowadzone są aktualnie jakieś aktywne kontakty (np. otwarta szansa sprzedaży). Jeśli tak, to zostanie zgłoszony monit o otwarciu aktywnego zdarzenia CRM, w przeciwnym wypadku kartoteki kontrahenta. Zarówno sam monit jak i okno odpowiedniej formatki zostanie otwarte niezależnie od aktualnie załadowanego kontekstu w programie enova (przykład: screen powyżej). Oczywiście skalowalność którą uzyskujemy dzięki implementacji wewnętrznego algorytmu najbardziej potwierdza się w przypadku bardzo zaawansowanych konfiguracji, np. logowanie do różnych providerów obsługujących konkretne połączenia dla wybranych krajów (w zależności od kodu kraju kontrahenta), ale doskonale sprawdza się również w przypadku prostszych instalacji, gdzie wymagania co do komunikacji z centralką i obsługi połączeń z poziomu CRM są dosyć standardowe. Jeśli chcemy np. zapisywać nieodebrane połączenia do asystenta, jako zadania systemowe (taski) z możliwością uruchomienia powiadomienia, to wszystko jest możliwe właśnie dzięki zastosowaniu algorytmów wewnętrznych, konfigurację zaś upraszczając tym samym do niezbędnego minimum. Panel WebCTI. Panel WebCTI jest rozszerzeniem CTI, zapewniającym każdemu abonentowi dostęp do podstawowych ustawień (np. przekierowanie połączeń (FWD), dostęp do wewnętrznej książki adresowej i możliwość nawiązania połączenia jednym kliknięciem myszki, odsłuchiwanie nagrań z rozmów telefonicznych etc.) Oczywiście zakres funkcjonalności zależny jest od aktualnie nadanych praw na centralce. DRIT 11
UWAGA: Panel WebCTI jest uruchamiany bezpośrednio w systemie enova za pomocą wbudowanego silnika IE. W celu poprawienia kompozycji wizualnych oraz kompatybilności ze standardem HTML5/JavaScript, dodatek przy pierwszym uruchomieniu wymusza załadowanie najnowszej możliwej wersji Internet Explorer, ale w tym celu wymagane jest jednorazowe uruchomienie enova z załadowaną biblioteką cti2enova, na uprawnieniach administratora. DRIT 12