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

неверный extension в CEL

Проблемы и их решения Asterisk как такового

Модератор: april22

неверный extension в CEL

Сообщение Yessey » 24 окт 2020, 22:40

Привет всем!
Такая интересная задача:
Есть 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 KIB) Просмотров: 252
Yessey
 
Сообщений: 8
Зарегистрирован: 10 май 2017, 12:37

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

Сообщение ded » 25 окт 2020, 14:47

Обратите внимание: в журнале 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.)
ded
 
Сообщений: 14702
Зарегистрирован: 26 авг 2010, 19:00

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

Сообщение Yessey » 25 окт 2020, 21:24

Добрый вечер! Спасибо за Ваш ответ. Насчет поля 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})

Также не получилось, может быть неправильно описываю функцию ?
Yessey
 
Сообщений: 8
Зарегистрирован: 10 май 2017, 12:37

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

Сообщение ded » 25 окт 2020, 23:30

Многие поля в 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 доковырять.
ded
 
Сообщений: 14702
Зарегистрирован: 26 авг 2010, 19:00


Вернуться в Конфигурация и настройка Asterisk

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

© 2008 — 2020 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH