PHP ile Facebook Messenger Botu Nasıl Yapılır?

Videoda hemen hemen her şeyini anlatmaya çalıştım, makale olarakta biraz bahsetmek istiyorum. İhtiyacınız olan bir adet facebook sayfası sahibi olmanız bu kadar 🙂

1. Adım – Uygulama Oluşturmak

https://developers.facebook.com/ adresine giriş yapın. Sağ üstten My Apps‘e tıklayıp Create App diyerek yeni bir uygulama oluşturun.

Çıkan popup’da ilgili alanları doldurup uygulamanızı oluşturun.

2. Adım – Messenger ürününü ekleyin

Uygulama detayına girdiğinizde Ürünler kısmı açılacak . Buradan Messenger‘ı bulup Set Up diyerek kurulumu yapalım.

3. Adım – Sayfanızı bağlayın

Set Up’a bastığınızda sol taraftaki PRODUCTS kısmına Messenger’ın geldiğini göreceksiniz. Açılan sayfada Access Tokens kısmından mevcut sayfanız varsa Add or Remove Pages butonuna basarak izin vereceksiniz, sayfalarınız oraya gelecek. Yok ise yeni bir sayfa oluşturup aynı işlemleri yapabilirsiniz.

Sayfalarınıza izin verdikten sonra, izin verdiğiniz sayfalar şu şekilde yer alacak.

4. Adım – Webhook Ayarı

Sıra geldi, webhook ayarını yapmaya. Üstteki kısmın hemen altında bulunan Webhooks bölümünden yapacağız bu ayarı. Add Callback URL diyerek messenger’a bir mesaj geldiğinde facebook’un bize iletmesini istediğimiz callback adresini belirteceğiz.

Bu adres mutlaka http(s) olmalı yoksa facebook kabul etmiyor. Örnek bir tanesini birlikte dolduralım;

Gördüğünüz gibi “The URL couldn’t be validated. Please try again.” şeklinde hata aldık. Çünkü henüz callback.php’de hiçbir şey yapmadım. Ne yapacağım peki? Öncelikle callback.php’de facebook’un challenge için gönderdiği değerleri kontrol edeceğim, verify token benim gönderdiğim ile uyuşuyorsa onun bana göndermiş olduğu challenge’ı ekrana yazdıracağım bu sayede facebook callback adresimi doğrulayacak.

<?php // facebook/callback.php

$mode = $_GET['hub_mode'];
$challenge = $_GET['hub_challenge'];
$verify_token = $_GET['hub_verify_token'];

if ($verify_token == 'prototurk.123') {
    echo $challenge;
}

callback adresimde bu php kodlarını yazıp facebook’da tekrar verify and save dedikten sonra, artık şöyle bir ekran göreceksiniz.

5. Adım – Abonelikleri Ayarlamak

Şimdi de yukarıdaki ekranda gördüğünüz gibi, sayfamız için sağ tarafında bulunan “Add Subscriptions” butonuna basarak, tam olarak hangi action’lara abone olacağımızı belirteceğiz.

Biz messages ve messaging_postbacks alanlarını işaretliyoruz. Bu bize gelen mesajları almamızı ve mesaj içinde postback yapabilme özelliği veriyor. Kayıt ediyoruz bu şekilde ayarlarımızla birlikte.

6. Adım – İlk Bot Kodlarımız

Evet, şu an tüm ayarları yaptığımıza göre, artık botumuz için ilk kodlarımızı yazacağız. Öncelikle messenger ile ilgili tüm dökümanlara https://developers.facebook.com/docs/messenger-platform/ buradan ulaşabilirsiniz.

Birisi sayfanıza bir mesaj attığınızda, artık facebook bizim belirlediğimiz callback adresine json formatında veri gönderecek. Bu veri ise şu şekilde bir veri;

{  
   "object":"page",
   "entry":[  
      {  
         "id":"317224665035770",
         "time":1566936788503,
         "messaging":[  
            {  
               "sender":{  
                  "id":"2384505758252641"
               },
               "recipient":{  
                  "id":"317224665035770"
               },
               "timestamp":1566936788135,
               "message":{  
                  "mid":"KWWKkoCbyM13HwxdU5FzPBdaYgcac0g7sXzF0hXhIFSQg9XyIvuanV_HqD7z4aZx846l3TQrDzMLTPtdUu6y5A",
                  "text":"test mesaj"
               }
            }
         ]
      }
   ]
}

Şimdi gelin bunu callback.php dosyamızda handle edip, karşılığında bir cevap gönderelim. Ancak öncesinde, uygulamada bağladığımız sayfanın yanında Generate Token diyerek sayfaya özel token’ı kopyalayın bir yere, kodlarda birazdan lazım olacak 🙂

Evet, artık kodlarımızı yazalım;

/**
 * Class FacebookMessengerBot
 */
class FacebookMessengerBot
{

    public static $senderId;
    const PAGE_ACCESS_TOKEN = '[SİZİN FACEBOOK SAYFA TOKENINIZ]';

    /**
     * @return mixed
     */
    public static function getData()
    {
        $data = json_decode(file_get_contents('php://input'));
        $messaging = $data->entry{0}->messaging{0};
        self::$senderId = $messaging->sender->id;
        return $messaging;
    }

    /**
     * @param $senderId
     * @param $msg
     * @return mixed
     */
    public static function sendText($msg)
    {
        $posts = [
            'recipient' => [
                'id' => self::$senderId
            ],
            'message' => [
                'text' => $msg
            ]
        ];
        return self::curl($posts);
    }

    /**
     * @param $posts
     * @return mixed
     */
    public static function curl($posts)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 'https://graph.facebook.com/v2.6/me/messages?access_token=' . self::PAGE_ACCESS_TOKEN);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($posts));
        curl_setopt($ch, CURLOPT_POST, 1);
        $headers = [];
        $headers[] = 'Content-Type: application/json';
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        $result = curl_exec($ch);
        curl_close($ch);
        return $result;
    }

}

Ve artık kontrollerimizi yapıp cevap verebiliriz yazan kişiye;

$data = FacebookMessengerBot::getData();
$message = $data->message->text;
switch ($message) {
case strstr($message, 'merhaba'):
FacebookMessengerBot::sendText('Merhaba, nasılsın?');
break;
case strstr($message, 'iyiyim'):
FacebookMessengerBot::sendText('İyi olmana çok sevindik.');
break;
case strstr($message, 'kötüyüm'):
FacebookMessengerBot::sendText('Hayırdır, neyin var?');
break;
}

Sonuç başarılı;

Daha fazlası için videoyu izlemeyi unutmayın. Kendinize çok iyi bakın 🙂

Not: Uygulamayı facebook tarafından onaylatana kadar sadece geliştirici olarak siz kullanabilirsiniz. Ne yazık ki kötüye kullanımdan dolayı facebook artık ağır bir onay süreci istiyor bu tarz izinler için, yeterli bir anlatım ile iyi niyetli iseniz izin almak 7-10 gün arası zamanınızı alır, ama uğraşırsanız güzel işler çıkartacağınıza eminim.

“PHP ile Facebook Messenger Botu Nasıl Yapılır?” için bir yorum

Bir Cevap Yazın