Skip to main content
March 6, 2009
Question

sms status

  • March 6, 2009
  • 9 replies
  • 10242 views
Hi i have setup the sms utility and its working well sending sms, i now need to get the status of the sms back into my system,

i am just using the main.cfc but i am not sure what to do here?

all i want to do is have a sql stored proc update my database by passing in the Status and the id number from the sent sms.

<cffunction name="onBuddyStatus">
<cfargument name="CFevent" type="struct" required="YES"/>
<cfstoredproc procedure="spUpdateStaus" datasource="#datasource#">
<cfprocparam type="In" cfsqltype="cf_sql_varchar" dbvarname="ReferenceNumber" value="#ReferenceNumber#" null="No">
<cfprocparam type="In" cfsqltype="cf_sql_varchar" dbvarname="Status" value="#Status#" null="No">
</cfstoredproc>
</cffunction>
This topic has been closed for replies.

9 replies

BKBK
Community Expert
Community Expert
March 21, 2009
Myself? Oops, I see the double-meaning just now. Oh, and thanks, Paul, for the guidance.

BKBK
Community Expert
Community Expert
March 21, 2009
I got it to work. That means Kel45 and I have been missing some steps.

Here then are the steps I followed.

1) Save the following as the file C:\Coldfusion8\sms_gw\smsListener.cfc
======================================================

<cfcomponent>
<cffunction name="onIncomingMessage">
<cfargument name="cfEvent" required="yes" type="struct">

<cfset var msg = arguments.cfEvent.data.message>
<cflog file="smsTestRecord" text="sms log message">
<!--- Use actual e-mail addresses --->
<cfmail to="email1@domain1" from="email2@domain2" subject="SMS gateway test">
<cfoutput>#msg#</cfoutput>
</cfmail>
<cfreturn>
</cffunction>
</cfcomponent>

2) Save the following as the file C:\Coldfusion8\sms_gw\config\smsConfig.cfg
==========================================================

#
# SMSGateway configuration file
# Test server config
#

# This is the IP address of SMSC
ip-address=127.0.0.1

# Port to bind to
port=7901

# Your system id
system-id=cf

# Your password
password=cf

# The source address for this client
source-ton=1
source-npi=1
# This is a made-up address
source-address=5551213

# The address range this smpp client will serve
# Generally the same as your source address
addr-ton=1
addr-npi=1
address-range=5551213

# Message sending rate; how many messages per second is the
# gateway allowed to send to your service provider.
# This can be a decimal (i.e. 0.1). 0 is unlimited.
# The default is 100 messages per second.
message-rate=100.0

# The mode of the gateway; Either synchronous or asynchronous
# In synchronous mode the gateway will wait for the response
# from the server when sending a message and the SendGatewayMessage()
# CFML function will return the SMS messageID of the message
# or an empty string if their is an error. In asynchronous mode,
# the gateway will not wait for a response and the SMS messageID
# will NOT be returned from SendGatewayMessage().
# The default is synchronous.
mode=synchronous

# Should the gateway retry delivery on Network Errors?
# If a network error occurs while trying to deliver a message,
# should the message be queued for delivery when the gateway
# is able to re-bind to the SMSC. This is useful if the gateway
# is in asynchronous mode, where no error status is returned from
# the CFML SendGatewayMessage() function.
# The default is no.
network-retry=no

# Should the gateway retry delievery on Transient Errors?
# If an error is returned from the SMSC that indicates
# the message may be able to be delivered in the future,
# should the gateway attemp to resend send the message?
# This is useful if the gateway is in asynchronous mode,
# where no error status is returned from the CFML
# SendGatewayMessage() function.
# The default is no.
transient-retry=no

##################################################
# Everything below here is usually OK.
##################################################

# The function in the Gateway CFC which the is called
# when an incoming message arrives.
#
cfc-method=onIncomingMessage

# The default destination address info
destination-ton=1
destination-npi=1
# You can't have a default destination
# destination-address=


# The service type can be empty or one of
# the following values:
# CMT, CPT, VMN, VMA, WAP or USSD
# service-type=

# From the spec:
# Identifies the type of system requesting the bind.
# This may enable SMSC responses which are
# particular to a given type of ESME.
system-type=SMPP

# The receive timeout is a timeout for trying to receive a message
# from the SMSC. If you want go to infinite wait until a PDU
# is received, set the receive-timeout to -1.
# The value is in seconds. The default is 30 seconds.
receive-timeout=10

# The ping interval is how often the SMS Gateway will send an
# EnquireLink PDU to the server to verify the health of the connection.
# The value is in seconds. The default is 60 seconds.
ping-interval=60

# The number of connection attempts the gateway will make until it gives up.
# Use -1 to retry until connected. The default is -1 (try forever).
retries=-1

# Connection retry interval; how long to wait between connection attemps.
# The value is in seconds. The default is 10 seconds.
retry-interval=10


3) On the Gateway Settings page in the Administrator, start the SMS Test Server.
=============================================================

4) On the Gateway Instances page in the Administrator, add the following new instance
=================================================================

Gateway ID: smsTest
Gateway Type: SMS - Handles SMS text messaging
CFC Path: C:\Coldfusion8\sms_gw\smsListener.cfc
Configuration File: C:\Coldfusion8\sms_gw\config\smsConfig.cfg
Startup Mode: Automatic

5) Start the SMS instance.
=====================

