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

Как подменить запись в mysql cdr (подмена 8 на 7)

0

(подмена 8 на 7)

нужно чтоб записывалось в mysql не 8921XXXXXXX а 78921XXXXXXX

Пробую так

exten => 78152XXXXXX,2,Set(CDR(src)=7${CALLERID(num):-10})

в терминале меняет 0981-00000451", "CDR(src)=7911XXXXXX") in new stack

а в sql запись 8911ХХХХХХХ

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

спросил 2014-05-23 15:26:40 +0400

xmaster83 Gravatar xmaster83
201 12 6

1 Ответ

1

потомучто src ставится в начале и RO.

можно сделать так

exten => _78152XXXXXX,2,Set(CDR(src2)=7${CALLERID(num):-10})

или так

exten => _78152XXXXXX,1,Noop;something before
exten => _78152XXXXXX/_8.,2,NoCDR
exten => _78152XXXXXX/_8.,3,Set(CALLERID(num)=7${CALLERID(num):-10})
exten => _78152XXXXXX/_8.,4,Dial(Local/${EXTEN}@${CONTEXT}/n)
exten => _78152XXXXXX/_7,2,Goto(${EXTEN},5); это работает для 7хх и просто перекидывает дальше
exten => _78152XXXXXX,5,Noop(дальше чтото делаем)
ссылка удалить спам редактировать

ответил 2014-05-23 15:32:33 +0400

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

Comments

ну я ещё вот это нашёл

Definition at line 277 of file cdr.c.

{ struct astvart *newvariable; struct varshead *headp; const char *read_only[] = { "clid", "src", "dst", "dcontext", "channel", "dstchannel", "lastapp", "lastdata", "start", "answer", "end", "duration", "billsec", "disposition", "amaflags", "accountcode", "uniqueid", "userfield", NULL }; int x;

for(x = 0; readonly[x]; x++) { if (!strcasecmp(name, readonly[x])) { astlog(LOGERROR, "Attempt to set a read-only variable!.\n"); return -1; } }

Вариант - поправить исходники и перекомпелить?

xmaster83 ( 2014-05-23 15:35:47 +0400 )редактировать

невариант. очень вероятно что там не просто так RO стоит, что это используется гдето еще. где могли поставили RW

meral ( 2014-05-24 00:16:01 +0400 )редактировать

один товарищ так подсказал

DELIMITER ;;

CREATE DEFINER=dbcdruser@% TRIGGER cdr_insert AFTER INSERT ON cdr

FOR EACH ROW BEGIN

DECLARE ph VARCHAR(25);

IF SUBSTRING(NEW.src,1,1) = '8' THEN

ph = CONCAT('7',SUBSTRING(NEW.src,2));

END IF;

UPDATE asterisk.cdr SET src = ph WHERE uniqueid = NEW.uniqueid LIMIT 1;

END;;

DELIMITER ;

xmaster83 ( 2014-05-26 09:44:05 +0400 )редактировать

как экранировать код на этом сайте чтоб читался красиво ?

xmaster83 ( 2014-05-26 09:47:06 +0400 )редактировать

плохой вариант. вообещ избегайте тригеров если не уверены что они НЕОБХОДИМЫ. и кстати тригер у вас ОЧЕНЬ плохой. замените before insert и сделайте SET NEW.src=ph вместо того бреда который у вас(который будет искать по индексу и делать update для КАЖДОЙ строки)

meral ( 2014-05-26 10:44:13 +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 ленту новостей

Статистика

Задан: 2014-05-23 15:26:40 +0400

Просмотрен: 159 раз

Обновлен: May 23 '14

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