Top 10 Facebook Wit AI OpenAPI Solutions

Jennie Lee
7 min readApr 13, 2024

--

Looking for a Postman alternative?

Try APIDog, the Most Customizable Postman Alternative, where you can connect to thousands of APIs right now!

II. Creating a Slack Bot

To begin building our Slack bot, we first need to create a new bot in Slack. Follow these steps:

  1. Log in to your Slack account.
  2. Go to the Slack App Directory and search for “Bots”.
  3. Look for the bot you want to use and click on it to view its details.
  4. Click on the “Add Configuration” button to start configuring your bot.
  5. Choose a name for your bot and click on the “Add Bot Integration” button.
  6. After the bot is successfully added, you will see a confirmation message with your bot’s API token.

We now have our bot configured and have obtained the API token required for interacting with the Slack API.

III. Handling Incoming Messages with Go

Now that we have our bot set up in Slack, let’s move on to handling incoming messages using Go.

We will be utilizing the Slack real-time messaging package in Go to accomplish this. The package provides an easy way to connect to the Slack API and receive real-time updates.

To handle incoming messages, we need to create a new goroutine for each message received. This allows us to handle multiple user requests simultaneously and ensures that the bot remains responsive.

Here’s an example code snippet that demonstrates the basic structure of handling incoming messages:

func handleIncomingMessages() {
for {
select {
case msg := <-slack.RTM.IncomingEvents:
switch ev := msg.Data.(type) {
case *slack.MessageEvent:
// Handle incoming message here
go handleMessage(ev)
}
}
}
}

func handleMessage(ev *slack.MessageEvent) {
// Process user's message here
// Reply to the user based on the extracted entities
}

In the code above, we have a function handleIncomingMessages that continuously listens for incoming events from Slack. When a new message event is received, we spawn a new goroutine to handle the message using the handleMessage function.

In the handleMessage function, we can process the user's message and extract any relevant entities using Wit.ai. We will discuss the implementation of Wit.ai in the next section.

IV. Configuring Wit.ai Application

Before we can start using Wit.ai for NLU functionality, we need to set up a Wit.ai application and obtain the server access token required for interaction with the Wit.ai API.

