Thursday, April 06, 2006

Sending an Instant Message via Script using LCS and Communicator Web Access (Ajax)

Its been some time since I had a chance to play around with any LCS code I saw the release of the AJAX SDK so I decided to have a bit of read and see if I could put together a few bits of code. If you’re comfortable writing WebDAV code you’ll feel at home with Ajax its just a matter of posting and getting data via a Http control. Starting real easy I thought I’d try a simple VBS script to send a message from the command line.

The script itself is fairly basic it uses NTLM authentication to first logon to a LCS server using the Logon URL. After it logs on successfully you need to get the cookie for the session which is used when calling any further functions. To send a message the StartIm method is used which basically tries to start an IMSession along with sending a message. The last section of code then calls the logoff URL. Before you run the script you need to configure the hardcoded variables in the config section basically you need to put in the name of the LCS CWA server
Servername = "servername.domain.com"

The Sip address of the user that is going to send the message
LogonSipAddress = user@domain.com
The username and password of a user that has rights to logon on to the sending SIP Adreess
Username = "domain\username"
password = "password"

The script is designed to be run from the command-line with 2 command line parameters the first is the user’s address you want to send to and the second is the message you want to send so to run the script use something like

cscript lcsSendmsg.vbs user@domain.com. "Hello world how are you doing”

I’ve put a download of the script here the script itself look like

' ----Config----
Toaddress = wscript.arguments(0)
Message = wscript.arguments(1)
Servername = "servername.domain.com"
LogonSipAddress = "user@domain.com"
Username = "domain\username"
password = "password"
' ----End Config----
set req = createobject("microsoft.xmlhttp")
' ----Logon
Logonstr = "https://" & Servername & "/iwa/logon.html?uri=" & LogonSipAddress & "&signinas=1&language=en&epid="
req.Open "GET",Logonstr , False, Username ,password
req.send
wscript.echo req.status
reqhedrarry = split(req.GetAllResponseHeaders(), vbCrLf,-1,1)
for c = lbound(reqhedrarry) to ubound(reqhedrarry)
if instr(lcase(reqhedrarry(c)),"set-cookie:") then reqsessionID = right(reqhedrarry(c),len(reqhedrarry(c))-12)
next
chk = left(reqsessionID,36)
' ---Send Message---
Sendmsgcmd = "https://" & Servername & "/cwa/MainCommandHandler.ashx?Ck=" & chk
Messagestr = "cmdPkg=1,LcwStartImRequest,sip:" & ToAddress & "," & Message & ",X-MMS-IM-Format: FN=Arial%253B EF=%253B CO=000000%253B CS=1%253B PF=00"
req.open "POST", Sendmsgcmd, False, Username ,password
req.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
req.setRequestHeader "Cookie:", reqsessionID
req.send Messagestr
wscript.echo req.status
' ---Logoff---
logoffstr = "https://" & Servername &"/cwa/SignoutHandler.ashx?Ck=" & chk
req.Open "GET",logoffstr , False, Username ,password
req.setRequestHeader "Cookie:", reqsessionID
req.send
wscript.echo req.status