Prerequisites

$ composer require twilio/sdk
$ composer require guzzlehttp/guzzle

Next, Go to your Twilio dashboard and copy your ACCOUNT SID and AUTH TOKEN which will be used for authenticating your requests with the Twilio SDK:

Proceed to update your constant variables with these credentials. Open up your config/constants.php file and add the following variables:

define('TWILIO_SID', "TWILIO_SID");
define('TWILIO_AUTH_TOKEN', "TWILIO_AUTH_TOKEN");
define('TWILIO_WHATSAPP_NUMBER', "+14XXXXXXXX6");

WhatsApp Chatbot

Create a Chatbot.php in the applications/controllers/ directory.

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

use GuzzleHttpExceptionRequestException;
use TwilioRestClient;
// Load Composer's autoloader
require 'vendor/autoload.php';

class Chatbot extends CI_Controller {

    public function __construct() {
        parent::__construct();
    }

    public function index() {
    }

    public function listenToReplies() {
        $from       = $this->input->post('From');
        $body       = $this->input->post('Body');
        $client     = new GuzzleHttpClient();
        try {
            $response = $client->request('GET', 
                        "https://api.github.com/users/junaidsshaikh");
            $githubResponse = json_decode($response->getBody());
            if ($response->getStatusCode() == 200) {
                $message = "*Name:* $githubResponse->namen";
                $message .= "*Bio:* $githubResponse->bion";
                $message .= "*Lives in:* $githubResponse->locationn";
                $message .= "*Followers:* $githubResponse->followers devsn";
                $message .= "*Following:* $githubResponse->following devsn";
                $message .= "*Number of Repos:* $githubResponse->public_reposn";
                $message .= "*URL:* $githubResponse->html_urln";
                $message .= "*Repos URL:* $githubResponse->repos_urln";
                $this->sendWhatsAppMessage($message, $from);
            } else {
                $this->sendWhatsAppMessage($githubResponse->message, $from);
            }
        } catch (RequestException $th) {
            $response = json_decode($th->getResponse()->getBody());
            $this->sendWhatsAppMessage($response->message, $from);
        }
    }

    public function sendWhatsAppMessage($message, $recipient) {
        $twilio_whatsapp_number = TWILIO_WHATSAPP_NUMBER;
        $account_sid = TWILIO_SID;
        $auth_token = TWILIO_AUTH_TOKEN;
        $client = new Client($account_sid, $auth_token);
        return $client->messages->create($recipient, 
                array('from' => "whatsapp:$twilio_whatsapp_number", 
                'body' => $message));
    }
}

listenToReplies()

The listenToReplies() method is where messages sent to your WhatsApp number will be executed. The response sent will rely on the body the received message.

public function listenToReplies() {
    $from       = $this->input->post('From');
    $body       = $this->input->post('Body');
    $client     = new GuzzleHttpClient();
    try {
        $response = $client->request('GET', 
                    "https://api.github.com/users/junaidsshaikh");
        $githubResponse = json_decode($response->getBody());
        if ($response->getStatusCode() == 200) {
            $message = "*Name:* $githubResponse->namen";
            $message .= "*Bio:* $githubResponse->bion";
            $message .= "*Lives in:* $githubResponse->locationn";
            $message .= "*Followers:* $githubResponse->followers devsn";
            $message .= "*Following:* $githubResponse->following devsn";
            $message .= "*Number of Repos:* $githubResponse->public_reposn";
            $message .= "*URL:* $githubResponse->html_urln";
            $message .= "*Repos URL:* $githubResponse->repos_urln";
            $this->sendWhatsAppMessage($message, $from);
        } else {
            $this->sendWhatsAppMessage($githubResponse->message, $from);
        }
    } catch (RequestException $th) {
        $response = json_decode($th->getResponse()->getBody());
        $this->sendWhatsAppMessage($response->message, $from);
    }
}

sendWhatsAppMessage()

The sendWhatsAppMessage() method uses the Twilio SDK for sending the WhatsApp messages:

>public function sendWhatsAppMessage($message, $recipient) {
    $twilio_whatsapp_number = TWILIO_WHATSAPP_NUMBER;
    $account_sid = TWILIO_SID;
    $auth_token = TWILIO_AUTH_TOKEN;
    $client = new Client($account_sid, $auth_token);
    return $client->messages->create($recipient, 
            array('from' => "whatsapp:$twilio_whatsapp_number", 
            'body' => $message));
}

Setup the Webhook – config/routes.php

$route['api/chat-bot'] = 'Chatbot/listenToReplies';

Update the Sandbox Webhook

Go to the WhatsApp sandbox settings in your Twilio dashboard and update the input field labeled as “WHEN A MESSAGE COMES IN” with the complete URL to your chatbot.

Your webhook URL must be in the following format:

https://<hostname>/api/chat-bot

Output

WhatsApp chatbot output