Modern technology gives us many things.

لمطوري الـ php: أنشئ بوت على منصّة ماسنجر بإستخدام لغة php

هل أنت مطوّر php؟ هل تريد بناء بناء بوت على منصّة فيسبوك ماسنجر؟

0 5٬126

أعلن الفيسبوك مؤخراً عن منصة بوت للماسنجر والتي تتيح لجميع الشركات والأفراد بالتواصل مع جميع الأشخاص، لذلك دعونا في بادئ الأمر نُقدم موجز قصير حول ما هو الشات بوت؟

ما هو الشات بوت؟

هو عبارة عن برنامج كمبيوتر تم تصميمه خصيصاً لمحاكاة محادثة تتم بتلقائية وكأنها محادثة بين أشخاص عاديين وليس بين آلة وشخص وأن تتم هذه المحادثة عبر الإنترنت.

الشات بوت من خلال لغة PHP

عندما يقع على مسامعك جملة شات بوت من خلال لغة PHP فإن أول ما ستُفكر فيه هو أنك بالتأكيد ستحتاج إلى SDK، ولكن عند البحث لم نجد أي SDK تم توفيره من خلال الفيسبوك، ولكن عند البحث أكثر فأكثر وجدنا بعض الشروحات التي تُقدم معلومات جيدة للمبتدئين لذلك دعونا لا نضيع وقت ونبدأ!

بوت الوقت Time Bot

لإنشاء بوت بالفيسبوك فإنك ستحتاج إلى أمرين لاستضافة (هوست) البوت الخاص بك وهما أولاً: إنشاء صفحة فيسبوك، وثانياً: إنشاء تطبيق فيسبوك، وحتى تكوّن فكرة عامة عن الموضوع فلنتخيّل الوضع، ستكون صفحة الفيسبوك بمثابة الهوم الخاص بالبوت، فعندما يتوافد المستخدمون لزيارة الصفحة ويريدون التفاعل مع البوت، فكل ما عليهم فعله هو الضغط على زر رسالة  لبدء التفاعل، فلنأخذ بيتزا هت كمثال بأنها تريد دمج بوت خاص بها وذلك لتقديم فرص مختلفة لعمل الطلبيات، فما هي الخطوات التي يجب أن تتبعها بدمج أو استضافة بوت بالصفحة الرسمية الخاصة بها؟! في هذه الحالة عندما يقوم العميل بالضغط على زر المسدج لطلب البيتزا، فسيتم عرض بعض العروض المتاحة بالإضافة إلى الرد بطريقة تبدو وكأنها بشرية للتعامل مع العميل، فبالفعل فيسبوك لا يضع أي حدود بشأن هذا الصدد.

وبالعودة إلى بوت الوقت الذي نريد أن ننشئه، ففكرة هذا البوت الرئيسية هي إخبار المستخدم ما هو الوقت الحالي الخاص به، ومن خلال Time API يُمكننا تقديم عدة خيارات لاسترداد الوقت، فبالنسبة لهذا البوت سنقوم بجلب أحدث وقت (وهو الوقت الحالي).

الخطوة الأولى: إنشاء صفحة فيسبوك

ما سأقوم به الآن هو إنشاء صفحة فيسبوك وهذه الصفحة ستكون بمثابة بوابة الدخول حتى يستطيع المستخدمون التفاعل مع البوت، يرجى الإشارة إلى أنه أنت غير مطالب بإنشاء صفحة جديدة منفصلة بغرض إنشاء بوت، بل يُمكنك استخدام الصفحة التي بها مستخدمون ومعجبون بالفعل، وإذا لم تُنشئ صفحة فيسبوك من قبل يُرجى زيارة الرابط التالي https://www.facebook.com/pages/create/ وسيظهر لك كما هو مبين في الصورة التالية، فلقد قمت باختيار خيار الترفيه Entertainment، وسيظهر لك في الخطوات التالية عدة خيارات يُمكنك تخطيها. الآن أصبحت الصفحة الخاصة بي جاهزة، من المفترض أن تظهر لك مثلما تبدو الصورة التالية.

