function 'REPLACE'

Назначение

Заменить заданные символы в строке новым символом.

Описание

Итерирует через строку, заменяя все <find-chars> на <replace-char>.
<replace-char> может быть пустым или содержать один символ.
Если пусто, все <find-chars> будут удалены из вывода.
ПРИМЕЧАНИЕ. Замена происходит только на выходе. Исходная переменная не изменяется.

Синтаксис

REPLACE(varname,find-chars[,replace-char])

[Arguments] Not available

См. также
пример

Есть некая таблица в БД.

| БД с исходными данными
+----+-------------------+--------------+-------+-------+---------+-------------+-------+------+------+------+------------+-----------+
| id | campname          | chan_context | retry | pause | timeout | ext_context | exten | var  | app  | DATA | concurrent | TIMESTAMP |
+----+-------------------+--------------+-------+-------+---------+-------------+-------+------+------+------+------------+-----------+
| 11 | test2666          | from-dialer  | 0     | 15    | 45      | from-agents | 556   | 6001 | NULL | NULL | 1          | NULL      |
| 16 | BAZA110           | from-dialer  | 2     | 15    | 45      | from-agents | 555   | NULL | NULL | NULL | 4          | NULL      |
+----+-------------------+--------------+-------+-------+---------+-------------+-------+------+------+------+------------+-----------+

Получим массив данных из БД при помощи func_odbc, чтобы использовать его дальше в диалплане.

| func_odbc.conf
[STARTCAMP]
dsn=dialer
readsql=SELECT campname, retry, pause, timeout, concurrent, exten, chan_context, ext_context FROM campaign WHERE var = '${ARG1}'

Собственно, само использование REPLACE - ${REPLACE(arr,\,, )}

| диалплан
[from-start]
exten => _60XX,1,set(arr=${ODBC_STARTCAMP(${EXTEN})})
   same => n,set(param=${REPLACE(arr,\,, )})
   same => n,system(/var/spool/asterisk/callstart.sh ${param})

Разделитель в исходной сроке - запятая, экранируем ее.

| выхлоп диалплана
    -- Executing [6001@from-internal:1] goto("SIP/166-00001ac4", "from-start,6001,1")
    -- Goto (from-start,6001,1)
    -- Executing [6001@from-start:1] Set("SIP/166-00001ac4", "arr=test2666,0,15,45,1,556,from-dialer,from-agents") in new stack
    -- Executing [6001@from-start:2] Set("SIP/166-00001ac4", "param=test2666 0 15 45 1 556 from-dialer from-agents") in new stack
    -- Executing [6001@from-start:3] System("SIP/166-00001ac4", "/var/spool/asterisk/callstart.sh test2666 0 15 45 1 556 from-dialer from-agents") in new stack

В полученной из БД строке с данными разделенными запятой, заменили запятые на пробелы и отправили как параметры bash скрипта, через побел:

  • arr=test2666,0,15,45,1,556,from-dialer,from-agents
  • param=test2666 0 15 45 1 556 from-dialer from-agents
  • /var/spool/asterisk/callstart.sh test2666 0 15 45 1 556 from-dialer from-agents

И наконец умозрительный пример bash скрипта, просто сохраним переданные данные в файл:

#!/bin/bash
 
campaign=$1
retry=$2
pause=$3
timeout=$4
concurrent=$5
limit="10000"
dest=$6
chcon=$7
extcon=$8
 
 if [ -n "$5" ]
  then
    concurrent=$5
  else
    concurrent="1"
 fi
 
cat <<EOF > /var/spool/asterisk/call_start_$campaign
campaign=$campaign
retry=$retry
pause=$pause
timeout=$timeout
concurrent=$concurrent
limit=$limit
dest=$dest
chcon=$chcon
extcon=$extcon
 
EOF

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

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