VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

неверный extension в CEL

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

Ответить
Yessey
Сообщения: 9
Зарегистрирован: 10 май 2017, 11:37

неверный extension в CEL

Сообщение Yessey »

Привет всем!
Такая интересная задача:
Есть FreePBX v14
Подключен SIP trunk c Теле2 с динамической регистрацией. По этому транку провайдер дает несколько номеров, причем номера при входящем вызове подставляются в SIP header в поле TO:.
Этот момент я решил с помощью кастомного контекста и трёх строчек в dialplan-е. Соответственно с входящей маршрутизацией проблем нет.
Теперь самый важный момент - в CEL (Call Event Logging) при входящем звонке на любой номер, в поле extension пишется "S", хотя должен быть номер DID.
Может кто сталкивался с такой задачей ?
Вложения
photo_2020-10-25_00-21-18.jpg
photo_2020-10-25_00-21-52.jpg
photo_2020-10-25_00-21-52.jpg (15.86 КБ) 3512 просмотров
ded
Сообщения: 15621
Зарегистрирован: 26 авг 2010, 19:00

Re: неверный extension в CEL

Сообщение ded »

Обратите внимание: в журнале CDR есть поле DID (городской номер, на который вам приходит звонок), а в журнале CEL такого поля нет. Строго говоря - поле Extension в котором вы ожидаете увидеть номер DID это неверно. Буква s указывает на отработку макроса, который начинается с s = start
exten => s,1,

Вывод в вэб интерфейсе журналов CDR & CEL делается из таблиц mysql - база данных asteriskcdrdb, таблицы cdr & cel. И вот если заглянуть туда, то увидим такие поля:

Код: Выделить всё

mysql> show columns from cdr;
+---------------+--------------+------+-----+---------------------+-------+
| Field         | Type         | Null | Key | Default             | Extra |
+---------------+--------------+------+-----+---------------------+-------+
| calldate      | datetime     | NO   | MUL | 0000-00-00 00:00:00 |       |
| clid          | varchar(80)  | NO   |     |                     |       |
| src           | varchar(80)  | NO   |     |                     |       |
| dst           | varchar(80)  | NO   | MUL |                     |       |
| dcontext      | varchar(80)  | NO   |     |                     |       |
| channel       | varchar(80)  | NO   |     |                     |       |
| dstchannel    | varchar(80)  | NO   |     |                     |       |
| lastapp       | varchar(80)  | NO   |     |                     |       |
| lastdata      | varchar(80)  | NO   |     |                     |       |
| duration      | int(11)      | NO   |     | 0                   |       |
| billsec       | int(11)      | NO   |     | 0                   |       |
| disposition   | varchar(45)  | NO   |     |                     |       |
| amaflags      | int(11)      | NO   |     | 0                   |       |
| accountcode   | varchar(20)  | NO   | MUL |                     |       |
| uniqueid      | varchar(32)  | NO   | MUL |                     |       |
| userfield     | varchar(255) | NO   |     |                     |       |
| did           | varchar(50)  | NO   | MUL |                     |       |
| recordingfile | varchar(255) | NO   |     |                     |       |
| cnum          | varchar(80)  | NO   |     |                     |       |
| cnam          | varchar(80)  | NO   |     |                     |       |
| outbound_cnum | varchar(80)  | NO   |     |                     |       |
| outbound_cnam | varchar(80)  | NO   |     |                     |       |
| dst_cnam      | varchar(80)  | NO   |     |                     |       |
+---------------+--------------+------+-----+---------------------+-------+
Ну и

Код: Выделить всё

