tSIP softphone: XML phonebook import
Desk phones from multiple manufacturers (Cisco, Yealink, ATCOM) are using remote XML phonebooks with identical format, example:
<CiscoIPPhoneDirectory>
<Title>Name Of Directory</Title>
<Prompt>Prompt text.</Prompt>
<DirectoryEntry>
<Name>Name of Person or Company</Name>
<Telephone>TelephoneNumber</Telephone>
</DirectoryEntry>
<DirectoryEntry>
<Name>Name of Person or Company</Name>
<Telephone>TelephoneNumber</Telephone>
</DirectoryEntry>
</CiscoIPPhoneDirectory>
Import function for this XML was added in tSIP 0.1.74.4 as function in main menu and Lua ReadXmlContacts(xml_file) function.
Lua example fetching XML from server using curl was added to Script window:
-- BASIC SETTINGS BLOCK
-- where is XML phonebook placed on the server?
local server_path = "http://tomeko.net/software/SIPclient/howto/phonebook.xml?token=ABCDEFGH"
-- how to authorize to server (optional, may be empty)
local server_auth = "--insecure --anyauth --user admin:password"
-- END OF BASIC SETTINGS BLOCK
function file_exists(name)
local f=io.open(name,"r")
if f~=nil then io.close(f) return true else return false end
end
-- let's use paths relative to exe location
local filename = GetExeName()
local index = string.find(filename:reverse(), "\")
local dir = string.sub(filename, 1, -index)
local curl_exe = dir .. "curl.exe"
local xml_file = dir .. "phonebook.xml"
if file_exists(curl_exe) == false then
ShowMessage("This script requires curl.exe placed next to application executable")
return
end
-- remove file from previous run before trying to download new one
os.remove(xml_file)
local args = " -o " .. xml_file .. " " .. server_path .. " " .. server_auth
print(string.format("curl args: [%s]\n", args))
local ret = ShellExecute("open", curl_exe, args, nil, 0)
print(string.format("curl ShellExecute return code: %d\n", ret))
-- wait up to 5 seconds for download
for i = 1, 10 do -- Range includes both ends.
if file_exists(xml_file) then
break
end
if i == 10 then
ShowMessage("Failed to download XML phonebook\n")
print("Failed to download XML phonebook\n")
return
end
Sleep(500)
end
-- MessageBox with MB_YESNO and question icon
local res = MessageBox("Are you sure to overwrite current phonebook?\r\nCurrent contact entries would be lost.",
"Overwrite phonebook?", 4+32)
if res ~= 6 then
return
end
local status = ReadXmlContacts(xml_file)
if status == 0 then
print(string.format("Error %d reading XML contacts\n", status))
else
print("XML contacts imported\n")
end
Note: XML import function overwrittes content of local phonebook completely.
tSIP uses ANSI code page - import function converts strings from UTF-8 to ANSI, but characters outside of ANSI set would not be converted - they would be visible as quotation marks.
Possible uses of script fetching phonebook include manual run (programmable button), "on startup" script and "on timer" script (e.g. using second timer with period set to 1 hour).
Back to howto list