Правка по способу записи в CDR
При ответе в Dial, запись в CDR происходит сразу после Hangup до h-exten, при отсутствии ответа после h-exten, так что получении информации по последней строке в БД не верно в моем случае (вам нужно подобрать под свою версию Астериск), получаем нужную нам строку по двум параметрам, время поступления вызова и dst
Код: Выделить всё
exten => _X.,n,SET(__Time=${STRFTIME(${EPOCH},,%Y%m%d%H%M%S)})
exten => _X.,n,SET(__FN=${CALLERID(dnid)})
exten => _X.,n,Dial(Local/${EXTEN}@
exten => h,n,Set(CDR(sourcehg=${CHANNEL(hangupsource)}) ; при отсутствии ответа пишем в CDR по классике
exten => h,n,MYSQL(Connect connid mysql.local pbx ******* cdr)
;exten => h,n,MYSQL(Query resultid ${connid} SELECT id FROM cdr ORDER BY id DESC LIMIT 1)
exten => h,n,MYSQL(Query resultid ${connid} SELECT id FROM cdr WHERE calldate = ${Time} AND dst LIKE ${FN})
exten => h,n,MYSQL(Fetch fetchid ${resultid} IDCDR)
exten => h,n,MYSQL(Query resultid ${connid} UPDATE cdr SET sourcehg = '${CHANNEL(hangupsource)}' WHERE id = ${IDCDR})
exten => h,n,MYSQL(Clear ${resultid})
exten => h,n,MYSQL(Disconnect ${connid})