I was amazed how Colayer had a virtual reception. Colayer is developing a collaboration product which work a bit like Google Wave for realtime collaboration. Colayers products adds more context to the conversation like if it is a question you are asking. When the conversation has more meta data, it is possible to make better selection of data.
By using a virtual reception it is possible to contact a person in Colayer with out knowing their address. I thought that it could also be possible to use a Wave robot to front your organization. It could be to find the relevant persons to get in contact with.
I implement a demo on how it could be possible to use a Wave robot for this. The result is published in this video.x
The demo show how some simple character based search is working to identify which results to show. When the user types something, which should like an employee or group name the robot returns the list of possible employees/groups. The user can then select which user to connect to. The robot connects the user to that employee by adding him to the Wave. After connecting the user to the selected employee the robot goes to standby.
There is a lot of possible improvements. The application should be more clear on when it can add any users. I have implemented the Soundex Java library for string comparison, but are not clear on who to implement it best and what the thresholds should be.
Also it would make a lot of sense to connect the data to the companies directory or Google Apps hosted application. If the user has Wave for his domain this would make a lot of sense, since they must have all the informations hire. It is fairly easy to extract data from the company directory and use this data together with the robot and redirect the user to the correct account. To have the full use it is required that you are using the same usernames on both wave and email.
Speaking of Wave for your domain, can you also create robots on your domain. So you have welcome@masteringwave.com or something similar as the robot you are connecting to.
Do you think this would be a solution, with some development could it be implemented in your organization? Why would it make sense for you to have such a solution?
Inspired by offlineblog’s blog about Live blogging and the WordPress plugins like described on my blog, and at offlineblog and the bloggy robot which can publish to blogger.com. I thought this could also be possible to perform the same with a WordPress robot.
The solution simply works by adding the robot wp-bot@appspot.com to a Wave. Then it publishes your wave to the site as an embedded wave to WordPress. With this you get a permalink to the blog, where the content is hosted. I was unable to using the API’s that Google is using for displaying that the content is shared. If you know how to use please let me know.
I found the wordpress-java library to help with creating the XMLRPC code, which I was unable to use. With this library it is pretty simple to create a blog with some content. And since the content I’m posting just is wave id=’waveID’ bgcolor=’#ffffff’, it is pretty easy to craft.
The robot in action works the following way.
The code looks like the following.
public class WPRobotServlet extends AbstractRobotServlet {
private String ownname = "wp-bot@appspot.com";
@Override
public void processEvents(RobotMessageBundle bundle) {
Wavelet wavelet = bundle.getWavelet();
// when the Robot is added publish to the robot
if (bundle.wasSelfAdded()) {
Blip blip = wavelet.appendBlip();
TextView textView = blip.getDocument();
textView.append(ownname+ " added version " +this.getVersion() +" \n");
textView.appendMarkup("\n <a href=\"http://masteringwave.com/\">MasteringWave</a> <br />");
textView.append("\n");
String rootText = wavelet.getRootBlip().getDocument().getText();
// find the first line, which will be the title to the blog
String firstLine ;
if(rootText.indexOf("\n")>0){
firstLine = rootText.substring(0,rootText.indexOf("\n"));
}else{
firstLine = rootText;
}
textView.append( uploadWave(firstLine, wavelet.getWaveId()));
}
// XML-RPC method
String sXmlRpcMethod = "metaWeblog.newPost";
// the content of the blog
String sContent = "[wave id=\""+waveID+"\" bgcolor=\"#ffffff\"]";
// Try block to create the upload
try
{
Wordpress wp = new Wordpress(sUsername, sPassword, sXmlRpcURL);
Page newPost = new Page();
newPost.setTitle(title);
newPost.setDescription(sContent);
newPost.setWp_author(sUsername);
String resultId = wp.newPost(newPost, "draft");
return wp.getPost(Integer.parseInt(resultId)).getPermaLink();
}
catch( Exception e )
{
return e.toString();
}
}
}
I created the SAP Enterprise service robot, which is described in the blog. I wanted to give you an explanation on how this robot was implemented.
I have therefore created a 5 minutes screen capture, showing what is going on and what the moveable parts are. Probably 5 minutes is a little too short, but if you have anything, which you want me to explain, I will do it. I hope you find it interesting.
I’m not proud of using crafted XML documents, instead of sending SOAP documents. But it was the only way that I could find to call SOAP web services from Appengine. If you have any suggestions to how I can avoid this, please let me know.
Some weeks ago I made a demo of how SAP ES could be reached from a Google Wave. This was just to show it was possible to call ES. That demo did not help in any workflow; it just showed some data to the user. I have now worked with getting a better idea for coming up with a demo, which shows how wave can be leveraged to implement a better solution. I need this demo for my Virtual Community Day presentation on Thursday the 24 of September at 16 CET.
This demo is about creating services requests for a customer. In the scenario the customer adds the robot, which displays all the equipment items the customer has. The customer then selects the item which is broken, and creates a service request on this item. When the request is created using another enterprise service, a technician is added to the wave to help the customer solve the problem. This will allow the participants to write to each other showing how things work out.
An extension of this demo, would obvious be a place where the two participants could change the status. So the task would be completed, when they have solved the problem.
This demo is also created by SAP as a Composite application (CE), but using CE will only create the request. It will not allow the participants to help fix the problem in just one place. I believe it is in this place the Wave Robots has something value adding compared to normal web applications. There still need to be some development to get a more compelling look and feel. I’m not sure what is possible to do with styling and creating tables but the view should be styled before an Enterprise ready application is created.
How this was done
As with the last demo, I have not been able to run Axis2 on Google App-engine, where robots currently have to be implemented. It seems like Axis2 is using raw sockets, which is not allowed on Appengine. I have therefore created SOAP-XML in hand and just submitted them via the URL connection. This XML I got by using SOAPUI, which is an excellent SOAP client for testing services. By using SOAPUI I could craft and test XML calls before spending time on implementing them in Java. It is also possible to use the Webservice test tool in connected to the Enterprise Repository. For some of the request it is possible to get some basic test data delivered.
When I got a response back I have used a SAX parser to handle the requests. This works great to store the information for later retrieval by the robot. It would have saved some time on this front also if the Axis2 would work. For the three calls I perform, I use three different parsing strategies. I though learned something from this, so I’m happy.
Output to the wave was pretty straight forward using the Robot apis. I only had some problems with some of the used keys between the different blips. To remember the item name, I store the item in the Memcache. That way it is easy to store data between different requests. I did have a problem with the robot, which believed that it should react to its own requests. That was not a good idea, and it created a lot of blips in the wave. So when developing robots, do not react to events performed by the robot itself or any of the robots at the @gwave.com domain.
The code for the robot can be found in the sap-wave repository.
Before deploying this code you self you need to change the WebserviceHelper class, and add you own username and password to the SAP ES demo systems as Basic authentication parameters.
Creating my first form gadget, I call it “form gadget” because the main idea of creating this post is to simply show the possibility of using gadgets for form transactions inside wave. Form transactions, meaning having a form created in gadget residing inside a wave but sending the data gathered to a robot or a robot can simply manipulate the data once the form is submitted.
NOTE: In this post I will not discuss on how to create a form gadget. However, I will discuss parts of the code and hopefully feature some other ideas on it.
When I first started creating this gadget I thought it would be easy for me to finish. Unfortunately there were a lot of challenges. I think one of the most challenging part, is having an idea on what gadget to build. Until, I came up with an idea of creating a simple address book gadget. I choose address book because it is simpler and much easy to create. It also shows the idea of a form being submitted. I believe there are a lot of potentials using gadgets inside wave, like this one that I have created. It shows the potential of having a transaction from one servlet residing in remote server or other scripting language that resides in a remote server.