[macro-hangupcall-send-post] include => macro-hangupcall-custom exten => s,1,ExecIf($["${REC_STATUS}"="RECORDING" & "${CDR(billsec)}"!="0"]?Set(IsRecorded=1):Set(IsRecorded=0)) exten => s,n,ExecIf($["${IsRecorded}"="0"]?Goto(rec-skip)) exten => s,n,System(/usr/bin/lame -h -b 192 /var/spool/asterisk/monitor/${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT} /var/spool/asterisk/monitor/${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.mp3) ;конвертация записи разговора exten => s,n,System(/bin/rm -rf /var/spool/asterisk/monitor/${YEAR}/${MONTH}/${DAY}/${CALLFILENAME}.${MON_FMT}) ;удаление wav записи exten => s,n,Set(CDR(recordingfile)=${CALLFILENAME}.mp3) ;Формируем набор переменных exten => s,n(rec-skip),Set(Event=COMPLETED) exten => s,n,ExecIf($["${CRM_DIRECTION}"="INBOUND"]?Set(ExtNum=${CALLERID(num)}):Set(ExtNum=${OUTNUM})) ;Номер клиента exten => s,n,ExecIf($["${CRM_DIRECTION}"="INBOUND"]?Set(IntNum=${DEXTEN}):Set(IntNum=${FROMEXTEN})) ;Внутренний номер exten => s,n,Set(CallID=${CHANNEL(LINKEDID)}) ;Уникальный ID звонка exten => s,n,Set(FileName=${URIENCODE(${CALLFILENAME})}) exten => s,n,Set(RecordLink=${PBX_URL}/monitor/${YEAR}/${MONTH}/${DAY}/${FileName}.mp3);ссылка на файл записи звонка exten => s,n,Set(CallDuration=${CDR(billsec)}) ;Продолжительность звонка exten => s,n,Set(CallDisposition=${CDR(disposition)}) ;статус звонка exten => s,n,Macro(hangup-send-post) exten => s,n,MacroExit() ; [macro-hangup-send-post] exten => s,1,ExecIf($["${CRM_DIRECTION}"="INBOUND"]?Macro(incoming-status):Macro(outgoing-status)) exten => s,n,ExecIf($["${CRM_DIRECTION}"="INBOUND"]?Set(Type=in):Set(Type=out)) exten => s,n,Set(CURL_DATA=cmd=event&type=${Type}&event=${Event}&phone=${URIENCODE(${ExtNum})}&diversion=${URIENCODE(${ExtNum})}&ext=${IntNum}&callid=${CallID}&planfix_token=${PF_KEY}) exten => s,n,ExecIf($["${Event}"="COMPLETED"]?Set(CURL_DATA=${CURL_DATA}&status=${Status})) exten => s,n,ExecIf($["${Status}"="Success"]?Set(CURL_DATA=${CURL_DATA}&duration=${CallDuration}&is_recorded=${IsRecorded})) exten => s,n,ExecIf($["${IsRecorded}"="1"]?Set(CURL_DATA=${CURL_DATA}&record_link=${URIENCODE(${RecordLink})})) exten => s,n,Set(CURL_RESULT=${CURL(${PF_URL},${CURL_DATA})}) exten => s,n,MacroExit() ; [macro-dial-send-post] exten => s,1,ExecIf($["${CRM_DIRECTION}"="INBOUND"]?Macro(incoming-variables):Macro(outgoing-variables)) exten => s,n,Set(CURL_DATA=cmd=event&type=${Type}&event=${Event}&phone=${URIENCODE(${ExtNum})}&diversion=${URIENCODE(${ExtNum})}&ext=${IntNum}&callid=${CallID}&planfix_token=${PF_KEY}) exten => s,n,Set(CURL_RESULT=${CURL(${PF_URL},${CURL_DATA})}) exten => s,n,MacroExit() ; [macro-incoming-status] exten => s,1,ExecIf($["${CallDisposition}"=""]?Set(Status=Missed):Set(Status=Cancelled)) exten => s,n,ExecIf($["${CallDisposition}"="ANSWERED"]?Set(Status=Success)) exten => s,n,ExecIf($["${CallDisposition}"="ANSWER"]?Set(Status=Success)) exten => s,n,ExecIf($["${CallDisposition}"="NO ANSWER"]?Set(Status=Cancelled)) exten => s,n,ExecIf($["${CallDisposition}"="BUSY"]?Set(Status=Missed)) exten => s,n,MacroExit() ; [macro-outgoing-status] exten => s,1,ExecIf($["${CallDisposition}"=""]?Set(Status=NotAvailable):Set(Status=NotAvailable)) exten => s,n,ExecIf($["${CallDisposition}"="ANSWERED"]?Set(Status=Success)) exten => s,n,ExecIf($["${CallDisposition}"="NO ANSWER"]?Set(Status=NoAnswer)) exten => s,n,ExecIf($["${CallDisposition}"="BUSY"]?Set(Status=Busy)) exten => s,n,MacroExit() ; [macro-incoming-variables] exten => s,1,Set(Type=in) exten => s,n,Set(Event=INCOMING) exten => s,n,Set(ExtNum=${CRM_SOURCE}) ;Номер клиента exten => s,n,Set(IntNum=${EXTTOCALL}) ;Внутренний номер exten => s,n,Set(CallID=${CHANNEL(LINKEDID)}) ;Уникальный ID звонка exten => s,n,MacroExit() ; [macro-outgoing-variables] exten => s,1,Set(Type=out) exten => s,n,Set(Event=OUTGOING) exten => s,n,Set(ExtNum=${OUTNUM}) ;Номер клиента exten => s,n,Set(IntNum=${FROMEXTEN}) ;Внутренний номер exten => s,n,Set(CallID=${CHANNEL(LINKEDID)}) ;Уникальный ID звонка exten => s,n,MacroExit()