tSIP: using custom fields from SIP INVITE
Lua function GetCallInitialRxInvite() returns full text of initial INVITE received for incoming call. This allows to extend funcionality by extracting and using custom INVITE fields like passing extra phone numbers (call transfer or redirection). Extracted value can be presented e.g. as programmable button caption ("on call state" event script):
function string.starts(String, Start)
return string.sub(String,1,string.len(Start))==Start
end
function trim(s)
return (s:gsub("^%s*(.-)%s*$", "%1"))
end
callState = GetCallState()
if callState == 1 then -- CALL_INCOMING
local invite = GetCallInitialRxInvite()
local needle = "USER-AGENT:"
-- clear button caption in case line is not found
SetButtonCaption(0, "") -- first, fixed column on dialpad
SetButtonCaption(15, "") -- first column of the sidecar
-- print("\nSCRIPT RX INVITE:\n" .. invite)
for line in invite:gmatch"[^\n]+" do -- extract each line
if string.starts(string.upper(line), needle) then
lineVal = trim(line:sub(string.len(needle)+1))
SetButtonCaption(0, lineVal) -- first, fixed column on dialpad
SetButtonCaption(15, lineVal) -- first column of the sidecar
break
end
end
end
Extracting number from Remote-Party-ID and displaying number and description as button captions ("on call state" event script):
function string.starts(String, Start)
return string.sub(String,1,string.len(Start))==Start
end
function trim(s)
return (s:gsub("^%s*(.-)%s*$", "%1"))
end
callState = GetCallState()
if callState == 1 then -- CALL_INCOMING
local invite = GetCallInitialRxInvite()
local needle = "REMOTE-PARTY-ID:"
-- clear button caption in case line is not found
SetButtonCaption(0, "") -- first, fixed column on dialpad
SetButtonCaption(1, "")
-- print("\nSCRIPT RX INVITE:\n" .. invite)
for line in invite:gmatch"[^\n]+" do -- extract each line
if string.starts(string.upper(line), needle) then
lineVal = trim(line:sub(string.len(needle)+1))
local number = string.match(lineVal, "sip:(.-)@")
if number == nil then
break
end
local description = GetContactName(number)
SetButtonCaption(0, number) -- first, fixed column on dialpad
SetButtonCaption(1, description)
break
end
end
end
Back to howto list.