Sending SIMPLE (SIP) message from lua script to registered extension in FusionPBX

Status
Not open for further replies.

svaba1012

New Member
Nov 13, 2023
6
0
1
24

Setting FusionPBX for storing messages for unregistered users and pushing messages when they register​

I am using FusionPBX as SIP server in LAN on IP adress 10.1.1.101 to route sip calls and for instant messaging for softphones. I've already enabled sms module to enable instant messaging and everything works fine.

I've come up with idea to set FusionPBX to store all incoming messages for unregistered users (extensions) in local database and when that user register to read those messages from database and send it to that user. In that way I'll upgrade functionality to be able to accept all messages no matter of registration status.

I divided idea in 5 tasks:

  • check if recipient extension is registered
  • if unregistered store incoming messages in sqlite db
  • trigger an event when user is registering is search sqlite db for messages sent to him
  • send all messages that are read from db and are sent for that user
  • delete those messages from db
Everything works fine except for the part when the messages are being sent.

Here is the code:​

NOT WORKING​

local event = freeswitch.Event("CUSTOM", "SMS::SEND_MESSAGE")
event:addHeader("proto", "sip")
event:addHeader("dest_proto", "sip")
event:addHeader("from" , row.from_user .. "@10.1.1.101")
event:addHeader("to" , row.to_user .. "@10.1.1.101")
event:addHeader("subject", "sip:" ..row.to_user .. "@10.1.1.101")
event:addHeader("type", "text_plain")
event:addHeader("hint", "the hint")
event:addHeader("sip_prifile", "internal")
event:addBody(row.data)
event:fire()

Everything I modified in FusionPBX​

Firstly I modified chatplan.xml adding this lines under <extension name=demo></extension>:​

<condition field='${sofia_contact ${to}}' expression="^error">
<action application="lua" data="save_msg.lua ${_body}"/>
</condition>

In this modified chatplan.xml is set to call save_msg.lua every time message is sent to unregistered user.

Next I made lua script save_msg.lua which is called from chatplan.xml:​

local from = message:getHeader("from_user")
local to = message:getHeader("to_user")
local timestamp = message:getHeader("Event-Date-Timestamp")
local msg = argv[1]

local dbh = freeswitch.Dbh("sqlite://mydb")
assert(dbh:connected())

dbh:query("INSERT INTO test_table VALUES(" .. to .. ", " .. from .. ", " .. timestamp .. ", " .. "msg" .. ")")

dbh:release()

In this script SIMPLE message headers and body are written to sqlite db.

Next I modified lua.conf.xml adding this lines under :​

<hook event="CUSTOM" subclass="sofia::register" script="usr/share/freeswitch/scripts/send_undelivered_msgs.lua"></hook>

In this modified lua.conf.xml is set to call send_undelivered_msgs.lua every time user registers.

Lastly I made lua script send_undelivered_msg.lua which is called when user register, which is set in lua.conf.xml:​

local dbh = freeswitch.Dbh("sqlite://mydb")
assert(dbh:connected())

dbh:query("SELECT * FROM test_table", function(row)

local event = freeswitch.Event("CUSTOM", "SMS::SEND_MESSAGE")
event:addHeader("proto", "sip")
event:addHeader("dest_proto", "sip")
event:addHeader("from" , row.from_user .. "@10.1.1.101")
event:addHeader("to" , row.to_user .. "@10.1.1.101")
event:addHeader("subject", "sip:" ..row.to_user .. "@10.1.1.101")
event:addHeader("type", "text_plain")
event:addHeader("hint", "the hint")
event:addHeader("sip_prifile", "internal")
event:addBody(row.data)
event:fire()

end)

dbh:query("DELETE FROM test_table")
dbh:release()



In this script messages are read from db, sent to appropriate user (which doesn't work) and after that deleted from database.

There is also one thing that I haven't figured it out yet and that is how to pass/access extension of user that is currently registering in send_undelivered_msg.lua, so currently send_undelivered_msg.lua is set to send all msg from database to user(which still doesn't work).

I hope someone can help because this is the only part I miss.
 

agree

Member
Aug 26, 2018
135
24
18
You seem to have a typo in the SMS::SEND_MESSAGE event "sip_prifile" instead of "sip_profile"
 
Status
Not open for further replies.