Follow these steps to configure a Wit.ai application:

  1. Log in to the Wit.ai website (https://wit.ai/) using your Facebook account.
  2. Click on “My Apps” in the top right corner and then click on the “Create New App” button.
  3. Give your app a name, select your preferred language, and click on the “Create” button.
  4. Once your app is created, you will be redirected to the app’s dashboard. Here, you can configure its settings and train it with sample data.
  5. To obtain the server access token, click on the “Settings” tab and scroll down to the “API Details” section. You will find the server access token here.

Now that we have our Wit.ai application configured, we can move on to utilizing it for NLU in our Go bot.

V. Utilizing Wit.ai for NLU with Go

To interact with the Wit.ai API and utilize its NLU functionality in our Go bot, we can use the go-wit package.

To install the go-wit package, run the following command:

go get github.com/wit-ai/wit-go

Once the package is installed, we can import it into our Go code:

import (
"github.com/wit-ai/wit-go"
)

To use Wit.ai for NLU, we need to send user messages to the Wit.ai API and retrieve the resulting entities. Here’s an example code snippet that demonstrates how to do this:

client := wit.NewClient("YOUR_WIT_AI_SERVER_ACCESS_TOKEN")
response, err := client.Message("user_input_message")
if err != nil {
log.Fatal(err)
}

// Process the response and extract entities
// You can filter entities based on confidence for improved accuracy

In the code above, we create a new client instance using the Wit.ai server access token obtained earlier. We then use the Message function to send the user's input message to the Wit.ai API. The response received contains the extracted entities, which we can further process and utilize in our bot's logic.

VI. Replying to User Messages

Now that we have the user’s message and the extracted entities from Wit.ai, we can reply to the user based on their input.

Here’s an example function that demonstrates how to reply to user messages based on the extracted entities:

func replyToUserMessage(ev *slack.MessageEvent) {
client := wit.NewClient("YOUR_WIT_AI_SERVER_ACCESS_TOKEN")
response, err := client.Message(ev.Text)
if err != nil {
log.Fatal(err)
}

// Extract relevant entities from the response
// Determine the appropriate reply based on the entities

reply := "Your reply goes here"
sendMessage(reply, ev.Channel)
}

func sendMessage(message, channel string) {
// Function to send message to the Slack API
}

In the code above, we first create a new client instance using the Wit.ai server access token. We then use the Message function to send the user's message and obtain the response from Wit.ai.

Next, we can extract the relevant entities from the response and determine the appropriate reply based on the entities. The reply can be any text or a formatted message.

Finally, we use the sendMessage function to send the reply back to the user in the same channel where the message was received.

It’s important to note that the sendMessage function is responsible for sending the message to the Slack API. You can use the Slack client package or any other method of your choice to accomplish this.

In the next section, we’ll address the issue of the program also handling messages sent by the bot itself.

VII. Handling Bot Messages

When our bot sends a message, it triggers the handleMessage function just like any other user's message. However, we don't want the bot to handle its own messages, as it may lead to an infinite loop of replies.

To fix this issue, we can add a simple check to our message handling function before processing the message:

func handleMessage(ev *slack.MessageEvent) {
if ev.User != "YOUR_BOT_USER_ID" {
// Process user's message here
// Reply to the user based on the extracted entities
}
}

In the code snippet above, we check if the User field of the message event matches the user ID of our bot. If it doesn't match, we proceed with processing the message. If it does match, we skip the message and don't reply to it.

By adding this check, we ensure that the program doesn’t handle its own messages and prevent any potential issues with infinite loops of replies.

In the next section, we’ll cover the steps for setting up the Wolfram Alpha API and integrating it into our Slack bot.

VIII. Setting Up Wolfram Alpha

Now that we have our Slack bot set up with NLU functionality using Wit.ai, we can enhance its capabilities by integrating the Wolfram Alpha computational knowledge engine.

To use the Wolfram Alpha API, we need to sign up for an account at https://www.wolframalpha.com/.

Once you have an account, follow these steps to set up the Wolfram Alpha API:

  1. Go to the Wolfram Alpha Developers website (https://developer.wolframalpha.com/portal/myapps/) and log in using your Wolfram Alpha account.
  2. Click on the “Create An App” button to create a new app.
  3. Provide a name for your app and click on the “Create App” button.
  4. Once your app is created, you will be able to view its details and obtain the app ID required for using the API.

Now that we have our Wolfram Alpha app set up, let’s move on to integrating it into our Slack bot.

IX. Using Wolfram Alpha API with Go

To interact with the Wolfram Alpha API, we can use the go-wolfram package.

To install the go-wolfram package, run the following command:

go get github.com/Krognol/go-wolfram

Once the package is installed, we can import it into our Go code:

import (
"github.com/Krognol/go-wolfram"
)

To use the go-wolfram package, we need to create a new client instance with our Wolfram Alpha app ID. Here's an example code snippet that demonstrates how to do this:

client := wolfram.NewClient("YOUR_WOLFRAM_ALPHA_APP_ID")
query := "meaning of life"
response, err := client.GetShortAnswer(query)
if err != nil {
log.Fatal(err)
}

// Process and utilize the response as desired

In the code above, we create a new client instance using the Wolfram Alpha app ID obtained earlier. We then use the GetShortAnswer function to send a query to the Wolfram Alpha API and obtain a short answer in response.

The query variable in the code snippet can be replaced with any question or query that you want to ask Wolfram Alpha.

Now that we have covered the integration of Wolfram Alpha, let’s move on to testing our Slack bot.

X. Testing the Bot

To test our Slack bot, we can simulate interactions with it and observe its responses. Here are some sample interactions you can try:

  1. Send a greeting message like “Hello” or “Hi”.
  • The bot should reply with a greeting.
  1. Ask a question about the president of the United States.
  • The bot should provide some information about the current or previous presidents.
  1. Ask a question like “What is the meaning of life?”.
  • The bot should reply with a thoughtful or humorous response.

By testing different interactions, we can ensure that our bot is functioning correctly and providing the expected responses.

Congratulations! You have now successfully built a Slack bot with NLU functionality using Go and Wit.ai. You have also integrated the Wolfram Alpha API to enhance its capabilities. Feel free to explore further and experiment with different approaches or additional functionalities.

Looking for a Postman alternative?

Try APIDog, the Most Customizable Postman Alternative, where you can connect to thousands of APIs right now!

--

--