tSIP softphone: Lua script examples

Random Lua scripts. See "script" button reference for general description and list of available functions.

Quick introduction to Lua: http://tylerneylon.com/a/learn-lua/.

on_call_disconnected_play.lua ("on call state" script)

-- "on call state": beep when call ends if (only if) call was established
call_state = GetCallState()
call_incoming = IsCallIncoming()

if call_state == 6 then -- CALL_STATE_ESTABLISHED
	SetVariable("CallEstablished", "does-not-matter-what-i-enter-here")	
elseif call_state == 0 then -- CALL_STATE_CLOSED
	local dummy, isset = GetVariable("CallEstablished")
	ClearVariable("CallEstablished")
	if (isset ~= 0) then
		-- Beep only if call was established previously
		Beep(392, 350)
		Sleep(50)
		Beep(392, 350)
		Sleep(50)
		Beep(392, 350)
		Sleep(50)
		Beep(311.1, 250)
		Sleep(50)
		Beep(466.2, 250)
		Sleep(50)
		Beep(392, 350)
		Sleep(50)
		Beep(311.1, 250)
		Sleep(50)
		Beep(466, 250)
		Sleep(50)
		Beep(392, 700)
	end	
end
  

Count number of times script was executed ("button" script)

-- This script counts number of times it was executed
local count, var_isset = GetVariable("runcount")
if (var_isset == 0) then
	count = 0
else
	count = tonumber(count)
end

count = count + 1
SetVariable("runcount", count)
print(string.format("Script executed %d time(s)\n", count))  
  

Send DTMFs automatically to e.g. enter conference room ("button" script)

-- user config
number = "sip:192.168.1.85:5065"	-- or regular phone number
dtmf = "1234"
-- end of user config

Call(number)
for i=1, 20, 1
do
	if (i == 20) then
		print("Timed out waiting for confirmed state\n")
		break;
	end

	Sleep(300)
	call_state = GetCallState()
	if call_state == 6 then
		-- CALL_STATE_ESTABLISHED
		Sleep(2000)
		SendDtmf("1234")
		break
	elseif call_state == 0 then
		-- CALL_STATE_CLOSED
		print("End of call\n")
		break;
	end
end
print("End of script\n")  
  

Change tray icon depending on call state ("on call state")

callState = GetCallState()
if callState == 0 then
	SetTrayIcon("icon_closed.bmp")
elseif callState == 1 then
	SetTrayIcon("icon_incoming.bmp")
elseif callState == 2 then
	SetTrayIcon("icon_outgoing.bmp")
elseif callState == 3 then
	SetTrayIcon("icon_trying.bmp")
elseif callState == 4 then
	SetTrayIcon("icon_ringing.bmp")
elseif callState == 5 then
	SetTrayIcon("icon_progress.bmp")
elseif callState == 6 then
	SetTrayIcon("icon_established.bmp")
end

Lua modules / including another script

-- scriptTest.lua from scripts directory
local M = {} -- public interface
local x = 1	 -- private

function M.testFunction()
	print(string.format("Test function called, x = %d\n", x))
end

return M
-- end of scriptTest.lua


-- main.lua
local scriptTest = require("scripts.scriptTest")
print("Trying to call testFunction...\n")
scriptTest.testFunction()
-- end of main.lua

Send record file by mail - to be combined with mailbox

call_state = GetCallState()

if call_state == 0 then -- CALL_STATE_CLOSED
	local fileName = GetRecordFile()
	if fileName ~= "" then
		-- check file size, skip small (probably empty - only announcement) files
		local file = io.open(fileName, "r")
		local fileSize = file:seek("end")
		file:close()
		if (fileSize < 8 * 2 * 8000) then	-- 8 seconds * 2B/sample * 8kS/s
			print(string.format("Skipping file %s (size = %d)\n", fileName, fileSize))
		else
			print(string.format("Sending mail with file %s (size = %d)\n", fileName, fileSize))
			-- TODO: replace with real command line mail client
			local params = "send " .. fileName
			ShellExecute("open", "some_sendmail.exe", params, nil, 1)
		end
	end
end

Set call codec name as button caption ("on call state" event script)

-- configuration
local buttonId = 0	-- button to display codec name on
-- end of configuration

local callState = GetCallState()

if callState == 6 then -- ESTABLISHED
	local codecName = GetCallCodecName();
	local caption = string.format("    %s", codecName)
	SetButtonCaption(buttonId, caption)
elseif callState == 0 then -- CLOSED
	SetButtonCaption(buttonId, "    ----")
end

Back to howto list