Search code examples
facebookchatbotfacebook-chatbot

Newbie on Fb messenger Sender_action function


I am under a learning process in chatbot, and kinda new to coding overall ( learning by doing right? )

Trying to execute a messenger function so our chatbot gets the little "writing" bubble for x amount of time before it sends a template. = sender_action_typing_on.

I have tried sleep, await, wait, and so on but the code doesn´t seem to be executed, but the template still shows after the time I chose.

The json is also correct by the documentation from Facebook, and if it get´s executed alone it runs for 20 sek before a timeout.

Code:

if ( $response == "")
{

    $jsonData = '{"recipient":{"id":"' . $sender . '"},"message":{"text":"' . $message_to_reply.'"}}';
    $jsonDataEncoded = $jsonData;
}
else
if ( $response == "123456")
{

    $sender_action_typing_on = '{
      "recipient":{
        "id":"<PSID>"
      },
      "sender_action":"Typing_on"
    }';
    $sender_action_typing_on = str_replace("<PSID>", $sender, $sender_action_typing_on);
    $jsonDataEncoded = $sender_action_typing_on;


   $velkommenTemplateJSON = str_replace("<PSID>", $sender, $velkommenTemplateJSON);
   $jsonDataEncoded = $velkommenTemplateJSON;

}

Solution

  • I have now fixed this issue, this may be very self-explaining for many but for the "lost soul" looking for answers u can see the way i dealed with the problem here:

    First i created a new function:

       function sendToMessenger($access_token, $sender, $sender_actiontemplateJSON)
    {
    
    
       $content = str_replace("<PSID>", $sender, $sender_actiontemplateJSON);
    
    
    $opts = array(
        'http'=>array(
        'method'=>"POST",
        'header' => "Content-Type: application/json",
        'content' => $content    
        )
     );
    
    $context = stream_context_create($opts);
    
    $url = 'https://graph.facebook.com/v2.6/me/messages?access_token=' . $access_token;
    
    // Open the file using the HTTP headers set above
    $file = file_get_contents($url, false, $context);
    
    return $file;
    

    Then i rearranged the way i´m sending template since the template got sent at det end of my code "Sender_action" would always be overwritten, Now with the "SendToMessenger" Function it gets sent right away.

    else
    if ( $response == "123456")
    {
    
    
    
       sendToMessenger($access_token, $sender, $sender_actiontemplateJSON);
    
       sleep(1);
    
       sendToMessenger($access_token, $sender, $velkommenTemplateJSON);
    
    
    }
    

    Now it works like a charm!