DEV Community

Shanmukha Sai Korlakunta
Shanmukha Sai Korlakunta

Posted on

React native Twilio Chatbot Integration

Twilio offers multiple services such as SMS, voice & video calling, Chat, Email, Live streaming, chatbot, etc. We can integrate these services with backend and frontend technologies, and also we can host our services on Twilio instead of external servers.

Now we are going to build a chatbot app in React Native using “Twilio Autopilot”.

Prerequisites:

1) Twilio Account

Integration steps:

1) Create a React Native application.
2) Install dependencies: axios and react-native-gifted-chat.
3) Setting up Autopilot:

Image description

Image description

  • Copy SID from the newly created bot. We will need it in the next step.

Image description

4) Setting up Twilio Functions:

Image description

  • After the service is created, navigate to Environment Variables under the settings section on the bottom left and add the following environment variable:

      ASSISTANT_SID
    

Image description
Make sure to give it the value of the SID we got earlier when we created a new bot.

  • Click on Dependencies and add the got dependency. got is an HTTP client.

Image description

  • Now that we have updated our dependencies and environment variables, navigate to the Functions section. Click the Add + button to create a new function and give it the /chat path. Change the function to public.

Image description

  • In the editor, replace the code with the following:

    We will start by importing our dependency and getting the environment variables from the context object. Then we get the request body from the event object.

exports.handler = async function(context, event, callback) {
 const got = (await import("got")).default;
 const { ACCOUNT_SID, AUTH_TOKEN, ASSISTANT_SID } = context;
 const { message, id } = event
};
Enter fullscreen mode Exit fullscreen mode
  • Next, we create a payload for the autopilot custom channel endpoint as detailed in the documentation.

    This function serves as our backend. When a user enters a message in the chatbot, we make an http POST request to our Twilio Function. The function then makes another POST request to the autopilot custom channel endpoint. The user’s message is passed to Autopilot. Autopilot processes the message and gives the appropriate response. The response is then sent back to the user.

exports.handler = async function(context, event, callback) {
 const got = (await import("got")).default;
 const { ACCOUNT_SID, AUTH_TOKEN, ASSISTANT_SID } = context;
 const { message, id } = event;
 let requestPayload = `UserId=user${id}&Language=en-US&Text=${message}`;
  got
 .post(
`https://channels.autopilot.twilio.com/v2/${ACCOUNT_SID}/${ASSISTANT_SID}
/custom/chat`,
   {
headers: {
"content-type": "application/x-www-form-urlencoded",
       accept: "application/json",
       authorization:
`Basic ` + new
Buffer.from(`${ACCOUNT_SID}:${AUTH_TOKEN}`).toString("base64"),
     },
     body: requestPayload,
   }
 )
 .then((resp) => {
   const headers = {
       "Access-Control-Allow-Origin": "http://localhost:3000",
       "Content-Type": "application/json"
}
   const response = new Twilio.Response();
   response.setHeaders(headers);
   response.setBody(JSON.parse(resp.body));
   callback(null, response);
 })
 .catch((error) => {
   callback(error);
}); };
Enter fullscreen mode Exit fullscreen mode

Next, save the function then click Deploy All.

  • click Copy URL and paste it in App.js.

Image description

Image description

  • Reload and From the chat input, type in a message and see the response.

Image description

Full Code:

import React, {useState, useCallback, useEffect} from 'react';
import {SafeAreaView, StyleSheet} from 'react-native';
import {GiftedChat} from 'react-native-gifted-chat';
import axios from 'axios';

const App = () => {
 const [messages, setMessages] = useState([]);

 const selfUser = {
   _id: 1,
   name: 'Sai',
   avatar: 'https://placeimg.com/140/140/any',
 };

 const botUser = {
   _id: 2,
   name: 'Bot',
   avatar: 'https://placeimg.com/140/140/any',
 };

 const welcomeMessage = {
   _id: 1,
   text: "Hi, What's up?",
   createdAt: new Date(),
   user: botUser,
};

 useEffect(() => {
   setMessages([welcomeMessage]);
}, []);

 function handleNewUserMessage(message) {

    const id = Math.random();
  axios
    .post('https://mentor-chatbot-backend-5421.twil.io/chat', {
      message,
      id,
    })
    .then(response => {
      response.data.response.says.forEach(say => {
        const botMessage = {
          _id: id,
          createdAt: new Date(),
          text: say.text,
          user: botUser,
        };
        addMessages([botMessage]);
      });
    })
    .catch(err => console.log('err', err));
}

const onSend = useCallback((messages = []) => {
  handleNewUserMessage(messages[0].text);
  addMessages(messages);
}, []);

function addMessages(messages) {
  setMessages(previousMessages =>
    GiftedChat.append(previousMessages, messages),
  );
}

return (
   <SafeAreaView style={styles.fullFlex}>
     <GiftedChat
       messages={messages}
       onSend={messages => onSend(messages)}
       user={selfUser}
     />
   </SafeAreaView>
); };

const styles = StyleSheet.create({
 fullFlex: {
   flex: 1, 
 },
});

export default App;
Enter fullscreen mode Exit fullscreen mode

Image description

Conclusion

We have successfully built a chatbot app in React Native using Twilio Autopilot. By integrating Twilio services, specifically Autopilot and Twilio Functions, we have created a functional chatbot that can communicate with users, process messages, and provide appropriate responses. The integration involves setting up Autopilot with a specific template, configuring Twilio Functions, and connecting the frontend React Native application with the Autopilot custom channel endpoint.

This example demonstrates the seamless integration of Twilio services into a React Native application, showcasing the versatility and ease of use of Twilio tools for building interactive and intelligent conversational interfaces. Developers can leverage this foundation to create more sophisticated chatbot applications tailored to specific use cases and industries. The provided full code and step-by-step instructions serve as a practical guide for developers looking to implement similar solutions and explore the capabilities of Twilio in the realm of mobile app development.

Top comments (0)