الخطوة الثانية: إنشاء تطبيق فيسبوك

ولإنشاء تطبيق اذهب عبر الرابط التالي https://developers.facebook.com/apps واضغط على زر إضافة تطبيق جديد Add a New App، (يُرجى الإشارة إلى أنه يجب أن تمتلك ديفيلوبر أكونت إلا فلن تتمكن من الدخول إلى ديفيلوبر داشبورد) ليظهر لك نافذة تُخيّرك بين أنواع عدة من التطبيقات، ولقد قمت باختيار الإعداد الأساسي Basic Setup، وأدخلت المعلومات المطلوبة كاسم البوت الذي سيظهر للمستخدمين، وبريد التواصل ثم الضغط على زر Create App ID.

بعد الانتهاء من الخطوة السابقة سيتم توجيهك إلى صفحة التطبيق الخاصة بك والتي ستكون بها تفاصيل عدة.

ستجد على الجانب الأيسر اختيار الماسنجر، وعند الضغط عليه سيقوم بعرض مقدمة حول منصة الماسنجر وكيف ولماذا هذه البوتات مفيدة لنا.

وعند الضغط على زر البدء Get Started سيظهر لك صفحة داشبورد جديدة لها صلة بالتطبيق الذي قمت بإنشائه.

سيتطلب منك في هذه الخطوة بعض الأشياء البسيطة لإعداد البوت، مثل رمز الوصول إلى الصفحة “الأكسيس توكن” حتى يتسنى للفيسبوك معرفة المكان الذي تريد استضافة البوت والويبهوكس  Webhooks به وال URL الخاص بالنص البرمجي والتي ستُمكنك من استلام الرسائل من المستخدمين وأيضاً الرد على جميع استفساراتهم، كما أنه سيكون hold لل logic الخاص بالبوت، وبالقوانين التي تحكم أداء البوت عندما يبدأ بالتفاعل مع المستخدمين، الخطوة التالية هي اختيار الصفحة التي أنشأتها للتو وفي هذه الحالة ستكون TimBot، ستظهر لك هذه الرسالة في بادئ الأمر وهي إذن للحصول على المعلومات العامة (وهذا أمر طبيعي).

إذا سار الأمر كما يرام وفق ما سبق ستحصل على رمز الوصول إلى الصفحة، فأحفظه في مكان ما لأنك ستستخدمه ك access_token عند إرسال الرسائل.

لقد حان الوقت الآن لإعداد الويبهوك Webhook، سيطلب منك الفيسبوك ضبط  https:// URL وهذا يعني ببساطة لا يمكن استخدام لوكال هوست أثناء التطوير، كما يُمكنك تحميل النص البرمجي (سكريبت) في مكانٍ ما حتى يسمح لطلبات SSL based من عدمه، كما يُمكنك استخدام أداة tunneling والتي ستُنقل رسالة لوكال هوست للعالم الخارجي، ولحسن الحظ أن هذه الأدوات متوفرة ومجانية أيضاً، وإني أُرشح لكم أداة nGrok  لهذا الغرض، فبمجرد فك الضغط، انتقل إلى المجلد وقم بتشغيل الكوماند.

./ngrok http 80

لا يسمح لك بإعطاء subdomain لأنك مستخدم مجاني، فبمجرد أن يبدأ بالعمل، سيظهر لك شيئاً مشابهاً للصورة التالية.

فكما ترى إنه يُعطيك اثنين من URLs، وبما أننا مهتمين بال https فهذا ما سنُركز عليه، كما أن أداة nGrok تُوفر لك واجهة لعرض الطلبات من خلال domain الذي تم إنشائه مؤخراً، هذا سيكون له تأثير حتى تستطيع debug كيف أصبحت منصة الماسنجر تستطيع الوصول إلى صفحة الويبهوك الخاصة بك، ولهذا الغرض افتح تاب جديد بالعنوان التالي http://localhost:4040/inspect/http، حيث تستطيع من خلال هذا الرابط الاطلاع على جميع التفاصيل المتعلقة بهذا الطلب.

