Facebook Chat bot (PHP webhook) sende flere svar

stemmer
2

Min Facebook chat bot fungerer, men det er å sende tilbake flere meldinger etter min første melding til det. Dette er min webhook script (jeg setter pris på det er en svært grov arbeids eksempel):

$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);
Publisert på 13/04/2016 klokken 21:04
kilden bruker
På andre språk...                            


3 svar

stemmer
9

FB treffer din webhook url med den opprinnelige innkommende melding og du behandler den. Du blir deretter sende et svar tilbake til brukeren, og manuset ender. Deretter, når meldingen er levert til brukeren, sender FB en leveringsbekreftelse til webhook url. Siden skriptet er alltid satt til å sende "Hei Lee!" helst som det kalles, er leveringstilbakeringing faktisk å utløse en annen melding som skal sendes, og deretter en annen levering bekreftelse kommer inn, og da den prosess gjentar seg selv. For å fikse dette, satte en hvis setningen rundt koden for å sende en melding. Her er et eksempel.

$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);

Håper det hjelper.

Svarte 14/04/2016 kl. 00:58
kilden bruker

stemmer
9

Jeg tror det er fordi du ikke kontrollere om meldingene som sendes er tom:

prøv dette i stedet:

$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);
}
Svarte 14/04/2016 kl. 07:18
kilden bruker

stemmer
0

Prøvde det samme, holder den første forespørselen selve bruker melding, de andre forespørsler. Jeg bare sende et svar hvis
$message = $input['entry'][0]['messaging'][0]['message']['text'];ikke er null:

if ($message){
//send your message here
}
Svarte 18/11/2016 kl. 18:12
kilden bruker

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