Bitrix форматирование номера телефона

В битриксе всегда было полно вспомогательного функционала, который часто располагался в нерелевантных местах. Например вещи, необходимые для работы с ценой, почему-то находились в модуле инфоблоков, или хранилище для адресов в модуле магазина.

На этот раз вроде все на месте. В 17.5 в битриксе появился своего рода «парсер» для номеров телефонов. А заодно вместе с ним и форматтер. Если в двух словах, то битрикс теперь может попытаться преобразовать строковое представление номера телефона в объект, а также преобразовать его обратно в строку в заранее определенном формате. Эдакая нормализация.

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

Интерфейс работы довольно прост и, в общем-то, понятен:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

<?php

use BitrixMainPhoneNumberFormat;

use BitrixMainPhoneNumberParser;

$phone = ‘89011111111’;

// Парсим номер телефона с помощью класса-парсера

$parsedPhone = Parser::getInstance()->parse($phone);

// Из объекта распарсенного телефона можно получить разное. Например код страны

echo $parsedPhone->getCountry(); // RU

// или … опять код страны

echo $parsedPhone->getCountryCode(); // 7

// или тип номера, возможные типы:

// ‘noInternationalDialling’, ‘areaCodeOptional’, ‘fixedLine’,

// ‘mobile’, ‘pager’, ‘tollFree’, ‘premiumRate’, ‘sharedCost’,

// ‘personalNumber’, ‘voip’, ‘uan’, ‘voicemail’

echo $parsedPhone->getNumberType(); // mobile

// Ну или оригинальный телефон, который был скормлен парсеру

echo $parsedPhone->getRawNumber(); // 89011111111

// А можно переформатировать объект телефона в один из поддерживаемых форматов

// Национальный, видимо «наш»

echo $parsedPhone->format(Format::NATIONAL);

// Международный

echo $parsedPhone->format(Format::INTERNATIONAL);

// Ну и более-менее стандартизированный по https://ru.wikipedia.org/wiki/E.164

echo $parsedPhone->format(Format::E164);

// А еще есть парсинг коротких номеров

echo Parser::getInstance()->parse(‘911’)->format(); //9-11

Функционал используется как нормализатор для номеров телефонов в модуле рассылок.

Непонятно, как ошибки обрабатывать, да и как вообще понять, получилось у библиотеки распознать, а если нет — то почему… но это уже детали.

В общем, ничего особенного, если бы не одно но. Я уже где-то это видел )

В продукт добавляется все больше и больше полу-функций. Все эти полу-функции копируются с какого-нибудь готового решения и потом забрасываются навсегда. Вспомнить хотя бы печально известную либу BX для фронтенда, которая копирует jquery чуть менее, чем полностью и которой никто, кроме разработчиков битрикса, не пользуется. Или распиаренные Битрикс24 сайты, которые скопировали с Тильды? Список можно продолжать.

Вот и в этот раз я почуял, что я уже где-то что-то подобное видел. И вспомнил где — в https://github.com/giggsey/libphonenumber-for-php. Довольно популярная либа для парсинга и форматирования номеров. Предоставляет куда более широкие возможности, задокументирована, покрыта тестами, легко встраивается в проект с помощью composer, интернационализация и многое другое.
Интерфейс работы с либой — практически идентичен (скопировано из официального мануала):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<?php

$swissNumberStr = «044 668 18 00»;

$phoneUtil = libphonenumberPhoneNumberUtil::getInstance();

try {

    $swissNumberProto = $phoneUtil->parse($swissNumberStr, «CH»);

    var_dump($swissNumberProto);

} catch (libphonenumberNumberParseException $e) {

    var_dump($e);

}

// Produces «+41446681800»

echo $phoneUtil->format($swissNumberProto, libphonenumberPhoneNumberFormat::E164);

// Produces «044 668 18 00»

echo $phoneUtil->format($swissNumberProto, libphonenumberPhoneNumberFormat::NATIONAL);

