Я тоже так думал, но почему-то не работает SetVar Делаю так: Action: SetVar Channel: SIP/202-0001 Variable: userfield Value: test ... и тишина в CDR-е
rom9 ( 2012-01-27 02:14:42 +0400 )редактироватьРаньше, до версии 1.6 был AMI Action - SetCDRUserField. Теперь такого счастья нет. Как установить значение userfield? В диалплане понятно - Set(CDR(userfield)), а как это сделать средствами AMI?
а setvar вам чем не угодила?
Я тоже так думал, но почему-то не работает SetVar Делаю так: Action: SetVar Channel: SIP/202-0001 Variable: userfield Value: test ... и тишина в CDR-е
rom9 ( 2012-01-27 02:14:42 +0400 )редактироватьа setvar вам чем не угодила?
Да я тоже так думал, но почему-то не работает SetVar
Делаю так:
Action: SetVar
Channel: SIP/202-0001
Variable: userfield
Value: test
... и тишина в CDR-е
AMI отвечает, что мол, "Response: Success", но поле в CDR-е не заполняет.
может так:
Action: SetVar
Channel: SIP/202-0001
Variable: CDR(userfield)
Value: test
заработает?
К сожалению, не работает. Причем, AMI говорит, что все "Success" и когда "Variable: CRD(userfield)", и когда просто "Variable: userfield". В гугле по этому вопросу я ничего не нашел. Вся надежда на вашу помощь...
rom9 ( 2012-01-27 13:05:16 +0400 )редактироватьПопробовал установить "accountcode". Даже получил Event: NewAccountCode, но в таблице CDR-а ничего не изменилось. В 20-й раз прочитал мануал. В cdrmysql.conf установлено "userfield=1". В файле cdrmanager.conf установлено "enabled=yes". Ума не приложу, что еще можно посмотреть...
rom9 ( 2012-01-27 13:22:42 +0400 )редактироватьПроверил в диалплане - работает. Set(CDR(userfield)=test), поле userfield заполняется нормально. А вот из AMI никак не хочет. Куда копать?
rom9 ( 2012-01-27 13:45:44 +0400 )редактироватьРазобрался.
В баг-трекере Asterisk-а эта тема помечена как "известная ошибка". Причем, настолько известная, что тянется еще с версии 1.6.0.6
SetVar переменную userfield устанавливает, но в CDR значение не пишется.
https://issues.asterisk.org/view.php?id=14662">Тема в баг-трекере
Похоже, исправлять ее никто и не думает. Ошибка висит с марта 2009. Поэтому придется искать другие способы записи в CDR.
есть варианты. например запустить макрос или тарнсфернуть этот звонок кудато временно, там диалпланом поставить переменную и вернуть обратно.
meral ( 2012-01-27 17:06:16 +0400 )редактироватьЯ решил не париться и пихнуть прямо из приложения update-ом в CDR. Кстати, для информации - в 1.8 тоже самое. Честно установить userfield средствами AMI - это без шансов.
rom9 ( 2012-01-27 18:19:25 +0400 )редактироватьupdate cdr это не очень хорошо с точки зрения БД. лучше создать табличку в которую записывать пары cdr.id,новые занчения. и по неободимостиделать join. прочто апдейт таблицы строковым выражением это достаточно ресурная операция в случае если в таблице милион записей или есть ключи по этой строке.
meral ( 2012-01-27 20:20:15 +0400 )редактироватьДелается UPDATE только одной строки. Это точно не затратно. Запрос типа "UPDATE cdr SET userfield='Test' WHERE uniqueid='1234567890.01' ". По идее, такие запросы должны просто пролетать за доли секунды, даже на 2-х миллиардах записей.
rom9 ( 2012-01-27 21:32:22 +0400 )редактироватьну конечно не затратно.всегото поиск по незаиндексированной строчной переменной а потом изменнения размера строки в базе. елси еще индекс по userfield то еще и апдейт индекс. доли секнды говрите? я бы сказал что на двух милионах там уже до полсекунды может собраться. но это ваше дело конечно. на миллиардной таблице вообще нихочу ничего обсуждать. вы вообще работали с таблицами больше 10млн записей? явам просто говрю где у вас может быть пробелма. при малых размерх таблицы это не сильно сложно.при 100 зовнках за год собереться 5+млн записей, и будет выглядеть как постоянно большая нагрзука на сервере. если такое случиться, просто вспомните что я вам говрил. поможет.
meral ( 2012-01-27 22:16:32 +0400 )редактироватьUserField: – CDR userfield (cdr_manager)
https://wiki.asterisk.org/wiki/display/AST/Some+Standard+AMI+Headers
ну и чем это поможет? вы хоть разобрались зачем это используеться и когда?
meral ( 2012-01-29 20:26:05 +0400 )редактироватьЗадан: 2012-01-27 01:06:48 +0400
Просмотрен: 1,934 раз
Обновлен: May 23 '16
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.