Home / API.AI / Creating a PHP webhook for DialogFlow (API.AI)

Creating a PHP webhook for DialogFlow (API.AI)

Website Name Change

I have changed the name of this website from Mining Business Data to BotFlo. I am offering a 70% off discount on my Dialogflow CX course (till April 15th 2021) for people who can help me spread the word about my new website.

This is intended to be a very basic, beginner’s article for getting started with API.AI webhooks using PHP. I am making the following assumptions:

a. You have a website where you can run PHP scripts

b. You have sufficient permissions to be able to create new folders etc on the host without too much difficulty

Code sample

This tutorial is primarily based on the following code sample provided on the API.AI forum:

function processMessage($update) {
    if($update["result"]["action"] == "sayHello"){
            "source" => $update["result"]["source"],
            "speech" => "Hello from webhook",
            "displayText" => "Hello from webhook",
            "contextOut" => array()

function sendMessage($parameters) {
    echo json_encode($parameters);

$update_response = file_get_contents("php://input");
$update = json_decode($update_response, true);
if (isset($update["result"]["action"])) {

Note that I made the following changes to the code sample:

a. Stripped out the comments

b. Changed the action value from “buscar.nfe” to “sayHello”

c. Changed the speech and displayText values to “Hello from webhook”

Create test.php

To use the above code, start with a file called test.php. Paste the entirety of the code into test.php and save it. Place the file inside a folder called webhook (for example).

Now upload the webhook folder to your website. I will assume, for this example, that you are uploading the folder to the root of your website. If your website is called example.com, then the php file will be located at example.com/webhook/test.php

Add the webhook URL

Under the Fulfillment tab in your API.AI console, add the following URL:


Make sure you use https instead of http if your site already is https.

Add an action to your intent

Choose an intent that you wish to trigger (let us use the Default Welcome for now). Under the action, you should add the following: sayHello. It should match whatever you are handling in the PHP code.

Trigger the intent

In the API.AI console, type “Hi”. It should trigger the Default Welcome Intent and you should see “Hello from webhook” appearing on your console.

Similar Posts


  1. Webhook call failed. Error: Failed to parse webhook JSON response: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $.

    What is this error,sir??

  2. Hello,

    I followed your excellent tutorial
    es it is code example test.php still working at the current time?

    it does not work for me

    console = Not available
    Diagnostic info-> FULFILLMENT STATUS=
    Webhook call failed. Error: Failed to parse webhook JSON response: Expect message object but got: null.

    (sorry for the translate online )
    Please ?

    1. This particular sample is for Dialogflow API v1. I will update it for API v2 over the next week or so – but it is a fairly simple change and you should be able to do it yourself once you look into the JSON formats for v1 and v2 and understand the difference between them.

  3. Hello,
    Could you also create a tutorial in which you create a php webhook but also connect to a database to query the response which the user sends from the chatbot on api.ai?

    But, I must say all your tutorials are really good.
    Thank you for that.