Переписування CLI і CLD зовнішнім скриптом
Цей переклад зроблено автоматично і ще не вичитано. Читати англійську версію
Правила трансляції охоплюють префікси, довжину й формати. Коли для рішення потрібні дані ззовні дзвінка, таблиця відповідностей, час доби чи база даних, комутатор може передати номери вашому власному скрипту. У цьому посібнику ви встановите невеликий вхідний скрипт, який прибирає + на початку CLI і відхиляє дзвінки на номери 1900 з кодом 403. Закладіть близько 20 хвилин.
Перш ніж почати
Розділ «Перш ніж почати»- У вас є root-доступ до shell комутатора, і ви знаєте номер середовища: стовпець Env # (номер середовища) у System Management → Environments. У прикладах використовується середовище
1. - Rules & Lists (правила й списки) у середовищі не використовується. Цей модуль встановлює власний скрипт за тим самим шляхом; див. попередження в кроці 3.
- Ви знаєте, де скрипт виконується в проходженні дзвінка. Це крок 5 у розділі Трансляція номерів: після правил трансляції правила автентифікації, правила після автентифікації та акаунта, перед тарифікацією й маршрутизацією.
Крок 1: Ознайомтеся з протоколом
Розділ «Крок 1: Ознайомтеся з протоколом»Комутатор запускає скрипт один раз і тримає його запущеним. Для кожного дзвінка він записує в стандартний вхід скрипту рядки NAME=value, а після них порожній рядок:
I_ACCOUNT=123ORIG_CLI=+442079460123ORIG_CLD=0012125550123CLI=+442079460123CLD=12125550123CALLER_NAME=ReceptionP_ASSERTED_ID=REMOTE_PARTY_ID=REMOTE_IP=203.0.113.10DIVERSION=DIVERSION_PARAMS=| Поле | Значення |
|---|---|
I_ACCOUNT |
ID акаунта, на який автентифіковано дзвінок |
ORIG_CLI, ORIG_CLD |
Номери в тому вигляді, в якому їх отримано, до будь-якого правила трансляції |
CLI, CLD |
Номери після правил трансляції |
CALLER_NAME |
Ім’я для відображення із заголовка From |
P_ASSERTED_ID, REMOTE_PARTY_ID |
Заголовки ідентифікації того, хто дзвонить, якщо вони є |
REMOTE_IP |
IP-адреса, з якої надійшов дзвінок |
DIVERSION, DIVERSION_PARAMS |
Номер і параметри заголовка Diversion, якщо він є |
Скрипт відповідає власними рядками й порожнім рядком. CLI і CLD обов’язкові: повертайте їх без змін, коли скрипту нічого робити. Відсутній CLD означає порожній номер, і комутатор відхиляє дзвінок.
| Поле | Дія |
|---|---|
CLI, CLD |
Номери, за якими комутатор тарифікує й маршрутизує дзвінок |
CALLER_NAME |
Нове ім’я для відображення |
FAIL=yes |
Відхилити дзвінок |
RESULT |
SIP-код для відхиленого дзвінка, від 400 до 699, крім 401 і 407. Будь-яке інше значення дає 500 |
COST |
Сума, що додається до вартості дзвінка; стягується й тоді, коли скрипт відхиляє дзвінок |
ADD_HEADER |
SIP-заголовок, що додається до вихідного INVITE, наприклад ADD_HEADER=X-Customer: 42. Для кількох заголовків повторіть рядок |
RURI_PARAMS, TO_URI_PARAMS, FROM_URI_PARAMS |
Параметри, що додаються до request URI та до URI заголовків To і From, наприклад user=phone |
P_ASSERTED_ID_PARAMS, P_ASSERTED_ID_URI_PARAMS, REMOTE_PARTY_ID_PARAMS, REMOTE_PARTY_ID_URI_PARAMS, DIVERSION_PARAMS, DIVERSION_URI_PARAMS |
Параметри заголовків ідентифікації й переадресації |
Результат: ви знаєте, що отримує скрипт і що він має повернути.
Крок 2: Напишіть скрипт
Розділ «Крок 2: Напишіть скрипт»Підійде будь-яка мова, якщо програма читає стандартний вхід рядок за рядком, ніколи не завершується й скидає буфер виводу після кожної відповіді. Разом із комутатором постачається мінімальний приклад на shell: /home/ssp/scripts/external_translator.sample. Ця версія додає два правила з посібника:
#!/bin/sh# Inbound external translator:# - removes a leading + from the CLI;# - rejects calls to numbers that start with 1900 with 403.while true; do read -r LINE || exit 0 case "$LINE" in CLI=*) CLI=${LINE#CLI=} ;; CLD=*) CLD=${LINE#CLD=} ;; "") CLI=${CLI#+} case "$CLD" in 1900*) echo "FAIL=yes" echo "RESULT=403" ;; esac echo "CLI=$CLI" echo "CLD=$CLD" echo CLI="" CLD="" ;; esacdone-
Збережіть скрипт на комутаторі, наприклад як
/root/external_translator. -
Перевірте його з shell, перш ніж ним почне користуватися комутатор:
Вікно термінала printf 'CLI=+442079460123\nCLD=19005550123\n\n' | sh /root/external_translatorВиведення:
FAIL=yes,RESULT=403,CLI=442079460123,CLD=19005550123і порожній рядок.
Результат: скрипт правильно відповідає в shell.
Крок 3: Встановіть скрипт
Розділ «Крок 3: Встановіть скрипт»Комутатор шукає файл /var/env<N>/scripts/external_translator, де <N> — номер середовища.
-
Скопіюйте скрипт на місце:
Вікно термінала cp /root/external_translator /var/env1/scripts/external_translator -
Зробіть його виконуваним для всіх; комутатор ігнорує файл без усіх трьох бітів виконання:
Вікно термінала chmod 755 /var/env1/scripts/external_translator -
Зачекайте одну хвилину. Комутатор перевіряє файл щохвилини, запускає скрипт, коли файл з’являється, і перезапускає його, коли файл змінюється. Кожен процес обробки дзвінків запускає до п’яти його копій.
Результат: нові дзвінки середовища проходять через скрипт.
Крок 4: Перевірте роботу
Розділ «Крок 4: Перевірте роботу»- Зробіть тестовий дзвінок з акаунта на номер
1900. Той, хто дзвонить, отримує403. - Відкрийте Tools & Debugs (інструменти та налагодження) → SIP Logs Viewer (переглядач SIP-логів), знайдіть дзвінок і перевірте, що комутатор відповів
403 Invalid Destination Number. - Зробіть дзвінок із CLI, що починається з
+, потім відкрийте Reports → Call Records (CDRs) (записи про дзвінки) і деталі дзвінка. Тарифікований CLI не має+, а External Translator (зовнішній транслятор) у розділі Call Authentication (автентифікація дзвінка) показує, що дзвінок обробив скрипт.
Щоб вимкнути скрипт, видаліть його або зніміть біт виконання (chmod 644). Комутатор зупиняє його протягом хвилини.
Переписування номерів для кожного вендора
Розділ «Переписування номерів для кожного вендора»Другий скрипт, /var/env<N>/scripts/external_translator_outbound, виконується для кожного підключення, яке пробує комутатор, після правил трансляції підключення. Він отримує I_ACCOUNT, I_VENDOR, I_CONNECTION, ORIG_CLI, ORIG_CLD, CLI1 і CLD1 (номери до правил підключення), CLI і CLD (після них) та CALLER_NAME. Він відповідає CLI, CLD і, за потреби, CALLER_NAME та ADD_HEADER; відхилити дзвінок він не може. Приклад на shell: /home/ssp/scripts/external_translator_outbound.sample.
Що далі
Розділ «Що далі»- Трансляція номерів: правила, що виконуються до і після скрипту.
- Приклади правил трансляції: більшість переписувань не потребує скрипту.
- Коди відповідей SIP: код
External Translator Rejected The Callу CDR.