Правила модификации SIP-сообщений на границе (sipmodrules)

Запросы

HTTP verb Endpoint Описание

POST

/rest/v1/master/sipmodrules

Создание нового правила

GET

/rest/v1/master/sipmodrules

Получение списка правил

GET

/rest/v1/master/sipmodrules/<id>

Получение данных правила

PATCH

/rest/v1/master/sipmodrules/<id>

Изменение данных правила

DELETE

/rest/v1/master/sipmodrules/<id>

Удаление правила

LOOKUP

/rest/v1/master/sipmodrules

Поиск идентификатора правила


Создание нового правила

Запрос

Описание полей: sipmodrule entity

Пример запроса
POST /rest/v1/master/sipmodrules HTTP/1.1
Content-Type: application/json; charset=utf-8

sipmodrule entity

Ответ

Описание полей: sipmodrule entity

Пример ответа
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
  "id": "ac062dd6-0196-7bf7-aa40-7cd30a921f58",
  "enabled": 1,
  "priority": 100,
  "code": "test",
  "dir": "incoming",

  "mode": "mask",
  "mode_extension": "",

  "extractors": )/i",
    "/reg/CSeq:\\s(?<cseq>\\d+)\\s(?<method>[^\r\n])/i",
    "/reg/Contact:.*sip:(?<cun>.+)@./i",
    "/reg/Contact:\\s*(?<cdn>[^<])<sip:.@./i"
  ],
  "filter": [
    "and",
    [
      "in",
      [
        "property",
        "method"
      ],
      [
        "list",
        "REGISTER",
        "INVITE"
      ]
    ],
    [
      "greater",
      [
        "integer",
        [
          "property",
          "cseq"
        ]
      ],
      1
    ]
  ],
  "modifiers": [
    "/reg/User-Agent:[^\r\n]\r\n//ig",
    "/reg/Contact:\\s*(<sip:.)/Contact: \"contact display\" \\1",
    "/reg/CSeq:([^\r\n]*)/CSeq:\\g{1}\r\nX-Era-Test: \"cseq={{cseq}}, cdn={{cdn}}, cun={{cun}}, ua={{ua}}\"/m"
  ],

  "action": "apply_last",
  "repair_contentlen": 0,

  "opts": {
    "comment": "",
    "title": ""
  }
}

Получение списка правил

Запрос

Table 1. Параметры запроса
Имя Тип Описание

filter

object

Фильтр по значениям полей.

mask

str

Список полей для вывода. Доступные поля для выдачи: id, priority, enabled, code, dir, action, repair_contentlen, mode, mode_extension, extractors, filter, modifiers, opts.title, ext.lwt, ext.ct.

offset

int

Смещение в списке ресурсов, подлежащих выдаче.

limit

int

Максимальное количество ресурсов в списке.

order

array<object|str>

Порядок сортировки ресурсов в списке.

flat

bool

Преобразование в плоский вид составных полей.

Пример запроса
GET /rest/v1/master/sipmodrules?offset=0&limit=4 HTTP/1.1

Ответ

Описание полей: sipmodrule entity

Пример ответа
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

