Я уже описывал, как в Oktell организовать сценарий Callback для сотрудников (звонок за счет офисной АТС). Теперь рассмотрим как такое же реализовать с помощью FreeSWITCH.
Для этой функции я выделил отдельный городской SIP-номер (благо, у меня их 10 шт.). Пускай Вас не смущает, что придется звонить с мобильного на городской, мы сделаем все возможное отправим в trunk SIP 183 Session Progress Message, что бы сотрудник не потерял и копейки. Вот таким будет наш диалплан:
<extension name="380322320000">
<condition field="destination_number" expression="^(380322320000)$">
<action application="pre_answer"/>
<action application="read" data="3 12 'tone_stream://%(10000,0,350,440)' digits 20000 #"/>
<action application="set" data="api_hangup_hook=jsrun callback.js ${caller_id_number} ${digits}"/>
<action application="hangup" data="CALL_REJECTED"/>
</condition>
</extension>
Поступил звонок, отправили Session Progress и гудок. Ждем ввода номера, после чего завершаем соединение. А вот уже после завершения запускаем JavaScript callback.js, где на вход отправляем номер звонящего и набранные цифры. Вот код скрипта callback.js:
if ( ['0636150000','0939230000'].indexOf(argv[0]) != '-1' ) {
console_log("info","Callback to " + argv[0] + "\n");
session = new Session("{ignore_early_media=true}sofia/gateway/gsm/" + argv[0]);
while (session.ready()) {
session.execute("execute_extension", argv[1]+ " XML default");
}
}
Здесь все просто: проверяем номер ли нашего сотрудника, дозваниваемся ему и соединяем с набранным ранее абонентом.