If necessary, press the Refresh button after a few seconds to go from 'Starting' to 'Running'.

6) In C:\Coldfusion8\bin, double-click on SMSClient.bat to start the client
=======================================================

7) Click on the Connect button
========================

8) Enter the value 5551213 in the field 'Send SMS to:'
=========================================

That is the value in the configuration file.

9) Enter some text (e.g. Eureka! It works!) in the message field. Press Send.
=========================================================

10) Check the email account and Coldfusion log directory to confirm it worked
=========================================================




BKBK
Community Expert
Community Expert
March 21, 2009
PaulH,

No need. The first time you said it works, I took it for granted it works. I've been busy debugging myself.
Inspiring
March 18, 2009
BKBK wrote:
> PaulH wrote:
> huh?
>
> Have you succeeded in sending mail by implementing <cfmail> within the listener CFC of the SMS gateway? I haven't. If you have, could please show us the code you used.

yup, works fine on cf8, no rocket science here.

<cffunction name="onIncomingMessage" output="no">
<cfargument name="CFEvent" type="struct" required="yes">
<!--- Get the message --->
<cfset data=cfevent.DATA>
<cfset message="#data.message#">
<!--- where did it come from? --->
<cfset orig="#CFEvent.originatorID#">
<cfset retValue = structNew()>
<cfset retValue.command = "submit">
<cfset retValue.sourceAddress = arguments.CFEVENT.gatewayid>
<cfset retValue.destAddress = arguments.CFEVENT.originatorid>
<cfset retValue.shortMessage = "echo: " & message>
<cflog file="smsTestCrapola" text="going to send some email now...">
<cfmail to="paul@sustainableGIS.com" from="paul@sustainableGIS.com" subject="SMS
gateway test">
just a test: #retValue#
</cfmail>
<cfreturn retValue>
</cffunction>

March 18, 2009
Hi i have tested your code exactly but i still get no email i do however get a logfile entry

so i tried doing this
<cflog file="smsTestCraig" text="#retValue#">
but then i get no entry?

how can i test adding the retValue to the logfile?
BKBK
Community Expert
Community Expert
March 18, 2009
PaulH wrote:
huh?

Have you succeeded in sending mail by implementing <cfmail> within the listener CFC of the SMS gateway? I haven't. If you have, could please show us the code you used.


Inspiring
March 17, 2009
BKBK wrote:
> Come to think of it, there is no reason for you to be sending email within an
> SMS gateway. In fact, if I remember well, previous postings have suggested it
> might not even be possible to do so. I am looking into this and asking around.

huh?
BKBK
Community Expert
Community Expert
March 17, 2009
Come to think of it, there is no reason for you to be sending email within an SMS gateway. In fact, if I remember well, previous postings have suggested it might not even be possible to do so. I am looking into this and asking around.

Have a look at Kevin Schmidt's article, Sending messages through ColdFusion SMS gateways. It includes code for a complete working implementation of the SMS gateway.

March 17, 2009
Hi Thanks, but that is the tutorial i used to setup this up!!

i can send sms find using what i have, its the sms status i need to get via the onIncomingMessage method, but i cannot get this working, and in that example it is not clear what is required for the sms status
BKBK
Community Expert
Community Expert
March 11, 2009
Have you checked that the following runs on an ordinary CFM page?

<cfmail to = "email" type="html" from = "email" subject = "income test"
username = "email" password = "email" server = "email" port = "25">
test message
</cfmail>


March 13, 2009
yes the cfmail does work i use it all over the site

so how does the actual status come back in do i have to request it from the smc?

i am currently sending like this
<cfscript>
/* Create a structure that contains the message. */
msg = structNew();
msg.command = "submit";
msg.destAddress = "447777777777";
msg.sourceAddress = "+44777777777";
msg.shortMessage = form.SMSMessage;

ret = sendGatewayMessage("SMS Menu App - 5551212", msg);
</cfscript>
March 16, 2009
Hi any chance of some help on this, i really need this working asap,

i have added the param
msg.registeredDelivery = 1;

but i still am getting no response back any ideas?
BKBK
Community Expert
Community Expert
March 10, 2009
Yes, the stored procedure will run when you put it in onIncomingMessage. That will happen automatically. The list of variables that come in automatically are those in the SMS cfevent structure. You have to find a way to pass any variables not in the list.


March 11, 2009
ok thank you, just been testing this with cfmail but i dont get an email, i am just using the main.cfc which i have altered the onIncomingMessage just to send me a email as below, do i have to specify some when sending the sms that i want message status updates?


<cffunction name="onIncomingMessage>
<cfargument name="CFEvent" type="struct" required="yes">
<!--- Get the message --->
<cfset data=cfevent.DATA>
<cfset message="#data.message#">
<!--- send the return message back --->

<cfmail to = "email" type="html" from = "email" subject = "income test"
username = "email" password = "email" server = "email" port = "25">
<cfdump var="#data#">
</cfmail>
<cfreturn retValue>
</cffunction>
BKBK
Community Expert
Community Expert
March 7, 2009
OnBuddyStatus is for IM. For SMS, use onIncomingMessage. That is the name Coldfusion expects. However, if you insist on onBuddyStatus then you have to set the value of cfc-method in your SMS configuration file to onBuddyStatus.

March 10, 2009
ok thanks so can i just add my stored proc to the onIncomingMessage function and that will automaically pic up any sms statuses that come in?