Алексей Сергеев писал(а):... в моих планах нумерации есть номер 6410013 и номер 6410. Как быть именно с этими двумя номерами?
К сожалению никак. Текущий механизм обработки вызовов не позволяет одновременно иметь два таких номера в одном плане нумерации.
И нет никакой возможности сделать "виртуального" пользователя или еще как-то поступить обойдя это ограничение? Ведь обязан же существовать обход подобных ситуаций. Наверняка уже не первый раз Вы с таким сталкиваетесь.
Те варианты, что доступны моему пониманию:
Отправить ВСЕ без исключения звонки на Asterisk (Definity или Siemens, лишь бы там была функция построения планов по регулярному выражению или хотябы подстановки), а оттуда вернуть по-направлениям расставленные в другие планы.
Т.е. человек локальный снял трубку. и набрал 6410. Звонок идет по PRI0 на астериск, а оттуда возвращяется уже через другой поток и в другой план нумерации и уходит куда нужно.
Недостатки очевидны:
1. Лишняя точка отказа
2. Лишние потоки (кстати, если бы TM.IP позволяла разбивать ее на "части" и позволяла бы писать дайлпланы по-хитрее - было бы куда проще сделать это через нее, скажем сделав ей несколько IP адресов, чтобы можно было каждый из них привязать к своему плану нумерации при входе звонка от него в станцию)
И я обнаружил что при "закрытии направления" значение максимальной и минимальной длинны номера имеют значение.
Т.е. если стоит префикс 6410013 с длинной в 4/4 - он не проходит и станция выдает "неправильно набран номер".
Также в трейсах встречаются:
MC240 писал(а):(49:02:21.955)[00/01:00] CMD: 'QUERY NEXT DIGIT'
(49:02:22.515)[00/01:00] Port msg: 'Digit': 13.
(49:02:22.515)[00/01:00] Dial In (in=01, need rm=0): {3} (flg=next)
Digit in buf: 07. Sended: 00
(49:02:22.515)[00/01:00] Dial Proc (plan 00): x{6}{4}{1}{0}{0}{1}{3} <Next Digit enabled>
In-Dial: link to index, num len 7
(49:02:22.515)[00/01:00] LinkIdx: type=PREFIX, idx=01. Access code 0
(49:02:22.515)[00/01:00] Link Prefix 01: type 'TRUNK.GRP', idx=1
User access code=00, pwd label 00
TG access need CID=mandatory, 'Quered CID'=y, 'Have CID'=y
(49:02:22.515)[00/01:00] 'Trunk Group': Link, idx=1
TG 01. Digit proceed=7, in buf=7 (need del=0)
Prefix modify num: use prefix, del 0
TG modify num: dial buf <{6}{4}{1}{0}{0}{1}{3}> (need del 0)
TG modify num: insert dial <>, need del 0
Не это ли выбор транка после получения всех цифр?
MC240 писал(а):(49:02:22.515)[00/01:00] 'Trunk Group': called dir type 0, called nature=1
Dial buf: x{6}{4}{1}{0}{0}{1}{3}
Select order: FIRST
(49:02:22.515)[00/01:00] 'Trunk Group': Link VoIP on slot=00/00
(49:02:22.515)[00/01:00] Set link to IP, slot 00
chan limit: 128
(49:02:22.515)[00/00:76] State: 'OutUse'
(49:02:22.515)[00/00:76] V-chan alloc, line type '8M-Trunk.' (02). Shelf 0, line 255
Search for mode 'Line8M-Common'
Found free v-chan: 05:00
(49:02:22.515)[00/00:76] Voice off, v-chan 05:00
(49:02:22.515)[SWITCH] Off 5,0
(for sip-t) ss7 category: e3 (227)
(for sip-t) SS7 Transmit medium req: 0x03
(for sip-t) SS7 Nature Of connection: 0x10
calling set from linked: clg_type 1, calling_present_screen 13
calling number: type <SUBSCRIBER>, present/screen: 13, len 4, number: 6.3.0.1.
called number type: <SUBSCRIBER>
(for sip-t) Hop Counter: default = 31
(for sip-t) Prop delay: default = 0
(49:02:22.515)[00/00:76] Link VoIP: next wait digit
(49:02:22.515)[00/00:76] Post link for setting TG param (incoming 00/01:00) - TG 1, digit min=7/max=7/t-out=10 (next digit=y)
(49:02:22.515)[00/01:00] Go dial to ext.port 00/00:76
(49:02:22.515)[00/01:00] State: 'InUse'
(49:02:22.515)[00/01:00] CMD: 'INFO: SHOW INFO' Parent=00/00:76.
(49:02:22.515)[00/01:00] CMD: 'GO USE (WITH OUTGOING DIAL)' Parent=00/00:76.
(49:02:22.515)[00/01:00] Next Digit: 16. Dial from buffer, send=0, len=7, need rm=0
(49:02:22.515)[00/00:76] CMD: 'DIAL DIGIT' Parent=00/01:00. Param=0x00000016
(49:02:22.515)[00/00:76] Enblock: Called number <6>
(49:02:22.515)[00/01:00] Next Digit: 14. Dial from buffer, send=1, len=7, need rm=0
(49:02:22.515)[00/00:76] CMD: 'DIAL DIGIT' Parent=00/01:00. Param=0x00000014
(49:02:22.515)[00/00:76] Enblock: Called number <64>
(49:02:22.515)[00/01:00] Next Digit: 11. Dial from buffer, send=2, len=7, need rm=0
(49:02:22.515)[00/00:76] CMD: 'DIAL DIGIT' Parent=00/01:00. Param=0x00000011
(49:02:22.515)[00/00:76] Enblock: Called number <641>
(49:02:22.515)[00/01:00] Next Digit: 1A. Dial from buffer, send=3, len=7, need rm=0
(49:02:22.515)[00/00:76] CMD: 'DIAL DIGIT' Parent=00/01:00. Param=0x0000001a
(49:02:22.515)[00/00:76] Enblock: Called number <6410>
(49:02:22.515)[00/01:00] Next Digit: 1A. Dial from buffer, send=4, len=7, need rm=0
(49:02:22.515)[00/00:76] CMD: 'DIAL DIGIT' Parent=00/01:00. Param=0x0000001a
(49:02:22.515)[00/00:76] Enblock: Called number <64100>
(49:02:22.515)[00/01:00] Next Digit: 11. Dial from buffer, send=5, len=7, need rm=0
(49:02:22.515)[00/00:76] CMD: 'DIAL DIGIT' Parent=00/01:00. Param=0x00000011
(49:02:22.515)[00/00:76] Enblock: Called number <641001>
(49:02:22.515)[00/01:00] Next Digit: 13. Dial from buffer, send=6, len=7, need rm=0
(49:02:22.515)[00/00:76] CMD: 'DIAL DIGIT' Parent=00/01:00. Param=0x00000013
(49:02:22.515)[00/00:76] Enblock: Called number <6410013>
А вот завершение набора в SIP транк.
MC240 писал(а):(49:02:22.515)[00/00:76] Stop Dial, reason 'max digit'
(49:02:22.515)[00/00:76] Voice link up: 00/01:00
(49:02:22.515)[00/00:76] Voice link with 00/01:00 (v-chan 05:00 <-> 04:00)
(49:02:22.515)[SWITCH] Link 5,0 <-> 4,0
(49:02:22.515)[00/01:00] CMD: 'STOP DIAL' Parent=00/00:76. Ptr=<00000000>
(49:02:22.515)[00/01:00] Activate flag 'Stop Dial'
А вот начинается открытие соединения на SIP направление.
MC240 писал(а):(49:02:22.515)[SIP-T/ISUP] <<-- TX. Slot '00' IAM- Initial Address Message:
[optional params]
[end of params]
(49:02:22.520)[00/00:76] Slot cmd: 'Seize' : 01.01.07.16.14.11.1A.1A.11.13.02.06.01.13.06.03.00.01.04.1D.01.10.20.00.E3.03.02.08.06.01.10.46.01.10.F3.0A.04.01.13.36.10.3D.01.1F.31.02.00.00.00.
(49:02:22.520)[00/00:76] Slot cmd: 'V-Chan Connect' : 05.00.
(49:02:22.520)[00/00:76] State: 'Wait ack'
(49:02:22.520)[00/01:00] Go Wait-Ack
(49:02:22.520)[00/01:00] Voice off, v-chan 04:00
(49:02:22.520)[SWITCH] Off 4,0
(49:02:22.520)[00/01:00] State: 'Wait'
(49:02:22.640)[00/00:76] Port msg: 'SeizeAck': 00.
(49:02:22.640)[00/00:76] State: 'OutUse'
(49:02:22.640)[00/01:00] Go dial to ext.port 00/00:76
(49:02:22.640)[00/01:00] State: 'InUse'
(49:02:22.640)[00/01:00] CMD: 'INFO: SHOW INFO' Parent=00/00:76.
(49:02:22.640)[00/01:00] CMD: 'GO USE (WITH OUTGOING DIAL)' Parent=00/00:76.
(49:02:22.640)[00/00:76] Stop Dial, reason 'max digit'
(49:02:22.640)[00/00:76] Voice link up: 00/01:00
(49:02:22.640)[00/00:76] Voice link with 00/01:00 (v-chan 05:00 <-> 04:00)
(49:02:22.640)[SWITCH] Link 5,0 <-> 4,0
(49:02:22.640)[00/01:00] CMD: 'STOP DIAL' Parent=00/00:76. Ptr=<00000000>
(49:02:22.640)[00/00:76] Port msg: 'Call Proceed'
(49:02:22.640)[00/00:76] Message: Call Progress
(49:02:22.640)[00/00:76] Stop Dial, reason 'chan.event'
(49:02:22.640)[00/00:76] Voice link up: 00/01:00
(49:02:22.640)[00/00:76] Voice link with 00/01:00 (v-chan 05:00 <-> 04:00)
(49:02:22.640)[SWITCH] Link 5,0 <-> 4,0
(49:02:22.640)[00/01:00] CMD: 'STOP DIAL' Parent=00/00:76. Ptr=<00000000>
(49:02:23.440)[00/00:76] Port msg: 'Answer'
(49:02:23.440)[00/00:76] Answer from chan in state OutUse
(49:02:23.440)[00/00:76] Voice link up: 00/01:00
(49:02:23.440)[00/00:76] Voice link with 00/01:00 (v-chan 05:00 <-> 04:00)
(49:02:23.440)[SWITCH] Link 5,0 <-> 4,0
(49:02:23.440)[00/00:76] State: 'Talk'
(49:02:23.440)[00/00:76] Set flag 'TALK': 11/06/09 16:59:37 175655.610
(49:02:23.440)[00/01:00] CMD: 'RESPONSE CALL' Parent=00/00:76.
(49:02:23.440)[00/01:00] Voice link up: 00/00:76
(49:02:23.440)[00/01:00] Voice link with 00/00:76 (v-chan 04:00 <-> 05:00)
(49:02:23.440)[SWITCH] Link 4,0 <-> 5,0
(49:02:23.440)[00/01:00] State: 'Talk'
(49:02:23.440)[00/01:00] Set flag 'TALK': 11/06/09 16:59:37 175655.610
(49:02:23.440)[00/01:00] Port cmd: 'Timing' : 00.00.
(49:02:23.440)[00/00:76] Slot cmd: 'V-Chan Connect' : 05.00.
(49:02:25.880)[00/00] Slot msg: 'Dev:Slave Down'
(49:02:32.060)[00/00] Slot msg: 'Dev:Slave Down'
(49:02:32.500)[00/01:00] Port msg: 'PreOnHook'
(49:02:32.680)[00/01:00] Port msg: 'OnHook'
(49:02:32.680)[00/01:00] On-Hook: State 'Talk', LINK=00/00:76, A=none:-1, B=none:-1
(49:02:32.680)[00/01:00] Release linked with cause: state 'Talk', linked port 00/00:76 (cause not set)
(49:02:32.680)[00/00:76] CMD: 'RELEASE' Parent=00/01:00.
(49:02:32.680)[00/00:76] Release port, state Talk, cause Normal call clearing
(49:02:32.680)[00/00:76] Voice off, v-chan 05:00
(49:02:32.680)[SWITCH] Off 5,0
(49:02:32.680)[SWITCH] Off 5,0
(49:02:32.680)[00/00:76] State: 'Release'
И окончание разговора.
Все мои "изыскания" подтверждаются еще и тем, что первый пакетик от TM.IP к SIP серверу приходит ровно в момент набора последней цифры из 7мизначного номера.
Т.е. слова о том, что выбор направления и транка осуществляется по первой цифре и сразу идет в линию не совсем соответствует действительносити. Разница, как минимум, в технологии дальнейшей передачи.
Может я опять полез куда не следует, Вам лучше знать внутренности Вашего продукта, но сдается мне, что выбор направления осуществляется и по числу набранных цифр тоже. Т.е. алгоритм (по моему мнению) может обрабатывать и одинаковые префиксы при условии указания непересекающихся длинн.
Скажем, если есть четкие указания длинны префикса и длины двух одинаково начинающихся префиксов не пересекаются - то это не будет противоречить Вашему алгоритму ни капельки. Зато такое нововведение откроет почти безграничные возможности по описанию дайлпланов и исключит недоступность некотороых направлений из-за обеспечения исторически сложившихся нумераций.
Пользователь, описав длины префиксов, сам ограничивает себя в скорости исполнения его звонка. Если в плане есть только 9ка и 8ка как выход в город - то пусть все работает пулей, как это у Вас принято. А если в плане есть 4х знаки, то уж простите, придется подождать пользователю пока он не наберет необходимое число цифр.
Есть такой подход у разного роде "ленивых" операторов. Этот подход заключается в том, чтобы все, что набрал пользователь отправлять сначала в МГТС, как "значимому оператору". Пусть он решает подходит ему такой номер или нет. А если не подходит - следующему. Это занимает много времени на соединения и отлупы, но это быстрее ожидания набора нужного числа цифр.
Если он не делает этого (хоть одного из подходов) сейчас, то впорос мой следует перефразировать: когда он сможет? или что сделать чтобы смог?