Asterisk function 'CUT'

CUT(varname,char-delim,range-spec)
Функция Asterisk: разрезать строку по заданными разделителям.

Описание

  • varname - переменная, которую надо обрезать
  • char-delim - по умолчанию '-'
  • range-spec - Обрабатывает строку в переменной в соответствии с указанным разделителем (по умолчанию: '-') и возвращает запрошенные поля. Поле также может быть диапазоном полей (например, '2-4') или несколькими полями и диапазонами, разделенными «&», например. '2-4&6'; диапазоны, такие как 3- (все начиная от поля 3 включено) или '-3' (все до поля '3').
    • «CUT(somevar,,3-)» получим 3-е поле и все после него,
    • «CUT(somevar,,-2)» получим 2-ое поле и все до него.

Разделитель должен быть одним символом. Если указаны несколько символов, используется только первый символ.
Чтобы указать запятую или точку с запятой в качестве разделителя, экранируйте ее с помощью обратного слэша: CUT(foo,\,,1)
Если указано несколько полей, то они объединяются вместе, через заданный разделитель:

exten => s,1,Set(foo=1-2-3-4-5)
exten => s,2,Set(foo=${CUT(foo,,1-3&5)}) 
;вернет 1-2-3-5
;char-delim - по умолчанию '-', поэтому разделитель в данном примере не указан

CUT часто используется для обрезки уникальной секции названия канала.
Например, имя канала может быть SIP/somehost-f387, и вы можете обрезать его получив - SIP/somehost.

Синтаксис

CUT(varname,[delimiter],range-spec)

Пример

Предположим, имеется таблица БД - devices, с данными SIP устройств.

+------+-------+------------+------------+------+-------------+---------------+
| id   | tech  | dial       | devicetype | user | description | emergency_cid |
+------+-------+------------+------------+------+-------------+---------------+
| 4889 | pjsip | PJSIP/4889 | fixed      | 4889 | sip 4889    |               |
| 4887 | sip   | SIP/4887   | fixed      | 4887 | sip 4887    |               |
| 4886 | sip   | SIP/4886   | fixed      | 4886 | sip 4886    |               |
+------+-------+------------+------------+------+-------------+---------------+
 exten => _4XXX,1,verbose(${REALTIME(devices,user,${EXTEN},:,:)})

Функция REALTIME() возвращает на строку содержащую user:4889 c двоеточием в качестве разделителя:

 Verbose("id:4889:tech:pjsip:dial:PJSIP/4889:devicetype:fixed:user:4889:description:sip 4889:")

Требуется получить технологию из поля под порядковым номером 6, в данном случае PJSIP/4889.
используем для этого функцию CUT():

 exten => _4XXX,1,verbose(${CUT(REALTIME(devices,user,${EXTEN},:,:),:,6)})

и получим требуемое значение:

 Verbose("PJSIP/4889") 

Поля 4,5 и 6:

 exten => _4XXX,1,verbose(${CUT(REALTIME(devices,user,${EXTEN},:,:),:,4-6)}) 
 Verbose("pjsip:dial:PJSIP/4889")

Поля 6 и 8:

 exten => _4XXX,1,verbose(${CUT(REALTIME(devices,user,${EXTEN},:,:),:,6&8)}) 
 Verbose("PJSIP/4889:fixed")

Asterisk: функции диалплана

См. также

  • asterisk/func/cut.txt
  • Последние изменения: 2019/01/05