الآن وبعد أن حصلت على URL، سأتجه لضبط الويبهوك الخاص بي ببوت الوقت، اضغط على خيار Setup Webhooks  لترى شاشة شبيهة بما يلي:

لقد قمت هنا بإدخال nGrok مستنداً على URL، قد يكون Verify Token عبارة عن أي نص ثم افحص الحقول التي تم تحديدها، ملاحظة: إذا قمت في هذه الخطوة بالضغط على verify ثم حفظ، سينتج خطأ.

لماذا يحدث ذلك وما الحل؟ عندما نقوم بإدخال URL فإن الويبهوك سيقوم بالتحقق من التوكن قبل القيام بأي شيء آخر، لذلك يُعطيك رسالة خطأ إذا كان Verify Tokenغير موجود أو غير صحيح، وهذا ما حدث بالأعلى.

الآن افتح IDE وأنشئ ملف وليكن في هذه الحالة اسمه index.php، ويُمكنك كتابة أي اسم تُفضله، ثم اكتب به الكود الذي يقوم ب verify الويبهوك الخاص بك.

 

$access_token = “EAAH5qCyWCdcBAP0ddTZBNbVRdmqd43TZCnBJGFEwRZAmO76hlrXfWmVzBXO5xEsochEnlrQ8

8Tkrwm2B63KzXctLxXQ8RU6KKM9sWEFsGZAaBzmmMUoqVjfir1n5ufXgW8btvZAL41bNJ5S0IceHKUCioOLTqCLZCZ

COOMlNz5fRAZDZD”;

$verify_token = “fb_time_bot”;

$hub_verify_token = null;

if(isset($_REQUEST[‘hub_challenge’])) {

 $challenge = $_REQUEST[‘hub_challenge’];

 $hub_verify_token = $_REQUEST[‘hub_verify_token’];

}

if ($hub_verify_token === $verify_token) {

 echo $challenge;

}

** تحمل $verify_token القيمة التي قد حددتها في حقل Verify Token.

بعد أن قمنا بضبط كل شيء، سنقوم بالتجربة مرة أخرى ومن المفترض ألا يظهر عندك أية أخطاء وتظهر الشاشة التالية.

بعد أن جرى كل شيء بشكل سليم، فهيّا بنا نقوم بتجربة الويبهوك من خلال إرسال رسالة للبوت الخاص بنا.

الخطوة الثالثة: إرسال الرسائل واستلامها

يجب الاشتراك في الصفحة قبل الشروع في إرسال الرسائل واستلامها، لذلك توجه للكوماند –على افتراض أن cURL تم تثبيته- قم تجربة الكود التالي:

curl -X POST “https://graph.facebook.com/v2.6/me/subscribed_apps?access_token=EAAH5qCyWCdcBAOGI
HVjWL7TGTYHFYYTr1RZAxc0bXZCK9pBaqqFEJPn9ctdZCSgzbJbJIdTcEHScfIxJ2zWku2sn8AUSOEqktL5VmTqYhYrC0NX
bJEMY3EpsshZAFCd484PEBcyK4hN3H2ZAaiQLowoZAbRSx5aNAihIVsjbCKggZDZD"

لقد حصلنا على الاكسيس توكن في خطوة سابقة لصفحة بوت الوقت ولقد طلبت منك أن تحتفظ به في مكانِ ما، فإذا كنت قد اتبعت جميع الخطوات فستظهر رسالة success بالكونسول.

{“success”:true}

الآن اذهب لصفحة البوت وقم بإرسال رسالة.