// Produces «+41 44 668 18 00»

echo $phoneUtil->format($swissNumberProto, libphonenumberPhoneNumberFormat::INTERNATIONAL);

Спрашивается, зачем копировать? Вопрос риторический… Если вам немного не подходит библиотека — ну помогите вы проекту, запилите в нем недостающую фичу и встройте к себе, ведь будет дешевле, чем пилить с нуля и поддерживать полу-продукт. А встроить с composer — вообще не проблема, ведь битрикс поддерживает composer теперь официально. Эх …

Артур Голубев

Готовые решения для 1С-Битрикс

Часто задаваемые вопросы:

Форматирование номера телефона попадающего в админку

Достаточно частые вопросы от пользователей связанные с форматированием:

1. В каком формате номер телефона попадает в админку?

Ответ: номер телефона отправляется так как его видит пользователь при вводе, с элементами маски. Если пользователь по маске ввел +7 (999) 999-99-99 то и в админку он сохранится в точно таком же формате +7 (999) 999-99-99 (при условии отсутствия доп. обработок разумеется)

2. Как поменять форматирование номера телефона сохраняющегося в админку?

Ответ: решение устанавливает маску на уровне поля ввода (ограничивая именно ввод, а не обработку), на обработку данных после отправки формы оно никак не влияет. Если мы с помощью решения установим маску +7 (999) 999-99-99, пользователь заполнит данные и на сервер они уйдут точно в таком же форматировании, например: +7 (123) 456-78-99

На уровне решения или маски на это не повлиять. Дальнейшее переформатирование сохраняемого номера (если это требуется конечно) можно делать на уровне обработки запроса на сохранение. 

3. Как менять форматирование номеров при сохранении?

Влиять на форматирование номеров телефонов на сохранении можно без доработки решения, используя стандартные события битрикса не связанные с решением. Единого решения или функции тут быть не может, т.к. обработку нужно добавлять в зависимости от того в какую сущность сохраняется номер телефона.

— Форматирование номера телефона попадающего в заказ

У битрикса есть стандартное форматирование номеров телефонов в заказах — что бы оно применялось нужно в свойстве заказа указать что оно является номером телефона. Сделать это можно в Админка -> Магазин -> Настройки -> Свойства заказа -> Список свойств. Открываем нужное свойство и устанавливаем у него галочку «Является телефоном». После установки данной опции у новых заказов данные в поле номера телефона будут очищаться от символов и букв, оставляя только цифры. Тоесть телефон будет сохраняться в админку в формате 71234567899

Если вам нужно более сложное нестандартное форматирование то делать его можно с помощью обработчика OnSaleOrderBeforeSaved

— Форматирование телефона при регистрации пользователф

Если вам нужно форматировать номер телефона при регистрации пользователя, то это можно сделать с помощью события OnBeforeUserAdd

и т.д. в зависимости от сущности в которую происходит сохранение нужно искать обработчик и дописывать в него код форматирования

Один из распространенных кейсов — когда люди по-разному вводят номера телефона. Кто-то вводит номер через +7, кто-то через 8, а кто-то вообще может не проставить код страны. Но когда такие номера попадают в вашу CRM, система не может распознать такой телефонный номер и идентифицировать его. Если не ввести номер корректно, как того требует система, позвонить на такой номер сразу не получится.

В этой статье, мы и расскажем, как избежать такой ситуации.

Алексей Окара

По умолчанию в Битрикс24 есть несколько десятков готовых действий (Activity) для создания собственных бизнес-процессов. Но этого недостаточно, и часто у компаний возникает потребность в создании собственного активити (действия).

Мы собрали самые распространенные действия пользователя для бизнес-процессов Битрикс24 в одной платформе Пинкит.

Если клиент или менеджер ввел номер телефона без кода страны, не беда, система автоматически добавит нужный код в номер телефона. Больше не нужно тратить время и менять номера вручную! 

Установите приложение Пинкит, чтобы расширить возможности вашего портала на Битрикс24:

в домене RU в домене BY в домене KZ в домене UA

Напишите, какие процессы вам нужно автоматизировать, и мы проведем для вас бесплатную онлайн-встречу, на которой презентуем возможности Пинкит для вашей компании.

Алексей Окара,

учредитель Пинол

Как работает активити в Битрикс24?

Менеджер, заполняя поле номер телефона клиента, ввел его некорректно в виде 922 000 00 00 и сохранил контакт.

Данный ввод в системе Битрикс24 является не корректным. Позвонить по такому номеру сразу не выйдет. Изначально такой номер нужно исправить вручную, и только потом можно приступить к звонку. Такие ситуации не единичны.

Для подобных случаев предусмотрено активити «Автоматическое форматирование номера», с помощью которого больше не нужно менять номер телефона вручную. Все будет происходить автоматически.

Рассмотри на примере бизнес-процесса.

По условию бизнес-процесса, проверяется, указан ли номер телефона клиента. Для редактирования номера, добавляем активити «Автоматическое форматирование номера».

Схема бизнес-процесса

В активити нужно указать код страны, который будет подставляться к номеру телефона.

Настройка активити

Итак, если контакт есть, а номер телефона указан некорректно, то с помощью активити «Автоматическое форматирование номера», в карте Контакта не корректно введенный номер автоматически отформатируется к единому формату системы. 

Итог:

С помощью платформы Пинкит больше не нужно тратить время, на редактирование номера вручную. Кроме этого, данное решение сводит к минимуму проблемы, связанные с человеческим фактором. Даже если сотрудник введет номер телефона без кода страны, система сама добавит его. 

Установите приложение Пинкит, в состав которого входит множество интеграций для автоматизации:

в домене RU в домене BY в домене KZ в домене UA

Остались вопросы или нужна помощь?

Мы бесплатно проведем аудит Вашей CRM и покажем, какую автоматизацию можно реализовать с помощью Битрикс24 и Пинкит. Получите помощь с настройкой сервиса и готовые кейсы под ваш бизнес.

Один из распространенных кейсов — когда люди по разному вводят номера телефона. Кто-то вводит номер через +7, кто-то через 8, а кто-то вообще может не проставить код страны. Но когда такие номера попадают в вашу CRM, система не может распознать такой телефонный номер и идентифицировать его. Из это вытекает, что если не ввести номер корректно, как того требует система, позвонить на такой номер сразу не получится или робот/активити с отправкой SMS не уйдет. Для решения этой боли мы сделали это приложение.

Тарифы на Пинкит выложены здесь, прошу обратить внимание на кейсы Пинол, где мы демонстрируем реальные проекты использования нашей платформы Пинкит для различных тематик ведения бизнеса.

  • Поддержка решения Пинол осуществляется через создание темы на нашем форуме

    Если Вы не имеете регистрации на сайте Пинол — потребуется регистрация:

Для установки приложения Пинол достаточно зайти в раздел приложения на своем портале, найти в поиске «пинол» и установить наше приложение на свой портал( облако или коробку).

Ушло очень много времени на то, чтобы настроить автоматическое приведение номера телефона в формат, доступный к звонку, делюсь полученным решением.

Данный метод заключается в том, чтобы отображать нужный формат номера телефона в зависимости от заданной маски.

Зададим массив с масками (пока только маска для украинских номеров телефона. Позже проверю ее и для российских форматов):

$formats = array(
	'12'=>'+############', // for +38 0XX XX XXX XX or 38 0XX XX XXX XX
	'10'=>'+38#########' // for 0XX XX XXX XX
);

Ключ массива — это количество символов в строке, которая попадает на обработку по маске.

Дальше опишем функцию:

PhoneFormat($phone, $format, $mask = '#',$codeSplitter = '0')
{
	$phone = preg_replace('/[^0-9]/', '', $phone);

	$phone = substr($phone,strpos($phone,$codeSplitter));

	if (is_array($format))
	{
		if (array_key_exists(strlen($phone), $format))
		{
			$format = $format[strlen($phone)];
		} else
		{
			return $phone;
		}
	}

	$pattern = '/' . str_repeat('([0-9])?', substr_count($format, $mask)) . '(.*)/';

	$format = preg_replace_callback(
		str_replace('#', $mask, '/([#])/'),
		function () use (&$counter)
		{
			return '${' . (++$counter) . '}';
		},
		$format
	);

	return ($phone) ? trim(preg_replace($pattern, $format, $phone, 1)) : false;
}

Данная функция сначала очищает полученную строку с номером телефона от всех лишних символов (пробелы, дефисы, скобочки). Дальше мы отделяем код страны от кода оператора и самого номера (для Украины корректный формат будет +380XXXXXXXXX), но иногда пользователи забывают вбить один из символов: «+»,»3″,»8″ — в любом сочетании, поэтому код страны отсекаем, а его добавляем дальше уже маской.

Дальше функция строит номер телефона в зависимости от прописанной маски.

Использование:

echo PhoneFormat('0987654321',$formats, '#');
echo PhoneFormat('+30987654321',$formats, '#');
echo PhoneFormat('+380987654321',$formats, '#');
echo PhoneFormat('30987654321',$formats, '#');
echo PhoneFormat('80987654321',$formats, '#');
echo PhoneFormat('+80987654321',$formats, '#');
// Все варианты вернут значение +38098765432

Теперь эту функцию можно использовать для вывода ссылки на совершение звонка:

<?$phone = '+3(098)765-43-21';?>
<a href="tel:<?=PhoneFormat($phone)?>">$phone</a>

Мы получаем много вопросов по телефонии в целом и нашей интеграции Asterisk с Битрикс24 в частности. Один из самых распространенных: “Как добавить или убрать префикс к телефонному номеру, чтобы привести все номера к единому формату?”

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

Входящие

Разные операторы передают телефонные номера с разными префиксами: +7/7/8 или вообще без него (4995555555). Соответственно, по умолчанию номер клиента регистрируется в формате, заданном оператором, например, без префикса 7. При этом опция перезвонить клиенту может оказаться недоступной, так как оператор воспринимает исходящие звонки только через 7.

К тому же у одной компании может быть несколько номеров и обслуживающих их операторов. Если звонок поступает от одного клиента, но с помощью разных операторов и его номер регистрируется в разном формате, то один и тот же клиент будет зарегистрирован в системе как два (или больше) разных лида. Чтобы все интеракции с клиентом записывались в одной сущности звонка, все телефонные номера необходимо привести к единому формату.

Для этого необходимо вручную установить добавление префикса 7 ко всем входящим номерам. Это можно сделать с помощью других сторонних модулей, например, Set CallerID.

Исходящие

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

Number modification screen 1.png

FreePBX → Connectivity → Outbound Routes → Actions → Edit → Dial patterns → Prefix

Также необходимо обращать внимание на то, что когда звонок идет через стороннее оборудование, часто необходимо не просто унифицировать, но дописывать определенные префиксы.

Скажем, вы находитесь в Москве, а хотите позвонить на петербургский номер через местную АТС. Для этого вам нужно набрать на своем телефоне условную девятку, а при передаче данных в Битрикс, ее убрать. В нашем модуле это можно сделать в специальном поле в разделе Advanced Settings на вкладке “Настройка исходящей маршрутизации”.

FreePBX → Admin → InformUnity Bitrix24 → Outbound Routes → Actions → Edit →  Advanced settings → Number Modification for Bitrix24

Понравилась статья? Поделить с друзьями:
  • Binance номер телефона россия
  • Binance горячая линия номер телефона
  • Biletix номер телефона горячая линия
  • Biletdv номер телефона
  • Big hit entertainment номер телефона