“Elyza”, sister to “Profiles for Lync”, is a client-side app I’ve built using the Lync SDK.
Elyza started life as a means for me to test Federation when I deploy a new Lync, and also as an auto-responder to help me present demos and deliver user-training without needing to annoy some poor colleague back in the office.
Elyza hooks into the running Lync client instance on your PC and responds to incoming IMs. When sent a suitably formatted “/” command, Elyza will change status, add or remove you as a Contact, update her personal note or even tell you the time. (Send “/?” for a list of the available commands).
With that code largely working, my partner suggested incorporating “ELIZA”, a text-based “chatterbot” that we both encountered in our high school years. I remember chatting with ELIZA on the solitary computer that the school possessed – an Apple ][.
I was lucky enough to stumble across a java version written by Charles Hayden, and he kindly consented to me re-using and converting it to C# for this application. Charles’ version of the script is a complete and faithful implementation of Weizenbaum’s original, and I’ve used the same here. The script is however resident in a plain text file in the Elyza directory, so you’re free to extend the grammar to move it with the times, or perhaps even translate it into other languages!
Download
Elyza 2013 (v13.1.0.40 – 10th May 2014) can be downloaded from here.
Elyza for Lync 2010 (v1.0.0.39 – August 2012) can be downloaded from the TechNet Gallery site here.
Uses / Application
Here are some examples of features you can now demo single-handedly, and the steps to follow:
Tag For Status Change Alerts
- Open Lync and find the Elyza user
- Right-click and “Tag For Status Change Alerts”
- Send /aw to change to Away Status
- Sent /av to change to Available – you’ll receive a toast pop to show they’ve ‘returned’
- Click “Untag” on the toast to untag this user
Add Me As A Contact
- Check that the Elyza user isn’t already in your Lync Contact List. (Right-click and “Remove from Contacts List” if they are)
- Send /rem to ensure you’re removed from the Elyza user’s Contacts
- Send /add to have the Elyza user add you as a Contact
- You’ll receive a pop-up to advise of this, giving you the option to set a privacy level and to add them in return. (If this doesn’t happen, check you have “Notify me when someone adds me to his or her contact list” enabled in Lync Options / Alerts)
Change Privacy Relationship
- Open Lync and find the Elyza user. Check to see if any status information is shown under their name. It might be blank or show the name of their Lync location (LIS), their Outlook OOF message, or a Personal Note
- Send /pn “PN test” to set a Personal Note. Is this visible to you in Lync?
- Send /fri to change yourself to a Friend. The Personal Note should be visible now (if it wasn’t already)
- Send /ext to change yourself to an External user. The PN should disappear
- Send /blo to change yourself to Blocked. All information (including Status & photo should disappear)
- Experiment with other Privacy Relationships
- Send /fri to restore visibility
Change Message Subject
- Send /su “New Subject”. Note that the title bar of the IM changes to show this. (This test is not applicable if you’re sending the IM from OWA or the Mobile client)
- Send /su “” to reset the Subject. The subject will be replaced by the name of the Elyza user
Remote Control Syntax
I’ve implemented the following remote-control commands:
———————————-
/avail – Change status to Available
/away – Change status to Away
/brb – Change status to Be Right Back
/busy – Change status to Busy
/dnd – Change status to DND
/inact – Change status to Inactive
/off – Change status to Appear Offline (subject to client policy)
———————————-
/add – Add me as a Contact
/rem – Remove me as a Contact
———————————-
/fri – Set our privacy relationship as “friends”
/wor – Set our privacy relationship as “workgroup”
/col – Set our privacy relationship as “colleague”
/ext – Set our privacy relationship as “external”
/blo – Set our privacy relationship as “blocked”
———————————-
/pn “Text” – Sets the text as the Personal Note
/pn (followed by no text or empty string) – Clears the Personal Note
/su “Text” – Sets the text as the message Subject
/su (followed by no text or empty string) – Clears the message Subject
———————————-
/ty – Shows the “is typing a message…” message
/ti – Reports the local time
/help – Display this list of available commands
/ver – Display version details
Note that:
- for the status change commands to all be correctly shown to the far end, the machine running Elyza needs to be in an ‘active’ state. I use a “Mouse Jiggler” for this purpose
- to “Appear Offline” you need to have that feature enabled in your Client Policy
- “/add” will only pop a box to you if you’ve selected Tools / Options / Alerts / “Notify me when someone adds me to his or her contact list” – and they’re not already in your contact list!
What about OCS?
I’ve not tried Elyza with OCS, but armed with the registry key that lets you register the Lync client against an OCS Front-End, I can’t see why it wouldn’t work.
Lync 2013: Version 13.1.0.41 – 6th February 2016
Change Log
Minor Update Only:
Refreshed the installer app, back to Visual Studio from InstallShield Express
Added the build number to the .msi filename
Known issue: You’ll need to uninstall 13.1.0.40 before you can install this version. (Sorry)
Lync 2013: Version 13.1.0.40 – 10th May 2014
Change Log
Bugfix: Elyza not responsive
Under Windows 8.x, Elyza would sometimes not respond to IMs. (The script file could not be found). I’ve added an absolute path reference to fix this, and she’ll now respond with a text message to tell you if the script’s missing.
Bugfix: Elyza slow to respond to initial IM
Lync 2013 has changed the way an IM is initiated. I’ve updated the code to automatically “.Accept()” it as soon as a new conversation is added.
Bugfix: Readme file can’t be found
Under Windows 8.x Elyza would sometimes advise “the readme file isn’t where it’s meant to be”. I’ve added an absolute path reference to fix this.
Code-signing
The installer is now signed to mark the app’s authenticity. With thanks to DigiCert for the code-signing certificate.
Harder to exit
Elyza is now harder to exit accidentally. The only exit paths are from the File/Exit menu, and right-click from the tray. All other options, including the Close button (“X”) and Alt-F4 will minimise the app. (The right-click menu in the tray is new in this release).
Already running
If you run Elyza and she’s already running in the background, the running instance will now pop to the foreground. If the other instance is in the tray, it will display an “Another instance of Elyza is already running” box. It will also report this error if Elyza is running in another user session on this machine.
Retains site settings when upgrading
Existing settings are retained when upgrading from earlier versions of Elyza.
Latest Lync 2013 DLLs
This version of Elyza is built with the latest (March 2014) DLLs, v15.0.4454.1509.
Changed File Paths
My utils have previously installed to a folder of their own directly under “C:\Program Files (x86)” and in the “Microsoft Lync” program group. With this update I’m consolidating them to a new folder “C:\Program Files (x86)\greiginsydney\”, and a new program group called “Lync Utils”.
Revised version numbering
To help keep track of the different versions I’ve updated the version numbering to reflect the version of Lync the app is built for.
Known Issues in this Release
Font and colour
From the API I can’t determine the colour and font the Elyza user has chosen for their IMs (Tools / Options / General / Change Font), and I can only inject plain text or preformatted HTML into the message flow. Accordingly, I needed to add a means for you to set a font for Elyza that will to align (or contrast?) with the font, colour and size of your normal Lync IMs. This box can be found under File / Set Font.
Log text can’t be scraped
You can’t select and scrape the log text to the clipboard.
Participants sometimes remain in the Active Conversations list
At the completion of their IM session Elyza occasionally neglects to remove a participant’s name from the Active Conversations list. I do however have a reliable count of active conversations, and every time the conversation count gets to zero I clear all/any Active Participants, which helps mask this error.
Lync 2010 version: v1.0.0.39 – August 2012
Known Issues in this Release
Font and colour
From the API I can’t determine the colour and font the Elyza user has chosen for their IMs (Tools / Options / General / Change Font), and I can only inject plain text or preformatted HTML into the message flow. Accordingly, I needed to add a means for you to set a font for Elyza that will to align (or contrast?) with the font, colour and size of your normal Lync IMs. This box can be found under File / Set Font.
Lync 2013 Preview (15.0.4128.1014)
The “/su” command won’t change the subject of the IM if the Elyza user is using the Lync 2013 Preview client. I don’t know if this is a bug in the Preview, changed functionality in this release, or a change in the API that I’m not correctly handling. I’ll check again in the RC/RTM timeframe.
Log text can’t be scraped
You can’t select and scrape the log text to the clipboard. Perhaps in the next version. (Sorry).
Participants sometimes remain in the Active Conversations list
At the completion of their IM session Elyza occasionally neglects to remove a participant’s name from the Active Conversations list. I do however have a reliable count of active conversations, and every time the conversation count gets to zero I clear all/any Active Participants, which helps mask this error.
Elyza 2013 (v13.1.0.41 – 6th Feb 2016) can be downloaded from here.
Elyza for Lync 2010 (v1.0.0.39 – August 2012) can be downloaded from the TechNet Gallery site here.
Greig;
Great job on Elyza, I just installed it and was reading the notes on your site when a colleague IM’d me and before I realised what was happening she started responding to the Elyza replies, I couldn’t believe how effective it was.
One thought we had though was to use Elyza to pre-filter calls to our Service Desk, Elyza could look up answers to pre-known problems of the ‘How do I unlock my account?’ variety and respond with article links, she could also know how to look up status messages to answer calls along the lines of ‘Is the Exchange Server working OK?’
Have you thought of open sourcing the code because I bet if we can think of these uses in 20 minutes there must be zillions of other applications?
Once again, thanks;
Dominic Hyland
Hi Dominic,
Yes, I fell into that same trap while testing it (her). Colleagues would pop up unexpectedly and suddenly find themselves being grilled.
I don’t need to publish the code to for you to turn Elyza into a totally different ‘bot – you can do that already by just editing the “Elyza-script.txt” file in the %ProgramFiles(x86)%\Elyza directory to add new words and phrases to her “vocabulary”! Try it and see! It’s easy to add simple rules so that she’ll respond with canned messages when certain trigger words are used in an incoming message. If you want to be even more clever, the structure supports that too. Have a read of the description that Charles wrote (as referenced in the Help About).
G.
Hi, help!!! does not work with Russian words
Hi,
It seems removed from Microsoft website. Please provide alternative download link.
Hi Mohammad,
I’ve just moved the installer for v13.0.1.41 to my OneDrive and updated the download link.
What’s your interest in it: the remote control capability, or the rudimentary AI component?
– Greig.