Facebook chat bot (PHP webhook) envoyer plusieurs réponses

voix
2

Mon Facebook chat bot fonctionne mais il est de renvoyer plusieurs messages après mon message initial à lui. Ceci est mon script webhook (je l'apprécie est un exemple de travail très approximatif):

$challenge = $_REQUEST['hub_challenge'];
$verify_token = $_REQUEST['hub_verify_token'];

if ($verify_token === 'MY_VERIFICATION_TOKEN') {
  echo $challenge;
}

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

$sender = $input['entry'][0]['messaging'][0]['sender']['id'];
$message = $input['entry'][0]['messaging'][0]['message']['text'];


//API Url
$url = 'https://graph.facebook.com/v2.6/me/messages?access_token=<my-token>';

//Initiate cURL.
$ch = curl_init($url);

//The JSON data.
$jsonData = '{
    recipient:{
        id:'.$sender.'
    }, 
    message:{
        text:Hey Lee!
    }
}';

//Encode the array into JSON.
$jsonDataEncoded = $jsonData;

//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, $jsonDataEncoded);

//Set the content type to application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

//Execute the request
$result = curl_exec($ch);
Créé 13/04/2016 à 21:04
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
8

FB frappe votre url webhook avec le message entrant original et vous traiter. Vous envoyez ensuite une réponse à l'utilisateur et le script se termine. Ensuite, une fois que le message est délivré à l'utilisateur, FB envoie un accusé de réception à l'adresse de webhook. Étant donné que votre script est toujours configuré pour envoyer « Hey Lee! » tout moment qu'il est appelé, le rappel de livraison déclenche en fait un autre message à envoyer, puis une autre confirmation de la livraison arrive, et ce processus se répète elle-même. Pour résoudre ce problème, mettre une instruction if autour de votre code pour envoyer un message. Voici un exemple.

$challenge = $_REQUEST['hub_challenge'];
$verify_token = $_REQUEST['hub_verify_token'];

if ($verify_token === 'MY_VERIFICATION_TOKEN') {
  echo $challenge;
}

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

$sender = $input['entry'][0]['messaging'][0]['sender']['id'];
$message = $input['entry'][0]['messaging'][0]['message']['text'];


//API Url
$url = 'https://graph.facebook.com/v2.6/me/messages?access_token=<my-token>';

//Initiate cURL.
$ch = curl_init($url);

if($message=="hello")
{
        //The JSON data.
        $jsonData = '{
        "recipient":{
                "id":"'.$sender.'"
        },
        "message":{
                "text":"Hey Lee!"
        }
        }';
}

//Encode the array into JSON.
$jsonDataEncoded = $jsonData;

//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, $jsonDataEncoded);

//Set the content type to application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

//Execute the request
$result = curl_exec($ch);

J'espère que cela pourra aider.

Créé 14/04/2016 à 00:58
source utilisateur

voix
8

Je pense qu'il est parce que vous ne vérifiez pas si les messages envoyés sont vides:

essayez ceci:

$challenge = $_REQUEST['hub_challenge'];
$verify_token = $_REQUEST['hub_verify_token'];

if ($verify_token === 'MY_VERIFICATION_TOKEN') {
  echo $challenge;
}

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

$sender = $input['entry'][0]['messaging'][0]['sender']['id'];
$message = $input['entry'][0]['messaging'][0]['message']['text'];


//API Url
$url = 'https://graph.facebook.com/v2.6/me/messages?access_token=<my-token>';

//Initiate cURL.
$ch = curl_init($url);

//The JSON data.
$jsonData = '{
    "recipient":{
        "id":"'.$sender.'"
    }, 
    "message":{
        "text":"Hey Lee!"
    }
}';

//Encode the array into JSON.
$jsonDataEncoded = $jsonData;

//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, $jsonDataEncoded);

//Set the content type to application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

//Execute the request
if(!empty($input['entry'][0]['messaging'][0]['message'])){
$result = curl_exec($ch);
}
Créé 14/04/2016 à 07:18
source utilisateur

voix
0

Essayé même, la première requête contient le message d'utilisateur réel, les autres demandes non. Je viens envoyer une réponse si l'
$message = $input['entry'][0]['messaging'][0]['message']['text'];est pas nul:

if ($message){
//send your message here
}
Créé 18/11/2016 à 18:12
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more