tSIP: handling incoming DTMFs in Lua
tSIP 0.1.58.4 adds capability of reading received DTMF signs (currently only RFC2833 aka RTP telephone-event supported) in Lua scripts. Received signs are pushed into FIFO queue and then can be read back from Lua script using GetRxDtmf() function. This function returns either empty string (if DTMF FIFO is empty) or string containing single DTMF sign (removing this sign from queue at the same time). DTMF queue is cleared at each call start.
As tSIP is able to switch audio source to wave file during call (or switch between different wave files) this allows creating IVR applications. Note that as at the moment reaching end of source wave file terminates the call each file should contain few extra seconds of silence at the end to give some time margin to switch in Lua to another file, switch back to same file (creating loop) or switch to regular audio input (microphone).
-- "on call state" event script callState = GetCallState() if callState == 6 then -- call state established while 1 do Sleep(200) callState = GetCallState() if callState == 0 then -- call disconnected return end local dtmf = GetRxDtmf() if (dtmf ~= "") then print(string.format("Lua: DTMF received = %s\n", dtmf)) end end end
Back to howto list.