Telefonia Bitrix24: jak nie przegapić żadnego telefonu

29 June 2018

NASTĘPNY ARTYKUŁ
Vladimer Sidletzki

Back End Developer

Vladimer Sidletzki
Telefonia Bitrix24: jak nie przegapić żadnego telefonu

W większości firm, sklepów internetowych lub organizacji handlowych sprzedaże z reguły są związane bezpośrednio z rozmowami przez telefon. Menedżerowie dostają opracowane skrypty dla rozmów z klientami, uczęszczają na treningi, jednak nawet te zabezpieczenia nie eliminują ewentualnego błędu ludzkiego.

W celu zminimalizowania nowych lub już obecnych klientów sporo firm decyduje się na wdrożenie VoIP. Za pomocą tej odmiany telefonii można kontrolować każdy krok w komunikacji z klientem i dzięki temu badać jakość świadczenia usług (e.g. przesłuchiwać nagrania rozmów menedżerów z klientami). Taki system sprawia, że pracownicy podchodzą do swoich zadań z większą odpowiedzialnością, przecież wiedzą, że ich rozmowy są pod nadzorem i nie da się uniknąć żywej komunikacji.

Aby uniknąć sytuacji w której Ciebie opuszczą klienci, skorzystaj z Bitrix API. W tym celu należy stworzyć sprawnie działający mechanizm, który pozwoli pamiętać o każdym kliencie i kontaktować się z nim o właściwej porze. Zapraszamy do wglądu w to, jak możesz to osiągnąć za pomocą Bitrix24 oraz VoIP.

Przede wszystkim pamiętaj, że to jest wirtualna stacja telefoniczna przez którą możesz zarządzać „kolejką” połączeń wchodzących skierowanych do Twoich kadrów. Nagrywaj rozmowy i rób wybiórczy przekrój kontroli jakości świadczenia usług słuchając nagrań razem z kierownikami działów Twej firmy. Fajne dodatki do tego to są możliwości ustawienia własnych powitań, melodii tła lub oczekiwania, przekierowywania połączeń, nagrywanie rozmów etc.

Dla opracowania połączenia wykorzystaj zdarzenie onCallEnd (to zdarzenie uruchamia się po zakończeniu rozmowy, e.g. historia zostaje nadpisana przez ostanie połączenie) – https://dev.1c-bitrix.ru/api_help/telephony/events/oncallend.php. Stwórz procesor zdarzenia w ten sposób:

AddEventHandler("voximplant", "onCallEnd", "AddTaskSkipCall");

     function AddTaskSkipCall($arFields){} // do masywu $arFields trafia masyw z danymi

Sprawdź znaczenie parametru CALL_FAILED_CODE – jeżeli ono równa się 304 (połączenie nieodebrane), możesz kontynuować:

if($arFields['CALL_FAILED_CODE'] == '304'){};

Aby dowiedzieć się, czy osoba która dzwoniła do Ciebie jest z Twojej bazy danych, sprawdź jej nr wg filtru:

if(CModule::IncludeModule('crm')){

     $arFilterPhone = array("TYPE_ID" => "PHONE", "VALUE_TYPE" => "WORK", "VALUE" => $arFields['PHONE_NUMBER']);

         $obFields = CCrmFieldMulti::GetList(array(), $arFilterPhone);

         while($arField = $obFields->Fetch()){

              if ($arField['ENTITY_ID'] == 'CONTACT') {

                             $contact_id = $arField['ELEMENT_ID'];

                  }

         }

         if($contact_id){

              $obCRMContacts = CCrmContact::GetList($arOrder = array('DATE_CREATE' => 'DESC'), $arFilter = array("ID"=>$contact_id), $arSelect = array('NAME', 'LAST_NAME', 'ASSIGNED_BY_ID'), false);

                  $arContact = $obCRMContacts->Fetch();

                      $contact = $arContact['NAME'].' '.$arContact['LAST_NAME']; // tutaj dostaniesz imię (i nazwisko) dzwoniącego

                                                         $responsible_id = $arContact['ASSIGNED_BY_ID']; // zobaczysz osobę odpowiedzialną za pracę z nim

         }

}

Aby nie przeciągać sprawy, ustaw termin równy jednej dobie. Z masywu $arFields dostaniesz obiekt z terminem (datą), kiedy należy oddzwonić. Na podstawie zgromadzonych danych określ końcowy termin zadania:

$refValue = new \ReflectionClass($arFields['CALL_START_DATE']);

     $propValue = $refValue->getProperty('value');

     $propValue->setAccessible(true);

     $value = $propValue->getValue($arFields['CALL_START_DATE']);

     $sDate = $value->date;

     $arDate = explode('.', $sDate);

     $date = new DateTime($arDate[0]);

     $date->add(new DateInterval('P1D'));

     $deadline = $date->format('m/d/Y h:i:s a'); // termin

Dodaj nowe zadania:

$taskTitle = "Skipped call fr om ".$arFields['PHONE_NUMBER']; // tytuł zadania

Na podstawie tego, że kontakt w ogóle istnieje, wymyśl opis zadania oraz wybierz osobę odpowiedzialną za realizację (jeżeli dotychczas taka osoba nie została wybrana):

if ($contact) {

             $description = "Call back to ".$contact.". The call was skipped at ".$arDate[0];

     }else{

             $description = "Call back to ".$arFields['PHONE_NUMBER'].". The call was skipped at ".$arDate[0];

             $responsible_id = TASK_CREATED_BY; // osoba odpowiedzialna (domyślnie został wybrany administrator)

       }

Za pomocą metody CTaskItem::Add (https://dev.1c-bitrix.ru/api_help/tasks/classes/ctaskitem/add.php) stwórz zadanie:

$task = new \Bitrix\Tasks\Item\Task(0, TASK_CREATED_BY);

     // masyw danych dla zadania

     $task['TITLE'] = $taskTitle; // tytuł (nazwa) zadania

     $task['DESCRIPTION'] = $description; // opis zadania

     $task['RESPONSIBLE_ID'] = $responsible_id; // osoba odpowiedzialna

     $task['CREATED_BY'] = TASK_CREATED_BY; // identyfikator zleceniodawcy zadania (administrator)

     $task['DEADLINE'] = $deadline; // termin końcowy

     // tworzenie zadania

     $result = $task->save();  

Prócz tego możesz dodać innych wykonawców lub podwykonawców (ACCOMPLICES). Jeżeli masz ustawiony system menu głosowego IVR, możesz też przywiązać grupy użytkowników do konkretnych przycisków odpowiedzi, pod warunkiem że to pasuje do logiki Twojej firmy – cała grupa jest odpowiedzialna za konkretne działanie. Właśnie tych grup możesz dalej używać jako podwykonawców, gdyż to ułatwi Ci precyzyjne delegowanie zadań. Teraz, z bazy danych należy pobrać log połączenia wg jego ID ($arFields['CALL_ID']):

global $DB;

     $ob = $DB->Query("SEL ECT F.CALL_LOG FR OM b_voximplant_statistic F WH ERE F.CALL_ID = '".$arFields['CALL_ID']."'");

     $res = $ob->Fetch();

     $urlCallLog = $res['CALL_LOG']; // adres logu

Z samego pliku logu pobierz kod przycisku aby określić użytkowników wg wcześniej wybranych identyfikatorów grup, do których oni należą:

$find_str = 'Received tone ';

     $str = file_get_contents($urlCallLog);

     $pos = strpos($str, $find_str);

     $ivrButton = substr($str, $pos+strlen($find), 1);

     if ($ivrButton == 2) {

             $userGroup = CGroup::GetGroupUser(SUPPORT_GROUP_ID);

     }elseif ($ivrButton == 1) {

             $userGroup = CGroup::GetGroupUser(SALES_GROUP_ID);

     }elseif ($ivrButton == 3) {

             $userGroup = CGroup::GetGroupUser(BILLING_GROUP_ID);

    }

Dodaj to do masywu przed tworzeniem zadania:

$task['ACCOMPLICES'] = $userGroup; // wykonawcy

Na sam koniec dodam, że ten kod zawsze możesz uzupełnić przez dodanie procesora dla tworzenia zadań. Nawet jeżeli połączenie było skuteczne, zawsze będziesz miał przed oczami wszystkie połączenia telefoniczne oraz będziesz mógł uzupełniać zadania dodając do nich wyniki połączeń, tym samym uzyskasz bardziej szczegółowy obraz całokształtu tych aktywności.

Gotowe! Teraz nie przegapisz żadnego połączenia, a Twoi klienci znajdą się pod zaufaną i nieprzerwaną opieką :)




Podobne artykuły
Umów się na konsultację

Skontaktujemy się z Tobą w ciągu 10 minut