Задался вопросом: что первично - номер или port_from у пойнта?
Оказалось - входящий порт.
Т.е. если у звонка указан и индивидуальный port_from и from_number_164, то сперва он будет искать пойнт по порту, а потом - по номеру.
В доках об этом не сказано.
Нашёл в коде:
Цитата:
public CalculateClientItem findPoint(LogRecord record, boolean byToNumber)
{
CalculateClientItem result = null;
if (byToNumber)
{
result = (CalculateClientItem)this.phoneItemMap.get(record.toNumber164);
}
else
{
result = (CalculateClientItem)this.portItemMap.get(record.fromPort);
if (result == null)
{
result = (CalculateClientItem)this.phoneItemMap.get(record.fromNumber164);
}
}
return result;
}
Мне же сейчас нужно обратное.
Схема следующая: есть клиент-оператор, работающий по субагентской схеме.
Они высылают нам информацию по своим абонентам: какие номера физики, а какие - юрики.
Эти номера заводятся на 2 договорах в виде пойнтов с номерами: на одном - юрики, на другом - физики.
Дополнительно для этого оператора всегда проставляется port_from="operator_id" на основе входящего канала на АТС, чтобы не терять звонки, если у нас нет данных о его номере, либо они прислали нам кривой АОН.
Чтобы учитывать такие звонки, на договор для звонков юриков добавляется пойнт с port_from="operator_id".
Этакий last resort point
Но чтобы такая схема работала, нужно поменять порядок поиска пойнтов, иначе вся наработка будет выставляться на этот пойнт.
Можете добавить в конфиге модуля phone что-то типа point.find.mode=0|1 ?
0 - сначала port_from, потом номер (по-умолчанию)
1 - сначала номер, потом port_from
v 5.2