10.04.2019

opensips. dispatcher. loadbalancing. wrong destination.

По установке по умолчания, если вы добавите несколько шлюзов в dispatcher то про запросе авторизации, Opensips будет пересылать новый invite на новый шлюз.

решается выставлением hash механизма ‘0’ в функции ds_select_dst который учитывает callid.

8.04.2019

troubleshoot. ACK sending to wrong host

picture when ACK sending to wrong dest

solve is add function fix_sdp_contact() into onreply_route .

по-русски: проблема была в том, что опенсипс получая ACK от абонента не пересылал его обратно, через внутренний интерфейс железке. А слал ACK напрямую тому, кто указан был в 200 OK оригинальном. в Итоге помогло добавление функции в onreply_route которая по идее должна заменять поле контакт на адрес источника запроса.

3.04.2019

FREEPBX. SURVEY. IVR. REPORT

Задача: написать модуль для freepbx который бы переводил пользователя на ivr оценки качества или просто опрос звонящего

Система обслуживания это несколько вопросов на которые пользователи должны дать ответ нажатием кнопки от 1 до 5.

Ответы должны сохраняться в базу данных с дополнительной информацией о том, какая система опрашивала, какие ответы даны, кто отвечал, запись разговора.

Статья с примером реализации. Кстати отлично показывает как работают некоторые механизмы в freepbx.

итого для создания системы опроса в freepbx можно обойтись вообще без всего и даже отчеты получать в более-менее хорошем виде

1. add content to extensions_custom.conf
;-------Survey logic------------------------------
[macro-survey]

exten => _.,1,answer()

exten => _.,n,Read(answer1,/var/lib/asterisk/sounds/en/custom/${EXTEN}-1,1,,1,2)
exten => _.,n,Read(answer2,/var/lib/asterisk/sounds/en/custom/${EXTEN}-2,1,,1,2)
exten => _.,n,Read(answer3,/var/lib/asterisk/sounds/en/custom/${EXTEN}-3,1,,1,2)
exten => _.,n,Read(answer4,/var/lib/asterisk/sounds/en/custom/${EXTEN}-4,1,,1,2)
exten => _.,n,Read(answer5,/var/lib/asterisk/sounds/en/custom/${EXTEN}-5,1,,1,2)
exten => _.,n,Read(answer6,/var/lib/asterisk/sounds/en/custom/${EXTEN}-6,1,,1,2)
exten => _.,n,Read(answer7,/var/lib/asterisk/sounds/en/custom/${EXTEN}-7,1,,1,2)
exten => _.,n,Read(answer8,/var/lib/asterisk/sounds/en/custom/${EXTEN}-8,1,,1,2)
exten => _.,n,Read(answer9,/var/lib/asterisk/sounds/en/custom/${EXTEN}-9,1,,1,2)

exten => _.,n(finish),set(answer=${answer1}|${answer2}|${answer3}|${answer4}|${answer5}|${answer6}|${answer7}|${answer8}|${answer9})

exten => _.,n,Set(CDR(userfield)=${answer})

exten => _.,n,noop(EXTEN - ${EXTEN})
exten => _.,n,noop(DIDFROM - ${FROM_DID})
exten => _.,n,noop(DEXTEN - ${DEXTEN})
exten => _.,n,noop(TIMESTP - ${TIMESTR})
exten => _.,n,noop(CALLERID - ${CALLERID(num)})
exten => _.,n,noop(RECORDS - ${UNIQUEID})
exten => _.,n,noop(EXTFROM - ${EXTTOCALL})
exten => _.,n,noop(ANSWER1 - ${answer1})
exten => _.,n,noop(ANSWER2 - ${answer2})

exten => _.,n,MYSQL(Connect connid 127.0.0.1 surveyuser 123123 asterisk)
exten => _.,n,MYSQL(Query resultid ${connid} INSERT INTO surveys_report (surveynum,did,surveyname,agent,queue,start_date,calleridorig,callid,answer1,answer2) values ('${EXTEN}','${FROM_DID}',' ','${DEXTEN}',' ','${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}','${CALLERID(num)}','${UNIQUEID}','${answer1}','${answer2}'))

exten => _.,n,playback(/var/lib/asterisk/sounds/en/custom/${EXTEN}-thankyou)
;-------------------------------------

2. Prepare Recordings as at image 1
3. create Custom Destination as at image 2
4. create Ring Group as at image 3
5. all is ready for surveys, results and records will be stored at CDRs pages. for saving results in new table at mysql you should add new table in asterisk database;
6. SQL statement for create new table, also you should know user and password for database;
CREATE TABLE `surveys_report` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`surveynum` varchar(12) DEFAULT NULL,
`surveyname` varchar(255) NOT NULL,
`agent` varchar(64) DEFAULT NULL,
`queue` varchar(64) DEFAULT NULL,
`start_date` varchar(128) DEFAULT NULL,
`calleridorig` varchar(64) DEFAULT NULL,
`callid` varchar(128) DEFAULT NULL,
`answer1` varchar(64) DEFAULT NULL,
`answer2` varchar(64) DEFAULT NULL,
`did` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`)
)

CREATE USER 'surveyuser'@'localhost' IDENTIFIED BY '123123';
grand all on asterisk.* to 'surveyuser'@'localhost' IDENTIFIED BY '123123';