skip to Main Content

Introduction:
I feel like I’m missing something terribly obvious about how Watson Assistant should be designed at an architecture level, but maybe I’m not.

The specific problem I’m having is that I can’t seem to get API calls for information back into the conversation.

The bigger issue is that I’m not sure I setting this all up correctly for the long-haul of what I’m trying to accomplish.

Purpose:
I am building a 24/7 customer-service Tier 1 helpdesk for our managed networks. A user of one of our networks should, via SMS, Web chat, Facebook messenger, and eventually phone call, be able to ask for:

  1. Instructions on how to connect their specific device (PC, Mac, Chromebook, Xbox, Apple TV, etc.)
  2. Ask for help troubleshooting if the instructions don’t result in a successful connection. (Step by step instructions for deleting the saved network, restarting the wireless card, etc.)
  3. Help creating a case – at which point the conversation becomes Watson asking for a bunch of information, like what time and date they first experienced the problem, any other times/dates they experienced the problem, their MAC address, etc. etc.

Problems:
I have most of the dialog built and working well. Getting information via Entities, saving to context variables, spitting them back out to make the conversation work, digressions, etc. all working.

I cannot, for the life of me, figure out what I am doing wrong when trying to GET information from an external API.

We have a ‘daily password’ for our guest networks, and we would like a user who asks for the daily password to receive it. This involves a very simple GET request to a publicly accessible server.

I have built a BlueMix/IBM Cloud function that works perfectly, but I can’t seem to successfully call or receive information back from it.

Watson Error:

Error when updating output with output of dialog node id [node_66_xxxxxxxxxx]. Node output is [{"text":{"values":["Today's password for <? $guestNetwork.ssid ?> is <? $guestNetwork.password ?>"],"selection_policy":"sequential"}}] SpEL evaluation error: Expression [ $guestNetwork.ssid ] converted to [ context['guestNetwork'].ssid ] at position 0: EL1007E: Property or field 'ssid' cannot be found on null (and there is 1 more error in the log)

This error leads me to believe I am not properly defining the result variable in Watson, or improperly trying to retrieve it in conversation – because I do know my code returns the SSID and Password when I run it in BlueMix Console.

JSON for the action itself (and yes, I am setting the credentials in the previous node):

{
  "output": {
    "text": {
      "values": [
        "Today's password for <? $guestNetwork.ssid ?> is <? $guestNetwork.psk ?>"
      ],
      "selection_policy": "sequential"
    }
  },
  "actions": [
    {
      "name": "get-http-resource/getGuestNetworkPassword",
      "type": "server",
      "credentials": "$private.myCredentials",
      "result_variable": "$guestNetwork"
    }
  ]
}

Question:

  1. Is my idea of a ‘serverless’ Watson possible by using Watson <-> IBM Cloud <-> external services? We don’t currently have an ‘application’ or a server, it’s all integrations between existing services.

  2. Can anyone help me understand what I’m doing wrong when trying to access that variable?

Bonus points: How do I know to access the variable only after the action has completed successfully in IBM cloud? Basically, if accessing the information via the IBM Cloud function I wrote takes 1.5 seconds, do I need to pause the dialog for 1.5 seconds? Or am I completely missing the point for how to get external info in and out of Watson?

EDIT:
After watching Mitch’s video, I have changed a couple things around, and the error message has evolved to this:

“Error when updating output with output of dialog node id
[node_66_1533646714776]. Node output is [{“text”:{“values”:[“Today’s
password for is “],”selection_policy”:”sequential”}}] SpEL evaluation error:
Expression [ $guestNetwork[‘ssid’] ] converted to [
context[‘guestNetwork’][‘ssid’] ] at position 24: EL1012E: Cannot
index into a null value” error.

2

Answers


  1. Chosen as BEST ANSWER

    We re-created the action using the default package (not having it in a sub-package), and it started working immediately.

    Things to note: Watson dialog editor does not like dashes in the package name.

    Thanks Mitch!


  2. Without seeing your dialog, its a guess, but most common error I see is that you just need to jump to a child dialog node after doing the action call. You cannot do the action call and show the response in the same dialog node, as dialog needs a chance to run the action.

    Its outlined in my video here:
    https://ibm-dte.mybluemix.net/ibm-watson-assistant?refresh
    see the video on dialog callouts. Its 13 minutes long I’m sure you only need about 2 of them, but still, should help.

    What you are trying to do is definitely possible, especially if it works from within the cloud function environment.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search