Приведение телефонов в CRM к единому формату

Для правильного определения номеров приложению требуется, чтобы все заведенные номера телефонов соответствовали единому формату: содержали только цифры. Без пробелов, запятых, скобок и других знаков.


Для приведения базы телефонов к единому формату существует готовое решение:

https://www.bitrix24.ru/apps/?app=shum.tel


Важно! Мы не несем ответственности за работу решений сторонних разработчиков.


Для того, чтобы расширение преобразовывало номера в произвольный формат, необходимо кастомизировать наше решение. Для этого нужно в файле bx24asterisk_parser.php, заменить, или добавить методы getActiveCallsFromStatus, convertHistoryEntryToCall, getMissedCalls:


public function getActiveCallsFromStatus(array $status)
{
    $calls = parent::getActiveCallsFromStatus($status);
    foreach($calls as &$call){
        foreach(array('to', 'from') as $t){
            $this->_phone_replace($call[$t]);
        }
    }
    return $calls;
}
public function convertHistoryEntryToCall(array $entry)
{
    $call = parent::convertHistoryEntryToCall($entry);
    foreach(array('to', 'from') as $t){
        $this->_phone_replace($call[$t]);
    }
    return $call;
}
public function getMissedCalls()
{
    $missedCalls = parent::getMissedCalls();
    foreach($missedCalls as &$call){
        $this->_phone_replace($call['from']);
    }
    return $missedCalls;
}

В методе _phone_replace указываем формат, в который нужно преобразовывать номера телефонов. В данном примере установлен формат номера +7 (999) 999-9999

protected function _phone_replace(&$phone){
    $p = preg_replace('~[^\d]~', '', $phone);
    if(preg_match('~(?P<code>\d{3})(?P<one>\d{3})(?P<two>\d{2})(?P<three>\d{2})$~', $p, $m)){
        $code = $m['code'];
        $one = $m['one'];
        $two = $m['two'];
        $three = $m['three'];
        $phone = "+7 ($code) $one-$two$three";
    }
}

Эта статья была полезна для 5 людей. Эта статья помогла вам?

Сервис поддержки клиентов работает на платформе UserEcho