Изменение номеров, записаных в CDR
Сообщений: 20
|
Изменение номеров, записаных в CDR
в диалплан вставил скрипт:
exten => _X.,1,AGI(chnum.agi)
Скрипт преобразует номера в приличный вид... (меняет CALLERID(num))
При звонке на телефон - этот номер преобразуется, в общем, все прекрасно...
Но вот в CDR записывает не преобразованные номера...
Есть ли возможность преобразовывать номера, которые будут записываться в CDR?
|
Сообщений: 20
|
Re: Изменение номеров, записаных в CDR
Народ, я не понятно объяснил или никто не знает?(((
|
Сообщений: 6521
|
Re: Изменение номеров, записаных в CDR
Vanga-mode on
try to connect to chnum.agi.....Failed!
rxgain=++
try to connect to chnum.agi one more time....^B^@^@<FF><FB><A0>^D3<80>^S<F6>h<D6>ESC A<D0>x<ED>^Z<F7>a<88>^Z^N1<99>e<AC>%^AIij,%<83> <F1>^F<CD><F2>m<AA>(<95>*6<FB>&<U+ABC8><D7><D9>D8n^Q9<83>#<AC>e^PB&m^S^Z<A9>Pn<D0><FA>%<8B><8D><CA><C7>i<F9><CA>W<CE><D4>ڕd<99>R<9C><A9>^R<A5>]<DA>^G!+TDd<<8E>^]<95>^Rh<D8>n/<97><91><AA><F5>...system crashed!
Vanga-mode off
Result = http://asterisk.ru/knowledgebase/Asterisk+func+cdr
|
Сообщений: 20
|
Re: Изменение номеров, записаных в CDR
chnum.agi:
#!/usr/local/bin/php -q
<?php
require 'phpagi.php';
$agi = new AGI();
$res = $agi->get_var("CALLERID(num)");
$res="8".$res;
$agi->set_var("CALLERID(num)",$res);
$agi->set_var("CDR(src)",$res);
?>
[Sep 18 09:19:27] ERROR[760]: cdr.c:303 ast_cdr_setvar: Attempt to set the 'clid' read-only variable!.
[Sep 18 09:20:55] ERROR[760]: cdr.c:303 ast_cdr_setvar: Attempt to set the 'src' read-only variable!.
Где разрешить запись - пока не нашел... Продолжаю поиски...
|
Сообщений: 20
|
Re: Изменение номеров, записаных в CDR
Definition at line 277 of file cdr.c.
{
struct ast_var_t *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; read_only[x]; x++) {
if (!strcasecmp(name, read_only[x])) {
ast_log(LOG_ERROR, "Attempt to set a read-only variable!.\n");
return -1;
}
}
Вариант - поправить исходники и перекомпелить? А проще может можно?
|
Откуда: Саратов
Сообщений: 414
|
Re: Изменение номеров, записаных в CDR
Создайте userfield и пишите туда всё, что захотите.
+7(925)140-7438
|
Сообщений: 20
|
Re: Изменение номеров, записаных в CDR
Он создан... Туда нормально пишется, но это не решение проблемы, а уход от нее =)
|
Откуда: Москва
Сообщений: 12
|
Re: Изменение номеров, записаных в CDR
а cdr в бд пишется?
если да -- вешайте триггер на insert или делайте вьюху для изменения при select
|
Сообщений: 135
|
Re: Изменение номеров, записаных в CDR
userfield - издевательство над RDB.
В 1.6 хотя бы в этом с cdr стало получше - можно просто делать CDR(xnum)=...
и при условии того, что в таблице есть поле xnum значение там и окажется.
В 1.4 могу предложить патч для постгреса, который позволяет самому указывать что и как инсертить в базу. Для mylsq вроде как тоже был какой-то mysql-custom cdr-бекенд
|
Откуда: Izhevsk
Сообщений: 89
|
Re: Изменение номеров, записаных в CDR
ded а у тебя это http://asterisk.ru/knowledgebase/Asterisk+func+cdr у самого получилось? кроме userfield и accountcode остальные переменные тока на чтение, как и написано в http://www.voip-info.org/wiki/view/Asterisk+Detailed+Variable+List
If the channel has a cdr, that cdr record has it's own set of variables which
can be accessed just like channel variables. The following builtin variables
are available and, unless specified, read-only.
${CDR(clid)} Caller ID
${CDR(src)} Source
${CDR(dst)} Destination
${CDR(dcontext)} Destination context
${CDR(channel)} Channel name
${CDR(dstchannel)} Destination channel
${CDR(lastapp)} Last app executed
${CDR(lastdata)} Last app's arguments
${CDR(start)} Time the call started.
${CDR(answer)} Time the call was answered.
${CDR(end)} Time the call ended.
${CDR(duration)} Duration of the call.
${CDR(billsec)} Duration of the call once it was answered.
${CDR(disposition)} ANSWERED, NO ANSWER, BUSY
${CDR(amaflags)} DOCUMENTATION, BILL, IGNORE etc
${CDR(accountcode)} The channel's account code (read-write).
${CDR(uniqueid)} The channel's unique id.
${CDR(userfield)} The channels uses specified field (read-write).
In addition, you can set your own extra variables with a traditional
Set(CDR(var)=val) to anything you want.
Я проверял в 1.4
|
|