mysql> show columns from cel;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| eventtype   | varchar(30)  | NO   |     | NULL    |                |
| eventtime   | datetime     | NO   |     | NULL    |                |
| cid_name    | varchar(80)  | NO   |     | NULL    |                |
| cid_num     | varchar(80)  | NO   |     | NULL    |                |
| cid_ani     | varchar(80)  | NO   |     | NULL    |                |
| cid_rdnis   | varchar(80)  | NO   |     | NULL    |                |
| cid_dnid    | varchar(80)  | NO   |     | NULL    |                |
| exten       | varchar(80)  | NO   |     | NULL    |                |
| context     | varchar(80)  | NO   | MUL | NULL    |                |
| channame    | varchar(80)  | NO   |     | NULL    |                |
| appname     | varchar(80)  | NO   |     | NULL    |                |
| appdata     | varchar(255) | NO   |     | NULL    |                |
| amaflags    | int(11)      | NO   |     | NULL    |                |
| accountcode | varchar(20)  | NO   |     | NULL    |                |
| uniqueid    | varchar(32)  | NO   | MUL | NULL    |                |
| linkedid    | varchar(32)  | NO   | MUL | NULL    |                |
| peer        | varchar(80)  | NO   |     | NULL    |                |
| userdeftype | varchar(255) | NO   |     | NULL    |                |
| extra       | varchar(512) | NO   |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
Так что искать DID в поле exten нет смысла. А лучше писать в вашей кастомной обработке значение из SIP header в стандартную переменную
Set(EXT_DID=${SIP_HEADER(To):1:12})
или на худой конец
Set(CALLERID(rdnis)=${SIP_HEADER(To):1:12})
RDNIS number. The number which was forwarded to the current extension. (This is useful, for example, if the number of the active mailbox does not correspond to that of the dialed extension.)
Yessey
Сообщения: 9
Зарегистрирован: 10 май 2017, 11:37

Re: неверный extension в CEL

Сообщение Yessey »

Добрый вечер! Спасибо за Ваш ответ. Насчет поля exten в таблице CEL, могу с уверенностью сказать, что туда попадает DID номер, если указать его в строке register после знака "/", но у меня один транк и несколько номеров. У меня есть пример "идеального" звонка:
Изображение
112233 в этом примере DID

А по поводу Set(EXT_DID=${SIP_HEADER(To):1:12}) и Set(CALLERID(rdnis)=${SIP_HEADER(To):1:12}) - не помогло.

Также попробовал записать извлеченный из SIP_Header номер DID в пользовательское событие:

exten => _.,n,CELGenUserEvent(customdid, exten=${pseudodid})

Также не получилось, может быть неправильно описываю функцию ?
ded
Сообщения: 15621
Зарегистрирован: 26 авг 2010, 19:00

Re: неверный extension в CEL

Сообщение ded »

Многие поля в mysql являются readonly до завершения транзакции. Это значит, что мы не можем их переписывать по своему усмотрению пока звонок не завершился.
В примере "идеального" звонка видим, что в поле exten записываются разные значения на каждом шаге - events. Какое из них будет полезным для вашего отчёта? Наверное 112233, eventtype=CHAN_START ?
Yessey писал(а):Также попробовал записать извлеченный из SIP_Header номер DID в пользовательское событие:

exten => _.,n,CELGenUserEvent(customdid, exten=${pseudodid})

Также не получилось, может быть неправильно описываю функцию ?
Как минимум - AFAIK, нет такого эвента - customdid, и после запятой туда пойдёт именно текст = exten=${pseudodid}
Может посмотрите примеры в cel_custom.conf.sample?

Не хочу вас запутать, но если бы вы посмотрели прохождение входящего вызова диал-плана

Код: Выделить всё

*CLI> dialplan show ext-did
[ Context 'ext-did' created by 'pbx_config' ]
  'foo' =>          1. Noop(bar)                                  [pbx_config]
  Include =>        'ext-did-custom'                              [pbx_config]
  Include =>        'ext-did-0001'                                [pbx_config]
  Include =>        'ext-did-0002'  
можно было увидеть что DID записывается в переменную FROM_DID
Set(__FROM_DID=${EXTEN})
В вашем случае пред-обработка будет
Set(__FROM_DID=${SIP_HEADER(To):1:12})
и это будет уже как минимум правильно отображаться в журнале CDR. Так можно и до CEL доковырять.
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH