FreeSWITCH Dialplan of conference join user

#!/usr/bin/env lua

--Author:jncheng

--Email:[email protected]

--Version:20150520


--[[

1.If you want use the lua file,you must modify the conference.conf.xml:

<control action="execute_application" digits="*" data="lua /${FreeSWITCH_base_dir}/scripts/add_user_to_conference.lua"/>

<control action="events" digits="#"/>

]]


--Set some varvabile

--local cai_lin = "/opt/freeswitch/sounds/ring.wav"

--session:setVariable("ringback",cai_lin)

local src_exten = session:getVariable("caller_id_number")

local dest_exten = session:getVariable("destination_number")

local domain = session:getVariable("domain_name")

local confer_uid = session:getVariable("conference_uuid")

local fs_dir = "/usr/local/freeswitch/"

local playSound = fs_dir.."sounds/add_user_to_conference.wav"

local errSound = fs_dir.."sounds/input_error.wav"

local dialed_number = session:playAndGetDigits(4,4,3,7000,'#',playSound,errSound,"\\d+")

----------------------------min_digits,max_digits,max_attempts,timeout,terminators

----------------------------prompt_audio_file,input_error_audio file,digits_regex


local dbh = freeswitch.Dbh("odbc://fs:fs:123qwe")

assert(dbh:connected())

--Get the conference number

dbh:query("select dest as data from channels where (application='lua' or application='conference') and cid_num="..src_exten,function(row) 

        --freeswitch.consoleLog("INFO","---------------------------------------------------------------------------------------")

        --freeswitch.consoleLog("INFO",string.format("%s\n",row.data))

        --freeswitch.consoleLog("INFO","---------------------------------------------------------------------------------------")

        confer_num = string.format("%s",row.data)

end);


--Get conference data of src exten host data

dbh:query("select presence_id as data from channels where (application='conference' or application='lua') and cid_num="..src_exten,function(row) 

        --freeswitch.consoleLog("NOTICE","------------------------------------------")

        --freeswitch.consoleLog("NOTICE",string.format("%s\n",row.data))

        --freeswitch.consoleLog("NOTICE","------------------------------------------")

        originate_data = string.format("%s",row.data)

end);

--Define the split function and get the host IP

function Split(szFullString, szSeparator)  

  local nFindStartIndex = 1  

  local nSplitIndex = 1  

  local nSplitArray = {}  

  while true do  

  local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)  

  if not nFindLastIndex then  

    nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))  

  break  

  end  

  nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)  

  nFindStartIndex = nFindLastIndex + string.len(szSeparator)  

  nSplitIndex = nSplitIndex + 1  

  end  

  return nSplitArray  

end

--Get the invite user's(Fist) register host 

local originate_host = Split(originate_data,"@")[2]

--freeswitch.consoleLog("ERR","the originate_host is:"..originate_host.."\n")

--Get the dest_exten host

dbh:query("select sub_to_host as host from sip_subscriptions where sip_user="..dialed_number,function(row) 

        --freeswitch.consoleLog("NOTICE","------------------------------------------")

        --freeswitch.consoleLog("NOTICE",string.format("%s\n",row.host))

        --freeswitch.consoleLog("NOTICE","------------------------------------------")

        dest_host = string.format("%s",row.host)

end);

--freeswitch.consoleLog("ERR","the dialed_number is:"..dialed_number.."\n")

--freeswitch.consoleLog("ERR","the dest_host is:"..dest_host.."\n")

api = freeswitch.API()

if originate_host == dest_host then 

  --local dial_str = "originate {origination_caller_id_number=7777,execute_on_originate='playback::welcome.wav'}user/1003 3001"

  local dial_str = "originate {origination_caller_id_number="..src_exten.."}user/"..dialed_number.." "..confer_num

  api:executeString(dial_str)

  --freeswitch.consoleLog("ERR","the hangupCause is:"..fail_cause.."\n")

else

  --freeswitch.consoleLog("ERR","the dest_host is:"..dest_host.."\n")

  local dial_str = "originate {origination_caller_id_number="..src_exten.."}sofia/external/"..dialed_number.."@"..dest_host..":5080 "..confer_num

  api:executeString(dial_str)

  --freeswitch.consoleLog("ERR","the dest_host is:"..dial_str.."\n")

end


你可能感兴趣的:(lua,freeswitch)