203 Lotus blogs updated hourly. Who will post next? Home | Blogs | Search | About 
 
Latest 7 Posts
Building Facebook Messenger Bots with Botkit and Watson
Thu, Nov 16th 2017 38
Creating Alexa Skills with OpenWhisk and IBM Watson
Thu, Nov 16th 2017 34
Integrating Applications without writing Code
Tue, Nov 14th 2017 128
Pictures from W-JAX 2017
Fri, Nov 10th 2017 43
Using regular Expressions for Entities in Conversations
Fri, Nov 3rd 2017 8
My Favorite IBM Developer Journeys
Wed, Oct 18th 2017 5
Fast On-Ramp for building Cloud-Native Apps
Tue, Oct 17th 2017 5
Top 10
Integrating Applications without writing Code
Tue, Nov 14th 2017 128
Pictures from W-JAX 2017
Fri, Nov 10th 2017 43
Building Facebook Messenger Bots with Botkit and Watson
Thu, Nov 16th 2017 38
Creating Alexa Skills with OpenWhisk and IBM Watson
Thu, Nov 16th 2017 34
Deploying Angular 2 Apps to Bluemix
Tue, Apr 11th 2017 27
Getting started with Tensorflow on IBM Bluemix
Mon, Apr 3rd 2017 14
How to build Facebook Chatbots with IBM Watson
Thu, May 12th 2016 13
Running the Sample App BlueChatter on Kubernetes
Mon, Apr 10th 2017 12
New Slots Filling Functionality in Watson Conversation
Fri, Jun 23rd 2017 12
How to write AngularJS Frontends for LoopBack Applications
Mon, Feb 29th 2016 11


Building Slack Bots with IBM Watson Conversation
Twitter Google+ Facebook LinkedIn Addthis Email Gmail Flipboard Reddit Tumblr WhatsApp StumbleUpon Yammer Evernote Delicious
Niklas Heidloff    

I’ve open sourced a simple sample that shows how to leverage IBM Watson Conversation in Slack bots via the open source project Botkit. With Botkit and a Watson middleware text messages defined in Conversation dialogs can easily be used in Slack bots. My sample shows additionally how to use Slack buttons in messages and how to invoke business logic at certain stages of the conversation.

Botkit is an open source framework to build bots that can be connected to popular messaging platforms like Slack and Facebook Messenger. IBM provides a middleware to easily leverage the conversation flows defined in Watson Conversation dialogs. The following code shows how to pass user input to Watson and how to return text messages to Slack.

var watsonMiddleware = require('botkit-middleware-watson')({
  username: YOUR_CONVERSATION_USERNAME,
  password: YOUR_CONVERSATION_PASSWORD,
  workspace_id: YOUR_WORKSPACE_ID,
  version_date: '2016-09-20',
  minimum_confidence: 0.50
});

slackController.middleware.receive.use(watsonMiddleware.receive);
slackBot.startRTM();

slackController.hears(['.*'], ['direct_message', 'direct_mention', 'mention'], function(bot, message) {
    bot.reply(message, message.watsonData.output.text.join('n'));
});

In order to provide the best possible user experience my sample shows how to use Slack buttons in messages so that users can, for example, easily pick one of the available options. Additionally the sample demonstrates how to invoke a REST API provided by Weather Company Data. Here is a simple sample conversation.

slack

Slack provides a Message Builder to define sophisticated JSON messages that include elements like buttons. Watson Conversation is a general purpose tool and doesn’t support messaging client specific functionality. In order to include the Slack message I’ve put the JSON into a context attribute in a dialog node.

workspace1

This is the complete JSON:

{
  "output": {
    "text": {
      "values": [
        "In which city? Berlin, Munich or Hamburg?"
      ]
    },
    "context": {
      "slack": {
        "attachments": [
          {
            "title": "Which location?",
            "actions": [
              {
                "name": "Berlin",
                "text": "Berlin",
                "type": "button",
                "value": "Berlin"
              },
              {
                "name": "Munich",
                "text": "Munich",
                "type": "button",
                "value": "Munich"
              },
              {
                "name": "Hamburg",
                "text": "Hamburg",
                "type": "button",
                "value": "Hamburg"
              }
            ],
            "callback_id": "123",
            "attachment_type": "default"
          }
        ]
      }
    }
  }
}

When the ‘slack’ attribute is part of the message, the content of this attribute is sent as message to Slack rather than the text message defined in the Conversation dialog.

Similarly I’m using another attribute ‘action’ to mark a node in the dialog as the stage where business logic is triggered, in this case a REST API to the weather service is invoked. Note that you can put the chosen location entity into the JSON.

{
  "output": {
    "text": {
      "values": [
        "looking up weather information for @location ..."
      ]
    },
    "context": {
      "action": {
        "name": "lookupWeather",
        "location": "@location"
      }
    },
    "selection_policy": "sequential"
  }
}

This is the JavaScript code for the action.

function lookupWeather(watsonDataOutput, bot, message) {
    let coordinates;
    let location = watsonDataOutput.context.action.location;

    switch (location) {
        case 'Munich':
            coordinates = '48.13/11.58';
            break;
        case 'Hamburg':
            coordinates = '53.55/9.99';
            break;
        default:
            coordinates = '52.52/13.38'; // Berlin
    }

    let weatherUsername = process.env.WEATHER_USERNAME;
    let weatherPassword = process.env.WEATHER_PASSWORD;
    let weatherUrl = 'https://' + weatherUsername + ':' + weatherPassword + '@twcservice.mybluemix.net:443/api/weather/v1/geocode/' + coordinates + '/observations.json?units=m&language=en-US';

    request(weatherUrl, function (error, response, body) {
        var info = JSON.parse(body);
        let answer = "The current temperature in " + info.observation.obs_name
            + " is " + info.observation.temp + " °C"
        bot.reply(message, answer);
    })
}

