Переписывание CLI и CLD с помощью внешнего скрипта

S
Автор Sergiiy
Обновлено 1 год назад

Flysip B2BUA может использовать внешний скрипт для перезаписи CLI, CLD. Для этой цели B2BUA использует скрипт /var/env<I_ENVIRONMENT>/scripts/external_translator (для версий <=4.5 /home/ssp/scripts/external_translator.<I_ENVIRONMENT>), если он существует.

B2BUA отправляет на стандартный ввод скрипта CLI, CLD и i_account, например:

CLI=1234\n
CLD=4321\n
ORIG_CLI=81234\n
ORIG_CLD=94321\n
I_ACCOUNT=123\n
\n

Полный список предоставляемых полей см. ниже.

После получения пустой строки сценарий может использовать какой-либо алгоритм для перезаписи CLI и CLD, а затем он ДОЛЖЕН отправить их отдельными строками текста — CLI, CLD и пустой строкой. Например:

CLI=123\n
CLD=432\n
\n

Если сценарий не настроен на перезапись чего-либо, он должен вернуть CLI и CLD без изменений.

Можно применить несколько необязательных сценариев действий:

  • FAIL=<yes|no> — вы можете использовать это поле, чтобы сообщить, что вызов должен завершиться неудачно. Пример: FAIL=да
  • RESULT=<integer> - результат для ответа вызывающей стороне. Возможные значения: от 400 до 699, исключая 401 и 407, по умолчанию 500. Это поле используется, когда FAIL=yes. Пример: РЕЗУЛЬТАТ=403
  • COST=<float> - это значение будет добавлено к общей стоимости звонка. Пример: СТОИМОСТЬ=0,01


ПРЕДУПРЕЖДЕНИЕ! Для достижения максимальной производительности скрипт никогда не должен завершаться, а должен продолжать обрабатывать следующую порцию данных.
Дистрибутив SSP поставляется с образцом сценария /home/ssp/scripts/external_translator.sample, который вы можете настроить в соответствии со своими целями:

#!/bin/sh
while true; do
  read LINE || exit
  case "$LINE" in
  CLI=*) CLI=${LINE#CLI=}
  ;;
  CLD=*) CLD=${LINE#CLD=}
  ;;
  ORIG_CLI=*) ORIG_CLI=${LINE#ORIG_CLI=}
  ;;
  ORIG_CLD=*) ORIG_CLD=${LINE#ORIG_CLD=}
  ;;
  "")
  echo "CLI=$CLI"
  echo "CLD=$CLD"
  echo
  CLI=""
  CLD=""
  ;;
  esac
done

Переводчик применяется после аутентификации звонка. Правила перевода применяются в следующем порядке:

  • Вызов дела был аутентифицирован для учетной записи:

1. Правила трансляции CLI/CLD из правила аутентификации (если есть)

2. Правила трансляции CLI/CLD от Пользователя (если есть)

3. Запускается external_translator и обрабатывает поля, предоставленные ему Flysip (см. список ниже)

4. На основе вывода external_translator Flysip выполняет авторизацию звонков (тарификация, маршрутизация, выбор тарифа, маршрута и т.д.)

5. Перед отправкой звонка за пределы применяются правила трансляции из Connection/Trunk.

  • Вызов дела был аутентифицирован для DID

1. Правила трансляции CLI/CLD из DID Authentication Rule и DID (если есть)

2. Правила трансляции CLI/CLD от Пользователя, назначенного DID, игнорируются. 

3. Запускается external_translator и обрабатывает поля, предоставленные ему Flysip (см. список ниже)

4. На основе вывода external_translator Flysip выполняет авторизацию звонков (тарификация, маршрутизация, выбор тарифа, маршрута и т.д.)

5. Перед отправкой звонка за пределы применяются правила трансляции из Connection/Trunk.

Поля, предоставляемые Flysip скрипту external_translator:

I_ACCOUNT
ORIG_CLI
ORIG_CLD
CLI
CLD
CALLER_NAME
P_ASSERTED_ID
REMOTE_PARTY_ID
REMOTE_IP
DIVERSION
Оцените эту статью