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 endExtracting 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.