سترى مثل الصورة التالية إذا كان hooks وsubscription يعملون بشكل جيد على واجهة nGrok Web (http://localhost:4040/inspect/http) .

الآن ستعلم قوة واجهة nGrok Web، حيث هنا لقد استلمنا الرسائل من البوت على هيئة JSON فورمات، ففي الخطوة التالية سنقوم بتحويل بنية هذه الرسالة من خلال فك JSON لمصفوفة ول fetch sender Id والرسالة.

 

$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’];

تكون مسئولية السطر الأول هو الحصول على الرسالة من الفيسبوك، ومن ثم تحويلها من JSON إلى مصفوفة Associative بفورمات PHP .

تكمن مهمة السطرين التاليين في الحصول على  الراسل ID و ID الخاص بمرسل الرسالة إلى البوت هذا بالإضافة إلى الرسالة نفسها.

انتظر: بينما يقوم مصحح الأخطاء الطلب من خلال nGrok، فإنك ستواجه إيرور.

تنشأ هذه المشكلة إذا كنت تستخدم PHP5.6.، وأفضل طريقة للتعامل مع هذه المشكلة هي إنشاء ملف .htaccess مع المحتوى.

 

<IfModule mod_php5.c>

 php_value always_populate_raw_post_data -1

</IfModule>

من المفترض الآن أن المشكلة قد اختفت، ويُرجى العلم أن استخدام ini_set() لن يفي بالغرض.

لقد قمت بوضع بعض القواعد الأساسية للبوت الخاص بي، يجب أن يخبرني إذا كانت المحادثة تحتوي على كلمات محددة.

/**

 * Some Basic rules to validate incoming messages

 */

if(preg_match(‘[time|current time|now]’, strtolower($message))) {

// Make request to Time API

 ini_set(‘user_agent’,’Mozilla/4.0 (compatible; MSIE 6.0)’);

 $result = file_get_contents(“http://www.timeapi.org/utc/now?format=%25a%20%25b%20%25d%20%25I:%25M:%25S%20%25Y");

 if($result != ‘’) {

 $message_to_reply = $result;

 }

} else {

 $message_to_reply = ‘Huh! what do you mean?’;

}

print $message_to_reply;

وللتحقق من نجاح ما قمنا به، فإن الرسالة المكتوبة يجب أن تظهر من خلال مصحح الأخطاء nGrok.

الآن يجب أن نجيب على المستخدم، فنحن لدينا هوية المستخدم ولدينا الرسالة نفسها، إذن فنُرسلها الآن.

 

//API Url

$url = ‘https://graph.facebook.com/v2.6/me/messages?access_token='.$access_token;

//Initiate cURL.

$ch = curl_init($url);

//The JSON data.

$jsonData = ‘{

 “recipient”:{

 “id”:”’.$sender.’”

 },

 “message”:{

 “text”:”’.$message_to_reply.’”

 }

}’;

//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’));

//curl_setopt($ch, CURLOPT_HTTPHEADER, array(‘Content-Type: application/x-www-form-urlencoded’));

//Execute the request

if(!empty($input[‘entry’][0][‘messaging’][0][‘message’])){

 $result = curl_exec($ch);

}

 

في بادئ الأمر، لقد قمت بإنشاء بنية الرسائل باستخدام فورمات JSON كما كان مُعطى لنا من قِبل منصة الفيسبوك، ثم سنجعل POST يتصل عبر cURL، إذا تمت كتابة الكود بشكل صحيح، فمن المتوقع أن ترى أي ردة فعل على البوت.

كما ترى فإن البوت ملئ بالرسائل سواء valid أو invalid وذلك وفق القواعد التي أمليناها عليه.

لقد حان الوقت لتُبدع وتنشئ أول بوت، يُفضل إضافة السطور التالية من الكود في الويب سايت حتى يكون الوت الخاص بك public وذلك لدعوة الآخرين، تحقق من الكود الأصلي لذلك على  Github.

 

مصدر Develop your first Facebook messenger bot in PHP How to create a Facebook messenger bot in PHP
تعليقات
Loading...