Imports System
Imports SendSMS.AQLSoapGateway
Imports System.Web.Services.Protocols
Module Module1
    Public Sub Main()
        ' AutoIncrement done with http://autobuildversion.codeplex.com
        'Display Info
        Console.WriteLine(vbCrLf & _
                "SendSMS.exe - SMS Sending Utility, using the AQL SMS Gateway. Version " & My.Application.Info.Version.ToString & vbCrLf & _
                "David Wallis, 2011" & vbCrLf)
        'Define Usage Message
        Dim strUsageMsg As String = vbCrLf & _
                "Usage: SendSMS.exe " & vbCrLf & vbCrLf & _
                "Available Options: " & vbCrLf & vbCrLf & _
                "/Username:AQLUserName" & vbCrLf & _
                "/Password:AQLPassword" & vbCrLf & _
                "/DestinationNumber:PhoneNumber" & vbCrLf & _
                "/Originator:Originator" & vbCrLf & _
                "/Message:Message" & vbCrLf
        Dim strDestinationNumber As String = "", strUserName As String = "", strPassword As String = "", strOriginator As String = "", strMessage As String = ""
        ' Match Command Line Arguments with variables
        For Each arg As String In My.Application.CommandLineArgs
            If arg.ToLower.StartsWith("/destinationnumber:") Then strDestinationNumber = arg.Remove(0, 19)
            If arg.ToLower.StartsWith("/username:") Then strUserName = arg.Remove(0, 10)
            If arg.ToLower.StartsWith("/password:") Then strPassword = arg.Remove(0, 10)
            If arg.ToLower.StartsWith("/originator:") Then strOriginator = arg.Remove(0, 12)
            If arg.ToLower.StartsWith("/message:") Then strMessage = arg.Remove(0, 9)
        Next
        ' Exit out if options arent passed, otherwise proceed and initalise API connection.
        If Len(strDestinationNumber) = 0 Or Len(strUserName) = 0 Or Len(strPassword) = 0 Or Len(strOriginator) = 0 Or Len(strMessage) = 0 Then
            Console.WriteLine(strUsageMsg & vbCrLf & vbCrLf & "Error:" & vbCrLf & "All parameters are mandatory.")
            Environment.ExitCode = 1
            Exit Sub
        End If
        Dim cpLatestBrief = New SendSmsService()
        ' Define destination number(s) from 
        ' Create an array to pass for the destination number(s) - this code supports one number for simplicity
        Dim destarr As String() = New String(0) {}
        If strDestinationNumber.Substring(0, 1) = 0 Then
            ' Number begins 0 - strip 0 and add country code (UK Specific) - Not sure if this is required, but the
            ' example code specified the number in the 447733333333 format, ie drop the leading 0 and shove in 44. 
            destarr(0) = "44" & strDestinationNumber.Substring(1, strDestinationNumber.Length - 1)
        End If
        ' create authentication object with AQL Username and Password
        cpLatestBrief.authValue = New auth()
        cpLatestBrief.authValue.username = strUserName
        cpLatestBrief.authValue.password = strPassword
        Dim creditsused As String
        Dim outdesr As String
        Dim dt As System.DateTime = DateTime.Now
        Dim cbe As SendSMS.AQLSoapGateway.callbackelement = New callbackelement()
        cbe.callbackurl = "http://url.com"
        cbe.callbacktype = SendSMS.AQLSoapGateway.callbacktypeoptions.HTTPGET
        If cpLatestBrief IsNot Nothing Then
            Try
                cpLatestBrief.SoapSendSms(destarr, strOriginator, strMessage, SendSMS.AQLSoapGateway.mtype.text, "2", dt, _
                 False, cbe, creditsused, outdesr)
                Console.WriteLine("Message Sent, " & creditsused & " credits used.")
            Catch e As SoapHeaderException
                Console.WriteLine("Name Entry Error" & vbCrLf & e.Message)
            Catch e As SoapException
                Dim node As System.Xml.XmlNode = e.Detail
                Dim errorcode As String = e.Detail.FirstChild.InnerText
                Dim errortext As String = e.Detail.FirstChild.NextSibling.InnerText
                If errorcode = "DESTERROR-INVALIDNUMBERS" Then
                    Console.WriteLine("Name Entry Error" & vbCrLf & e.Message)
                ElseIf errorcode = "MESSAGE-NOTSUPPLIED" Then
                    Console.WriteLine("Name Entry Error" & vbCrLf & e.Message)
                Else
                    Console.WriteLine("Error:" & vbCrLf & "Error Code " & errorcode & vbCrLf & e.Message & "  " & errortext)
                End If
            End Try
            Return
        Else
            Return
        End If
    End Sub
End Module
 
I try to specialise in doing the out of the ordinary stuff (A Challenge!) - And generally making life as easy as possible using any of the technologies within reach without having to re-invent the wheel where possible! Technologies and products can include -> .NET, VBS, Powershell, DSC, Systems Center, NetApp, VMWare, Windows Server, Linux, Python, Microcontrollers and others!
Monday, 19 December 2011
Sending SMS via AQL's SOAP gateway using vb.net
I'm working on a project currently and a requirement I have is for Systems Center Operations Manager to send certain alerts as an SMS message, SCOM has this functionality built in but requires a GSM modem connected to the RMS in order to do this.
We currently use AQL to provide an SMS gateway service for another project so this looked like a good starting point as we were already paying for it.
A quick email to AQL resulted in an apology from AQL saying they didn't have any SDK samples and would add it to their list, but they did send some sample code in C# which I was able to knock into some vb.net code (C# isn't my strong point - I could argue the same about vb.net!)
Anyway the following should do the trick if you need it (You need to add a web service reference to the aql gateway http://gw.aql.com/soap/sendservice.php?WSDL - Web Service, Not a service Reference, Click Advanced under service reference and name it AQLSoapGateway. 
At the moment this will just build you a command line utility that can be used for sending SMS, I'll cover getting SCOM to utilise this later.
Subscribe to:
Comments (Atom)
 
