Skip to content

Instantly share code, notes, and snippets.

@visitdigital
Last active September 20, 2022 02:51
Show Gist options
  • Star 28 You must be signed in to star a gist
  • Fork 11 You must be signed in to fork a gist
  • Save visitdigital/58c71acb123870d1ac2ec714d7536587 to your computer and use it in GitHub Desktop.
Save visitdigital/58c71acb123870d1ac2ec714d7536587 to your computer and use it in GitHub Desktop.
Very Simple Facebook Chat Bot PHP Webhook Script Example
<?php
$challenge = $_REQUEST['hub_challenge'];
$verify_token = $_REQUEST['hub_verify_token'];
// Set this Verify Token Value on your Facebook App
if ($verify_token === 'testtoken') {
echo $challenge;
}
$input = json_decode(file_get_contents('php://input'), true);
// Get the Senders Graph ID
$sender = $input['entry'][0]['messaging'][0]['sender']['id'];
// Get the returned message
$message = $input['entry'][0]['messaging'][0]['message']['text'];
//API Url and Access Token, generate this token value on your Facebook App Page
$url = 'https://graph.facebook.com/v2.6/me/messages?access_token=<ACCESS-TOKEN-VALUE>';
//Initiate cURL.
$ch = curl_init($url);
//The JSON data.
$jsonData = '{
"recipient":{
"id":"' . $sender . '"
},
"message":{
"text":"The message you want to return"
}
}';
//Tell cURL that we want to send a POST request.
curl_setopt($ch, CURLOPT_POST, 1);
//Attach our encoded JSON string to the POST fields.
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
//Set the content type to application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
//Execute the request but first check if the message is not empty.
if(!empty($input['entry'][0]['messaging'][0]['message'])){
$result = curl_exec($ch);
}
?>
@zeta243
Copy link

zeta243 commented Aug 4, 2016

Hola no corre el código veo el mensaje que recibe pero cuando executa $result = curl_exec($ch); no se visualiza nada en el chat

@neeksor
Copy link

neeksor commented Feb 15, 2017

// Get the Senders Graph ID
$sender = $input['entry'][0]['changes'][0]['value']['sender_id'];

// Get the returned message
$message = $input['entry'][0]['changes'][0]['value']['message'];

@HollanderNL
Copy link

How to set a specific answer/message if someone says hello for example?

@wpnimitz
Copy link

Any simple class for this?

@raveesgohiel9
Copy link

raveesgohiel9 commented Sep 21, 2017

I am assuming we need to put the page access token for the access token. Thanks for the code by the way.

@raveesgohiel9
Copy link

raveesgohiel9 commented Sep 21, 2017

Add a line at 33.
$jsonDataEncoded = json_encode($jsonData);

Change line 38 to
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);

Sometimes this needs to be done.

@raveesgohiel9
Copy link

Hello Guys, My bot isn't working. Webhook is accepting the url but the bot is not responding.

@vishnu1991
Copy link

@ravigohil999 are you still facing issue?
if yes,what error are you getting?

@gralias
Copy link

gralias commented Feb 16, 2018

`
$input = json_decode(file_get_contents('php://input'), true);

// Get the Senders Graph ID
$sender = $input['entry'][0]['messaging'][0]['sender']['id'];

// Get the returned message
$message = $input['entry'][0]['messaging'][0]['message']['text'];
`
can you explain about some lines above
What about $input?
file_get_contents ??? and which file ?

Unsupported post request. Object with ID 'me' does not exist, cannot be loaded due to missing permissions, or does not support this operation.

@indiarocks08
Copy link

How to save the sender messages to a file ?

@hdkcreative
Copy link

this work today ? 2019- may ?

@tsykiw
Copy link

tsykiw commented Jul 24, 2019

this work today ? 2019- may ?

still worked

@cristianjesusb
Copy link

excellent work! I've modified the code to redirect input messages to a Dialogflow bot and also to handdle pass_thread_control requests (to switch on/off bot allowing human interaction and avoiding bot answers when it should not, just moving conversation from Done to Inbox in Facebook Admin Panel)

@mamontk
Copy link

mamontk commented Apr 29, 2020

file_get_contents('php://input') - empty! Please help to resolve this, what is wrong with FB settings?

@sebaxakerhtc
Copy link

Hi. This work perfect.
I have a just one question:
How to stop bot, when admin start chat with client?

Copy link

ghost commented Oct 15, 2020

I want to get the sender name or profile. How to do that?
I am using this,
$sender = $input['entry'][0]['messaging'][0]['sender']['id']; $url = "https://graph.facebook.com/v8.0/$sender?fields=first_name,last_name,profile_pic&access_token=" . $access_token; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch);

But I get the response,

{"error":{"message":"(#33) This object does not exist or does not support this action","type":"OAuthException","code":33,"fbtrace_id":"AiMUy1AR8LoGXvgta0vE2Of"}}

It looks like the $sender is not the actual user ID, How to get the actual user ID to get sender info.

Please help me. This is a roadblock for me.

@antoniobaptista
Copy link

Please help, dont work for me, I do not receive data from facebook.

@antoniobaptista
Copy link

update please!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment