Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

Asterisk 1.6. Как из AMI установить значение CDR-поля userfield?

0

Раньше, до версии 1.6 был AMI Action - SetCDRUserField. Теперь такого счастья нет. Как установить значение userfield? В диалплане понятно - Set(CDR(userfield)), а как это сделать средствами AMI?

удалить закрыть спам изменить тег редактировать

спросил 2012-01-27 01:06:48 +0400

rom9 Gravatar rom9
1 1 2

5 Ответов

1

может так:

Action: SetVar 
Channel: SIP/202-0001 
Variable: CDR(userfield) 
Value: test

заработает?

ссылка удалить спам редактировать

ответил 2012-01-27 10:36:59 +0400

switch Gravatar switch
8334 11 7 91
http://lynks.ru/

Comments

К сожалению, не работает. Причем, 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 )редактировать

Работает так.

romariosar ( 2016-05-24 10:24:30 +0400 )редактировать
0
ссылка удалить спам редактировать

ответил 2012-01-28 11:44:12 +0400

bolshoy_plohish Gravatar bolshoy_plohish
1358 21 16 37

обновил 2012-01-28 17:12:10 +0400

Comments

ну и чем это поможет? вы хоть разобрались зачем это используеться и когда?

meral ( 2012-01-29 20:26:05 +0400 )редактировать
0

Разобрался.
В баг-трекере Asterisk-а эта тема помечена как "известная ошибка". Причем, настолько известная, что тянется еще с версии 1.6.0.6
SetVar переменную userfield устанавливает, но в CDR значение не пишется.
https://issues.asterisk.org/view.php?id=14662">Тема в баг-трекере
Похоже, исправлять ее никто и не думает. Ошибка висит с марта 2009. Поэтому придется искать другие способы записи в CDR.

ссылка удалить спам редактировать

ответил 2012-01-27 16:57:55 +0400

rom9 Gravatar rom9
1 1 2

Comments

есть варианты. например запустить макрос или тарнсфернуть этот звонок кудато временно, там диалпланом поставить переменную и вернуть обратно.

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 )редактировать
0

а setvar вам чем не угодила?

ссылка удалить спам редактировать

ответил 2012-01-27 01:52:03 +0400

meral Gravatar meral flag of Ukraine
21228 23 18 169
http://pro-sip.net/

Comments

Я тоже так думал, но почему-то не работает SetVar Делаю так: Action: SetVar Channel: SIP/202-0001 Variable: userfield Value: test ... и тишина в CDR-е

rom9 ( 2012-01-27 02:14:42 +0400 )редактировать
0

а setvar вам чем не угодила?

Да я тоже так думал, но почему-то не работает SetVar
Делаю так:
Action: SetVar
Channel: SIP/202-0001
Variable: userfield
Value: test
... и тишина в CDR-е
AMI отвечает, что мол, "Response: Success", но поле в CDR-е не заполняет.

ссылка удалить спам редактировать

ответил 2012-01-27 02:33:01 +0400

rom9 Gravatar rom9
1 1 2

обновил 2012-01-27 02:38:39 +0400

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: 2012-01-27 01:06:48 +0400

Просмотрен: 1,203 раз

Обновлен: May 23

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.