[
  {
    "id": "1967cca4-0196-7be4-9d53-7cd30a921f58",
    "enabled": 1,
    "priority": 200,
    "code": "drop_scanner",
    "dir": "incoming",

    "mode": "mask",
    "mode_extension": "",

    "extractors": [
      "/reg/^(REGISTER|INVITE)/f",
      "/reg/User-Agent:\\s*friendly-scanner/i"
    ],
    "filter": [],
    "modifiers": [],

    "action": "drop",
    "repair_contentlen": 0,

    "opts": {
      "comment": "",
      "title": ""
    },
    "ext": {
      "ct": "2025-04-28T10:15:02.226Z",
      "lwt": "2025-04-28T15:09:08.749Z"
    }
  },
  {
    "id": "5e252a54-0196-7c03-0b19-7cd30a921f58",
    "enabled": 1,
    "priority": 50,
    "code": "test",
    "dir": "incoming",

    "mode": "module",
    "mode_extension": "sbc_mapping",

    "extractors": [],
    "filter": [],
    "modifiers": [],

    "action": "apply_last",
    "repair_contentlen": 0,

    "opts": {
      "comment": "",
      "title": ""
    },
    "ext": {
      "ct": "2025-04-28T10:48:16.409Z",
      "lwt": "2025-04-28T15:18:10.223Z"
    }
  },
  {
    "id": "ac062dd6-0196-7bf7-aa40-7cd30a921f58",
    "enabled": 1,
    "priority": 100,
    "code": "test",
    "dir": "incoming",

    "mode": "mask",
    "mode_extension": "",

    "extractors": )/i",
      "/reg/CSeq:\\s(?<cseq>\\d+)\\s(?<method>[^\r\n])/i",
      "/reg/Contact:.*sip:(?<cun>.)@.*/i",
      "/reg/Contact:\\s*(?<cdn>[^<]*)<sip:.*@.*/i"
    ],
    "filter": [
      "and",
      [
        "in",
        [
          "property",
          "method"
        ],
        [
          "list",
          "REGISTER",
          "INVITE"
        ]
      ],
      [
        "greater",
        [
          "integer",
          [
            "property",
            "cseq"
          ]
        ],
        1
      ]
    ],
    "modifiers": [
      "/reg/User-Agent:[^\r\n]*\r\n//ig",
      "/reg/Contact:\\s*[^<]*(<sip:.*)/Contact: \"contact display\" \\1",
      "/reg/CSeq:([^\r\n]*)/CSeq:\\g\{1}\r\nX-Era-Test: \"cseq={\{cseq}}, cdn={\{cdn}}, cun={\{cun}}, ua={\{ua}}\"/m"
    ],

    "action": "apply_last",
    "repair_contentlen": 0,

    "opts": {
      "comment": "",
      "title": ""
    },
    "ext": {
      "ct": "2025-04-28T10:35:50.719Z",
      "lwt": "2025-04-28T15:28:40.320Z"
    }
  },
  {
    "id": "f8ceec33-0196-77a2-acfd-7cd30a921f58",
    "enabled": 1,
    "priority": 100,
    "code": "avaya",
    "dir": "incoming",

    "mode": "mask",
    "mode_extension": "",

    "extractors": [
      "/reg/^INVITE/f",
      "/reg/User-Agent:\\s*(?<ua>Avaya CM.*)/i",
      "/reg/CSeq:\\s*(?<cseq>\\d)\\s(?<method>INVITE)/i",
      "/reg/Contact:.*sip:(?<cun>.)@.*/i",
      "/reg/Contact:\\s*(?<cdn>[^<]*)<sip:.*@.*/i"
    ],
    "filter": [
      "greater",
      [
        "integer",
        [
          "property",
          "cseq"
        ]
      ],
      1
    ],
    "modifiers": [
      "/reg/From:\\s*([^<]*)(<sip:)[^@](.)/From: \\1\\g{2}{{cun}}\\3/g",
      "/reg/From:\\s*(<sip:.)/From: {{cdn}}\\g{1}/g"
    ],

    "action": "apply_last",
    "repair_contentlen": 0,

    "opts": {
      "comment": "",
      "title": ""
    },
    "ext": {
      "ct": "2025-04-27T14:24:31.997Z",
      "lwt": "2025-04-28T15:14:45.767Z"
    }
  }
]

Получение данных правила

Запрос

Table 2. Параметры запроса
Имя Тип Описание

mask

str

Список полей для вывода.

flat

bool

Преобразование в плоский вид составных полей.

Пример запроса
GET /rest/v1/master/sipmodrules/ac062dd6-0196-7bf7-aa40-7cd30a921f58 HTTP/1.1

Ответ

Описание полей: sipmodrule entity

Пример ответа
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
  "id": "ac062dd6-0196-7bf7-aa40-7cd30a921f58",
  "enabled": 1,
  "priority": 100,
  "code": "test",
  "dir": "incoming",

  "mode": "mask",
  "mode_extension": "",

  "extractors": )/i",
    "/reg/CSeq:\\s(?<cseq>\\d+)\\s(?<method>[^\r\n])/i",
    "/reg/Contact:.*sip:(?<cun>.+)@./i",
    "/reg/Contact:\\s*(?<cdn>[^<])<sip:.@./i"
  ],
  "filter": [
    "and",
    [
      "in",
      [
        "property",
        "method"
      ],
      [
        "list",
        "REGISTER",
        "INVITE"
      ]
    ],
    [
      "greater",
      [
        "integer",
        [
          "property",
          "cseq"
        ]
      ],
      1
    ]
  ],
  "modifiers": [
    "/reg/User-Agent:[^\r\n]\r\n//ig",
    "/reg/Contact:\\s*(<sip:.)/Contact: \"contact display\" \\1",
    "/reg/CSeq:([^\r\n]*)/CSeq:\\g{1}\r\nX-Era-Test: \"cseq={{cseq}}, cdn={{cdn}}, cun={{cun}}, ua={{ua}}\"/m"
  ],

  "action": "apply_last",
  "repair_contentlen": 0,

  "opts": {
    "comment": "",
    "title": ""
  },
  "ext": {
    "ct": "2025-04-28T10:35:50.719Z",
    "lwt": "2025-04-28T15:28:40.320Z"
  }
}

Изменение данных правила

Поля запрещенные для изменения: id

Запрос

Описание полей: sipmodrule entity

Пример запроса
PATCH /rest/v1/master/sipmodrules/ac062dd6-0196-7bf7-aa40-7cd30a921f58 HTTP/1.1
Content-Type: application/json; charset=utf-8

sipmodrule entity

Ответ

Описание полей: sipmodrule entity

Пример ответа
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
  "id": "ac062dd6-0196-7bf7-aa40-7cd30a921f58",
  "enabled": 1,
  "priority": 100,
  "code": "test",
  "dir": "incoming",

  "mode": "mask",
  "mode_extension": "",

  "extractors": )/i",
    "/reg/CSeq:\\s(?<cseq>\\d+)\\s(?<method>[^\r\n])/i",
    "/reg/Contact:.*sip:(?<cun>.+)@./i",
    "/reg/Contact:\\s*(?<cdn>[^<])<sip:.@./i"
  ],
  "filter": [
    "and",
    [
      "in",
      [
        "property",
        "method"
      ],
      [
        "list",
        "REGISTER",
        "INVITE"
      ]
    ],
    [
      "greater",
      [
        "integer",
        [
          "property",
          "cseq"
        ]
      ],
      1
    ]
  ],
  "modifiers": [
    "/reg/User-Agent:[^\r\n]\r\n//ig",
    "/reg/Contact:\\s*(<sip:.)/Contact: \"contact display\" \\1",
    "/reg/CSeq:([^\r\n]*)/CSeq:\\g{1}\r\nX-Era-Test: \"cseq={{cseq}}, cdn={{cdn}}, cun={{cun}}, ua={{ua}}\"/m"
  ],

  "action": "apply_last",
  "repair_contentlen": 0,

  "opts": {
    "comment": "",
    "title": ""
  }
}

Удаление правила

Запрос

Пример запроса
DELETE /rest/v1/master/sipmodrules/ac062dd6-0196-7bf7-aa40-7cd30a921f58 HTTP/1.1

Ответ

Пример ответа
HTTP/1.1 204 No Content

Поиск идентификатора правила

Производит поиск ресурса по указанному ключу, возвращает идентификатор(ы) для построения endpoint.

Ключевые поля для поиска: id

Запрос

Пример запроса
LOOKUP /rest/v1/master/sipmodrules HTTP/1.1
Content-Type: application/json; charset=utf-8

"ac062dd6-0196-7bf7-aa40-7cd30a921f58"

Ответ

Пример успешного ответа
HTTP/1.1 200 OK
content-type: application/json; charset=utf-8

[
  "ac062dd6-0196-7bf7-aa40-7cd30a921f58"
]
Пример неуспешного ответа
HTTP/1.1 404 Not Found
Content-Type: application/json; charset=utf-8

{
  "error_code": 1404,
  "error_message": "Lookup failed"
}