Разобрался с архивом, сделал, прописал все как в файлах. На выходе получаем:
1. CDRы не кладутся в созданную базу
2. При тесте 10000555-го контекста скрипт 1C_CDR.php не находит имя базы (подставляет пустое значение) - возможно это же есть и причина незаписи CDRов в базу. Вывод консоли:
> Channel SIP/705-00000005 was answered.
-- Executing [10000555@miko_ajam:1] NoCDR("SIP/705-00000005", "") in new stack
-- Executing [10000555@miko_ajam:2] NoOp("SIP/705-00000005", "internal calling application: 10000555 1C_CDR") in new stack
-- Executing [10000555@miko_ajam:3] AGI("SIP/705-00000005", "1C_CDR.php") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/1C_CDR.php
> 1C_CDR.php: Running SQL Command describe .PT1C_cdr
1C_CDR.php: SEVERE: Unknown database type:
1C_CDR.php: SEVERE: Unable to connect to database.
> 1C_CDR.php: Running SQL Command SEL ECT
> 1C_CDR.php: `a`.`calldate`,
> 1C_CDR.php: `a`.`src`,
> 1C_CDR.php: `a`.`dst`,
> 1C_CDR.php: `a`.`channel`,
> 1C_CDR.php: `a`.`dstchannel`,
> 1C_CDR.php: FORMAT(`a`.`billsec`,0),
> 1C_CDR.php: `a`.`disposition`,
> 1C_CDR.php: `a`.`uniqueid`,
> 1C_CDR.php: `a`.`userfield`,
> 1C_CDR.php: '',
> 1C_CDR.php: `a`.`lastapp`,
> 1C_CDR.php: `a`.`linkedid`
> 1C_CDR.php: FR OM
> 1C_CDR.php: (SELECT * FR OM ``.`PT1C_cdr`
> 1C_CDR.php: WHERE `calldate` BETWEEN '2015-07-01' AND '2015-08-01'
> 1C_CDR.php: ) AS `a`
> 1C_CDR.php: WH ERE (( `a`.`lastapp`='Transferred Call' AND `a`.`lastdata` like '%/705@%')
> 1C_CDR.php: OR ((`a`.`lastapp`='Dial' OR `a`.`lastapp`='Queue')
> 1C_CDR.php: AND (`a`.`channel` like '%/705-%'
> 1C_CDR.php: OR `a`.`dstchannel` like '%/705-%'
> 1C_CDR.php: OR `a`.`dstchannel` like '%/705@%'
> 1C_CDR.php: OR `a`.`src`='705'
> 1C_CDR.php: OR `a`.`dst`='705'))
> 1C_CDR.php: )
1C_CDR.php: SEVERE: Unknown database type:
1C_CDR.php: SEVERE: Unable to connect to database.
-- AGI Script Executing Application: (UserEvent) Options: (Refresh1CHistory,Channel:SIP/705,Date:2015-07-01)
...
Что делалось.
Поскольку система старая и есть часть инфраструктуры, установить чистый астериск, равно как и использовать готовые сборки, возможности нет. Приходится встраивать. Используется все что уже к настоящему моменту установлено - mysql, odbc, php и сам Asterisk.
CDRы пишутся в файл и в базу mysql, с другим именем, в другие таблицы. ODBC не используется.
Решил не возиться с полями имеющихся таблиц и скрипты не править, а создать новую базу как описано, и через ODBC коннектиться. То есть, в тестовом режиме предполагалось, что CDRы будут писаться и в старую базу напрямую в mysql, и в новую, через odbc.
Посему пока 2 вопроса
1. А вообще возможно ли так, чтоб в 2 базы писалось одно и то же параллельно, но через разные коннекторы?
2. Если да, то как проверить, работает ли ODBC (та ли версия установлена, все ли запущено итп)