Check out the GitHub project for more details and the setup instructions.

The post Building Slack Bots with IBM Watson Conversation appeared first on Niklas Heidloff.



---------------------
http://heidloff.net/article/slack-ibm-watson-conversation-botkit
Jun 26, 2017
11 hits



Recent Blog Posts
38
Building Facebook Messenger Bots with Botkit and Watson
Thu, Nov 16th 2017 10:54a   Niklas Heidloff
I’ve implemented a sample Facebook Messenger bot which leverages the Node.js library Botkit and IBM Watson Conversation. With Botkit you can build bots for Slack, Facebook Messenger, Twilio and other messaging clients. For natural language understanding different services can be used, for example IBM Watson, Api.ai, Wit.ai or Rasa. Most of the code can be shared for Slack and Facebook Messenger bots. Check out the code on GitHub. Similarly to my sample Slack bot, the Facebook Messenger bo
34
Creating Alexa Skills with OpenWhisk and IBM Watson
Thu, Nov 16th 2017 8:43a   Niklas Heidloff
My first code pattern (formerly known as developer journeys) has been published on developer.ibm.com/code. The pattern describes how to build Alexa skills with OpenWhisk. Rather than using intent and entity identification from Alexa, Watson Conversation is used. This allows developers to define conversation flows declaratively and developers can reuse conversations that are available in the Bot Asset Exchange. My colleague Mark Sturdevant improved the documentation and created a video. Check out
128
Integrating Applications without writing Code
Tue, Nov 14th 2017 2:52p   Niklas Heidloff
IBM App Connect is an IPaaS (Integration Platform as a Service) to connect different applications without having to write code. Similarly to IFTTT users are typically business users or citizen developers from line of business departments. App Connect provides currently roughly 50 connectors to integrate applications like Salesforce, SAP, Slack and Gmail. See the documentation for details. Users can graphically build flows that are either event-triggered, for example if a document is changed in a
43
Pictures from W-JAX 2017
Fri, Nov 10th 2017 10:32a   Niklas Heidloff
This week I attended W-JAX in Munich, Germany, which is a developer conference with 1400 attendees with a focus on Java and enterprise technologies. My colleagues and I presented and demonstrated the IBM Cloud and the IBM Code developer site. Below are some pictures. The IBM team: Discussions with developers at the booth: I gave a session about Slack bots and IBM Watson Conversation: One thing I really liked was a demo another company gave at their booth. They connected Anki Overdrive cars to
8
Using regular Expressions for Entities in Conversations
Fri, Nov 3rd 2017 8:06a   Niklas Heidloff
In conversational experiences entities are used to identify classes of objects in user phrases, for example ‘city’ or ‘person’. Watson Conversation supports entity definitions with predefined lists of potential values and synonyms. Recently a new capability has been added so that you can also use regular expressions to identify entities (beta). This functionality is useful when, for example, you want to identify email addresses, phone numbers or URLs without predefining a
5
My Favorite IBM Developer Journeys
Wed, Oct 18th 2017 3:12p   Niklas Heidloff
The team of developer advocates within IBM has created a new site with journeys for developers. Journeys are sample scenarios that are available as open source, well documented and easy to reuse and deploy. There are roughly 60 journeys right now and new ones are published regularly. Check out the journeys at developer.ibm.com/code/journey. Here are my favorite journeys: Make Java microservices resilient with Istio “Twelve-factor apps make a strong case for designing and implementing you
5
Fast On-Ramp for building Cloud-Native Apps
Tue, Oct 17th 2017 9:32a   Niklas Heidloff
In order for developers to get started quickly to build applications and deploy them on the IBM Cloud, new starter kits have been made available. Check out the new IBM Cloud App Service. You can choose from several template the type of application or microservice you want to build: Express.js Backend, Express.js React, Java MicroProfile, Java Spring Backend, Swift Kitura, Python Microservice and more. Additionally you can create new or select existing IBM Cloud services, for example the Watson s
3
How to write your own Slack Chatbots in Javascript
Mon, Oct 16th 2017 2:54p   Niklas Heidloff
Last week Ansgar Schmidt and I gave a session at Codemotion How to write your own Slack Chatbots in Javascript. Below are the slides with screenshots of our demos. We demonstrated how to write a Node.js application that uses Botkit to connect with Slack and that uses IBM Watson Conversation as natural language processing service. Get the code of our sample from GitHub. The post How to write your own Slack Chatbots in Javascript appeared first on Niklas Heidloff.
6
Composing Serverless Apps with IBM Cloud Functions
Tue, Oct 10th 2017 8:13p   Niklas Heidloff
Today at Serverlessconf IBM announced a new key capability (as IBM Research preview) of IBM Cloud Functions. With the new tool ‘Composer‘ apps can be created which contain multiple cloud functions. These apps coordinate the invocations of actions and the data flow. Compared to the previously available action sequences the new functionality is much more flexible. Cloud functions are typically rather simple and focussed on specific tasks which is why people often refer to cloud functio
4
Testing Watson Conversations in Slack
Thu, Oct 5th 2017 7:03a   Niklas Heidloff
Next week Ansgar Schmidt and I will give a session ‘How to write your own Slack Chatbots in Javascript‘ at codemotion. We will demonstrate how to connect Slack to Watson Conversation via the open source project botkit which leverages the Slack Real Time Messaging API. This works well for production bots, but requires some configuration first. For testing purposes there is an easier way to create a Slack app with a bot user and to add this to a Slack team. From the ‘Deploy’




Created and Maintained by Yancy Lent - About - Planet Lotus Blog - Advertising - Mobile Edition