In-Application Customer Feedback

Matt Wilson asked about ‘awesome web-apps to let customers suggest/vote/comment’ on upcoming features.‘ This gave me the idea to post about ErgMate’s in-application feedback mechanism.

In addtion to sending an email to the support mailbox, there are two other ways customers can provide feedback on ErgMate.

The first is through the UserVoice ErgMate Page. UserVoice is a service that allows people to suggest, comment, and vote on features.

The second is through the menu item in the program itself. Selecting ‘Send Feedback’ on the help menu in ErgMate will bring up dialog box:

The Ergmate feedback dialog showing 3 options and a text field.

ErgMate Feedback Dialog

This dialog box collects the data and submits it to a php script on the website:


    def OnSubmit(self, event):
        feedbacktype = self.getFeedbackType()
        feedback = self.feedbackText.GetValue()
        version = buildInfo.getVersion()
        build = buildInfo.getBuild()
        params = urllib.urlencode({'t':feedbacktype, 'b':build, 'v':version, 'f':feedback })        
        try:
            f = urllib.urlopen(ErgMateGlobals.feedbackUrl, params) 
            done = True
         except:
            # do something rational here

The php script on the website collects the input, urlendcodes it, and adds it to a google docs spreadsheet by emulating a form subission from a form on that spreadsheet. Matt Casperson outlines the method in his blog article ‘Submit Data to a Google Form with PHP.

The heart of the php form-submission script looks like this:


$data =         "key=p......Q&embedded=true";
$data = $data . "&entry.0.single=" . urlencode($fbtype);
$data = $data . "&entry.1.single=" . urlencode($emversion);
$data = $data . "&entry.2.single=" . urlencode($embuild);
$data = $data . "&entry.3.single=" . urlencode($fbtext);
sendToHost( "spreadsheets.google.com", "POST", "/formResponse", $data ); 

This will add a row to the spreadsheet:
Google docs spreadsheet showing ErgMate feedback.

This mechanism is convenient for the user and simple to implement.

This entry was posted in Micro-isv, programming, Python. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *