Skip to content

Hyperlink Validity Asserter (Enterprise)

Description

Chatbots are responding often with references to other sources. This might be just the link to a webpage, an image or a button. You don’t want to display the user an 404 page or an error.

To cover if those links exist we build the HyperLinkAsserter. He will automatically detects all links (Buttons, Cards, Images or simple references) and will check if those are reachable and delivering the correct Http response code.

Prio to Botium Box 2.4, this asserter was enabled by default on Botium Box (depending on the flavour). If you want to disable this asserter, remove it from the Default Component Set by navigating to Settings / System Settings / Registered Components / Chatbot Hyperlink Response Asserter and disabling the Include in Default Component Set switch.

Get started

Basic scenario

We develop a new Chatbot, who is giving us links.

Give me links

#me
Hi

#bot
Goodday, How can I help you?

#me
Can you give me some links

#bot
There you go: www.google.com, https://flippingbook.com/404 https://de.wikipedia.org

Easy right. Everything works great chatbot (smile) . Let’s go live with our amazing Chatbot! After 5 minutes we get the first incident. Some one tried to go to: https://flippingbook.com/404. Ups it is not there anymore (blue star) .

How can we fix this?

(blue star) HyperLinkAsserter (blue star)

We can refer the asserter as an separate step in the convo file

restaurant

#me
Hi

#bot
Goodday, How can I help you?

#me
Can you give me some links

#bot
There you go: www.google.com, https://flippingbook.com/404 https://de.wikipedia.org
CHECKLINK 200 

Now if we run this test again this will hopefully end up in an error that we can fix the link.

Error: Line 15: FAILURE: https://flippingbook.com/404 Not Found Actual: 404 Expected: 200
    at Promise.all.then.results (/Users/stefan-sev/IdeaProjects/botium-box/packages/botium-asserter-hyperlink/src/HyperLinkAsserter.js:105:31)
    at process.internalTickCallback (internal/process/next_tick.js:77:7)
    at ScriptingProvider.fail (/Users/stefan-sev/IdeaProjects/botium-box/packages/botium-asserter-hyperlink/samples/sample1/node_modules/botium-core/src/scripting/ScriptingProvider.js:99:15)
    at scriptingEvents.assertConvoStep.then.then.catch (/Users/stefan-sev/IdeaProjects/botium-box/packages/botium-asserter-hyperlink/samples/sample1/node_modules/botium-core/src/scripting/Convo.js:218:42)
    at process.internalTickCallback (internal/process/next_tick.js:77:7)

Great! Now we clearly see that our chatbot references a non existing page https://flippingbook.com/404. Once this link is removed our tests are passing again and your customer will get all the information he needs.

This was a basic example for the usage of the hyperlink asserter. For more configuration options please read further.

Setup for Botium Box Enterprise

The asserter is already pre-configured in Botium Box, it can be referenced with the CHECKLINK tag in your convo file (for arguments, see below). You can change the configuration in the Settings / Registered Components / Chatbot Hyperlink Response Asserter section.

  • Switching on the Register as global scripting component option, all hyperlinks found in chatbot responses will be validated.

  • Switching on the Include in Default Component Set option, this asserter will be used for all test sessions.

  • If you combine those two switches, there are always all hyperlinks validated.

Configuration options

Global settings

There is the possibility to reduce redundancy by defining global configurations.

In the registered component view, you have to add a JSON structure to the field Component Configuration (JSON-formatted) for the asserter.

Those are the possible configurations:

Description

Example

baseUrl

If you test only links within your domain you can define a baseUrl. This will be concatenated with relative links in the response of the bot

{
    "baseUrl": "https://www.botium.com"
}

If we get a response with <a href=”/img/logo.png”/> this will resolve to https://www.botium.com/img/logo.png

httpStatus

this will set a list of valid HttpStatuses for the links

{
    "httpStatus": [200, 204, 301]
}

Http statuses 200 (OK), 204 (no content) and 301 (redirect) are in this example valid response codes

maxRedirects

this is the depth of http redirects, which the hyperlink asserter is traversing. This might be handy if you are behind a corporate proxy.

{
    "maxRedirects": 0,
    "httpStatus": [200, 204, 301]
}

If we get the link https://de.wikipedia.org we want redirect to https://de.wikipedia.org/wiki/Wikipedia:Hauptseite. Instead we check the first response code, which is in this scenario 301 (redirect).

timeout

HTTP request timeout in milliseconds (default: 10000 = 10 seconds)

{
    "timeout": 30000
}

In case you expect slow network traffic, increase this timeout

extractFromSourceData

Include “sourceData” structure for detecting hyperlinks (default: false). This is useful for custom chatbot implementations with custom information attached not part of the Botium structures (see Howto develop your own Botium Connector).

{
    "extractFromSourceData": false
}

Convo settings

If you need specific settings to the convo step you can override the global settings and defaults with the convo settings.

Here a the possible convo settings:

description

example

httpStatus

Set the desired, valid http response codes for the links send by the bot

There are to options to configure this in the convo file

  1. Text based configuration:

    #bot
    CHECKLINK 200 | 204 | 301
  2. structured configuration:

    #bot
    CHECKLINK {"httpStatus": [200, 204, 301]}

Both configuration having the same result: Check if all links in the bot response are either responding with httpstatus 200, 204 or 301

maxRedirects

Define the max depth of the redirects for links

For the maxRedirects there is just the structured configuration available.

#bot
CHECKLINK {"httpStatus": [301], "maxRedirects": 0}

In this example the bot response with an redirect, but we are not interested if the redirect is valid. So we are just checking if the first url return status code 301 (redirect)

timeout

HTTP request timeout in milliseconds

Only structured configuration possible

#bot
CHECKLINK {"timeout": 30000}