A visit to the ESOMAR congress is a sure way to know what’s the next fad or major shift in Market Research. And in September, I counted 4 papers about chat bots. As a proud supporter of the ASC, I am going to point out that the first good paper I saw at a MR conference was at the May 2017 day conference by Simon Neve of Wizu fame. I am not usually afraid of jumping on the bandwagon but in that same conference, Chris Davison and I presented a paper (and put it on the blog) in which we suggested that a better survey should be possible by concentrating on what the interviewee cares about. So if you read the “text-driven surveys” paragraph, you’ll find out that Askia had been on the train for some time.

The idea is simple: let’s imagine you run a survey about hotel satisfaction. You start with an open question “How was your stay”? Thanks to the newish web service routing, you run a theme identifier (and maybe some associated sentiment analysis) in a good open-ended coding application which has an API. Then you probe the interview on the subjects he brought up (“you mentioned the cleanliness of the room”, “you also wrote about the breakfast”) and all in all you have a better survey with a great flow, better engaged respondents and better data. If you need, you can also ask them about things they have not mentioned – randomly picking subjects with quota if the interview is below the promised length.

Now there is a difficulty in bringing the right question(s) at the right moment… using loops or re-ordering chapters was an option but we added more flexibility by creating a new keyword SetNextQuestion in the “Run Askia Script” routing. You can call:

CurrentQuestion.SetNextQuestion(SectionAboutRoomCleanliness.)
SectionAboutRoomCleanliness.SetNextQuestion(SectionAboutBreakfast)

Or chain your calls like this:

CurrentQuestion.SetNextQuestion(SectionAboutRoomCleanliness).SetNextQuestion(SectionAboutBreakfast)

But if you really want to engage people, it’s probably best to interact with them with something they use on a daily basis – and if what they use on a daily basis is a web survey, you are probably talking to the wrong people.

People interact on Messenger, WhatsApp, in Slack or with Alexa. And these tools do not use HTML as their atomic way of communication, they want a web service. So we built one (as part of Jupiter to test it locally) and in AskiaWeb so we can industrialise it. This way you can build your extension in the language of your choice: JavaScript, Go, Haskell or Swift.

Because we are using an ISAPI extension (that might change), the call to the web service has to be a  POST to http://localhost/WebProd/cgi-bin/askiaext.dll (for Jupiter) or http://show.askia.com/WebProd/cgi-bin/askiaext.dll (for live surveys).

But the behaviour of the web service is set by the JSON file you put in the body. To start a survey, you call:

{
    "action": "StartSurvey",
    "survey": "ChatPrototype"
}

And you will get a response (in JSON) looking like this:

{
    "interview": "XBDCHDKDUCC",
    "position": 0,
    "questions": [
        {
            "inputName": "S0",
            "isAllowDK": true,
            "longCaption": "Any remarks about your stay?",
            "maxValue": 0,
            "shortCaption": "",
            "shortcut": "Remarks1",
            "tags": null,
            "type": "open",
            "userData": ""
        }
    ],
    "survey": "ChatPrototype"
}

This indicates that you need to ask an open-ended question “Any remarks about your stay?”. Note that the interview ID is encrypted. To progress in the survey, you call the same URL with something like this in the body:

{
    "action":"NextPage",
    "interview": "XBDCHDKDUCC",
    "position": 0,
    "survey": "ChatPrototype",
    "S0": "My room was not clean when I arrived"
}

This is the response you get for the next question:

{
    "interview": "XBDCHDKDUCC",
    "position": 1,
    "questions": [
        {
            "inputName": "U1",
            "isAllowDK": true,
            "isMultiple": false,
            "isOrdered": false,
            "longCaption": "You mentioned cleanliness - how was your room?",
            "maxValue": 1,
            "minValue": 0,
            "responses": [
                {
                    "caption": "Very clean",
                    "entryCode": "1",
                    "factor": -999999.99,
                    "id": 1,
                    "index": 1,
                    "isExclusive": true,
                    "isSelected": false,
                    "rank": 0,
                    "resourceUrl": "",
                    "tags": null
                },
                {
                    "caption": "Not clean",
                    "entryCode": "2",
                    "factor": -999999.99,
                    "id": 2,
                    "index": 2,
                    "isExclusive": true,
                    "isSelected": false,
                    "rank": 0,
                    "resourceUrl": "",
                    "tags": null
                }
            ],
            "shortCaption": "",
            "shortcut": "Clean",
            "tags": null,
            "type": "single",
            "userData": ""
        }
    ],
    "survey": "ChatPrototype"
}

Note that this time, the question is closed and that you also receive the definition of each possible response. One other thing I need to mention here: we have introduced tags in 5.5.2 and user data in 5.5.3 and they are sent in the JSON so you could customise the appearance of the question (slider, switch, etc..) depending on what you read in these fields.

The next step is to make the whole thing working with the fore-mentioned messaging apps (we are on this) and integrate it with voice – Iman promised he would try integrating this in Siri in one of the Askia Labs.

If you want to have a go with this, get in touch: we’ll send you the link to a server with the right version installed and a collection of Postman queries.