Idea is when call is received, transfer to next destination should come with callerID was received originally, not updated in moment of transfer. Sometimes it's needed for correct CRM integration or peoples just get used to it, cause it's default with blind transfer.
Actually, same ideas that described here, but for use in FusionPBX.
1. Create context save_transfer with order ~85
condition - <empty>
action - export - nolocal:execute_on_answer_1=lua number_save_on_transfer_store.lua
action - export - api_hangup_hook=lua number_save_on_transfer_db_cleanup.lua
2. Create context restore_transfer with order higher, than save_trasfer, ~80
condition - ${db(exists/number_transfer_store/${sip_from_user})} - ^true$
action - set - restored_number_on_transfer=${db(select/number_transfer_store/${sip_from_user})} - inline
action - set - effective_caller_id_number=${restored_number_on_transfer}
action - set - effective_caller_id_name=${restored_number_on_transfer}
action - db - delete/number_transfer_store/${sip_from_user}
condition - ${db(exists/number_transfer_store/${sip_from_user}_name)} - ^true$
action - set - restored_number_on_transfer_name=${db(select/number_transfer_store/${sip_from_user}_name)} - inline
action - set - effective_caller_id_name=${restored_number_on_transfer_name}
action - db - delete/number_transfer_store/${sip_from_user}_name
Lua files:
/usr/share/freeswitch/scripts/number_save_on_transfer_store.lua
-- Save number_answered / original caller_id to database
--api = freeswitch.API()
if (session:ready()) then
answered_extension = session:getVariable("dialed_user")
caller_id = session:getVariable("restored_number_on_transfer")
caller_name = session:getVariable("restored_number_on_transfer_name")
if (caller_id == nil) then
caller_id = session:getVariable("sip_from_user")
end
if (caller_name == nil) then
caller_name = session:getVariable("sip_from_display")
end
if (answered_extension ~= nil and caller_id ~= nil) then
freeswitch.consoleLog("INFO", "[NUMBER_ON_TRANSFER_SAVE] Got answered call from "..caller_id.." to "..answered_extension.."\n")
session:execute('db', 'insert/number_transfer_store/'..answered_extension..'/'..caller_id)
if (caller_name ~= nil) then
session:execute('db', 'insert/number_transfer_store/'..answered_extension..'_name/'..caller_name)
end
end
end
/usr/share/freeswitch/scripts/number_save_on_transfer_db_cleanup.lua
-- Cleanup database
api = freeswitch.API()
sip_to_user = env:getHeader("variable_last_sent_callee_id_number")
if (sip_to_user ~= nil) then
--serialized = env:serialize()
--freeswitch.consoleLog("INFO","[hangup]\n" .. serialized .. "\n")
freeswitch.consoleLog("INFO", "[DB_CLEANUP] Cleaning " .. sip_to_user .. "\n")
api:executeString('db delete/number_transfer_store/'..sip_to_user)
api:executeString('db delete/number_transfer_store/'..sip_to_user..'_name')
end
P.S.: At the end, db is can be easily replaced with hash. As we don't need persistence storage here.
No comments:
Post a Comment