<?php $verify_token = ""; // Verify token if (!empty($_REQUEST['hub_mode']) && $_REQUEST['hub_mode'] == 'subscribe' && $_REQUEST['hub_verify_token'] == $verify_token) { echo $_REQUEST['hub_challenge']; }
curl -ik -X POST "https://graph.facebook.com/v2.6/me/subscribed_apps?access_token=-token-"
composer require "pimax/fb-messenger-php" "dev-master"
<?php $verify_token = ""; // Verify token $token = ""; // Page token if (file_exists(__DIR__.'/config.php')) { $config = include __DIR__.'/config.php'; $verify_token = $config['verify_token']; $token = $config['token']; } require_once(dirname(__FILE__) . '/vendor/autoload.php'); use pimax\FbBotApp; use pimax\Messages\Message; use pimax\Messages\MessageButton; use pimax\Messages\StructuredMessage; use pimax\Messages\MessageElement; use pimax\Messages\MessageReceiptElement; use pimax\Messages\Address; use pimax\Messages\Summary; use pimax\Messages\Adjustment; $bot = new FbBotApp($token); if (!empty($_REQUEST['hub_mode']) && $_REQUEST['hub_mode'] == 'subscribe' && $_REQUEST['hub_verify_token'] == $verify_token) { // Webhook setup request echo $_REQUEST['hub_challenge']; } else { $data = json_decode(file_get_contents("php://input"), true); if (!empty($data['entry'][0]['messaging'])) { foreach ($data['entry'][0]['messaging'] as $message) { // // // ... } } }
$bot->send(new Message($message['sender']['id'], 'Hi there!'));
// if (!empty($message['delivery'])) { continue; } $command = ""; // , if (!empty($message['message'])) { $command = $message['message']['text']; // , } else if (!empty($message['postback'])) { $command = $message['postback']['payload']; } // switch ($command) { // When bot receive "text" case 'text': $bot->send(new Message($message['sender']['id'], 'This is a simple text message.')); break; // When bot receive "button" case 'button': $bot->send(new StructuredMessage($message['sender']['id'], StructuredMessage::TYPE_BUTTON, [ 'text' => 'Choose category', 'buttons' => [ new MessageButton(MessageButton::TYPE_POSTBACK, 'First button'), new MessageButton(MessageButton::TYPE_POSTBACK, 'Second button'), new MessageButton(MessageButton::TYPE_POSTBACK, 'Third button') ] ] )); break; // When bot receive "generic" case 'generic': $bot->send(new StructuredMessage($message['sender']['id'], StructuredMessage::TYPE_GENERIC, [ 'elements' => [ new MessageElement("First item", "Item description", "", [ new MessageButton(MessageButton::TYPE_POSTBACK, 'First button'), new MessageButton(MessageButton::TYPE_WEB, 'Web link', 'http://facebook.com') ]), new MessageElement("Second item", "Item description", "", [ new MessageButton(MessageButton::TYPE_POSTBACK, 'First button'), new MessageButton(MessageButton::TYPE_POSTBACK, 'Second button') ]), new MessageElement("Third item", "Item description", "", [ new MessageButton(MessageButton::TYPE_POSTBACK, 'First button'), new MessageButton(MessageButton::TYPE_POSTBACK, 'Second button') ]) ] ] )); break; // When bot receive "receipt" case 'receipt': $bot->send(new StructuredMessage($message['sender']['id'], StructuredMessage::TYPE_RECEIPT, [ 'recipient_name' => 'Fox Brown', 'order_number' => rand(10000, 99999), 'currency' => 'USD', 'payment_method' => 'VISA', 'order_url' => 'http://facebook.com', 'timestamp' => time(), 'elements' => [ new MessageReceiptElement("First item", "Item description", "", 1, 300, "USD"), new MessageReceiptElement("Second item", "Item description", "", 2, 200, "USD"), new MessageReceiptElement("Third item", "Item description", "", 3, 1800, "USD"), ], 'address' => new Address([ 'country' => 'US', 'state' => 'CA', 'postal_code' => 94025, 'city' => 'Menlo Park', 'street_1' => '1 Hacker Way', 'street_2' => '' ]), 'summary' => new Summary([ 'subtotal' => 2300, 'shipping_cost' => 150, 'total_tax' => 50, 'total_cost' => 2500, ]), 'adjustments' => [ new Adjustment([ 'name' => 'New Customer Discount', 'amount' => 20 ]), new Adjustment([ 'name' => '$10 Off Coupon', 'amount' => 10 ]) ] ] )); break; // Other message received default: $bot->send(new Message($message['sender']['id'], 'Sorry. I don't understand you.')); }
composer require fguillot/picofeed @stable composer require "pimax/fb-messenger-php" "dev-master"
<?php $verify_token = ""; // Verify token $token = ""; // Page token $config = []; // config if (file_exists(__DIR__.'/config.php')) { $config = include __DIR__.'/config.php'; $verify_token = $config['verify_token']; $token = $config['token']; } require_once(dirname(__FILE__) . '/vendor/autoload.php'); use PicoFeed\Reader\Reader; use pimax\FbBotApp; use pimax\Messages\Message; use pimax\Messages\MessageButton; use pimax\Messages\StructuredMessage; use pimax\Messages\MessageElement; $bot = new FbBotApp($token); if (!empty($_REQUEST['hub_mode']) && $_REQUEST['hub_mode'] == 'subscribe' && $_REQUEST['hub_verify_token'] == $verify_token) { // Webhook setup request echo $_REQUEST['hub_challenge']; } else { $data = json_decode(file_get_contents("php://input"), true); if (!empty($data['entry'][0]['messaging'])) { foreach ($data['entry'][0]['messaging'] as $message) { if (!empty($data['entry'][0])) { if (!empty($data['entry'][0]['messaging'])) { foreach ($data['entry'][0]['messaging'] as $message) { if (!empty($message['delivery'])) { continue; } $command = ""; if (!empty($message['message'])) { $command = $message['message']['text']; } else if (!empty($message['postback'])) { $command = $message['postback']['payload']; } if (!empty($config['feeds'][$command])) { getFeed($config['feeds'][$command], $bot, $message); } else { sendHelpMessage($bot, $message); } } } } } } } /** * Send Help Message * * @param $bot Bot instance * @param array $message Received message * @return bool */ function sendHelpMessage($bot, $message) { $bot->send(new StructuredMessage($message['sender']['id'], StructuredMessage::TYPE_BUTTON, [ 'text' => 'Choose category', 'buttons' => [ new MessageButton(MessageButton::TYPE_POSTBACK, 'All jobs'), new MessageButton(MessageButton::TYPE_POSTBACK, 'Web Development'), new MessageButton(MessageButton::TYPE_POSTBACK, 'Software Development & IT') ] ] )); $bot->send(new StructuredMessage($message['sender']['id'], StructuredMessage::TYPE_BUTTON, [ 'text' => ' ', 'buttons' => [ new MessageButton(MessageButton::TYPE_POSTBACK, 'Design & Multimedia'), new MessageButton(MessageButton::TYPE_POSTBACK, 'Mobile Application'), new MessageButton(MessageButton::TYPE_POSTBACK, 'Host & Server Management') ] ] )); $bot->send(new StructuredMessage($message['sender']['id'], StructuredMessage::TYPE_BUTTON, [ 'text' => ' ', 'buttons' => [ new MessageButton(MessageButton::TYPE_POSTBACK, 'Writing'), new MessageButton(MessageButton::TYPE_POSTBACK, 'Mobile Application'), new MessageButton(MessageButton::TYPE_POSTBACK, 'Marketing') ] ] )); $bot->send(new StructuredMessage($message['sender']['id'], StructuredMessage::TYPE_BUTTON, [ 'text' => ' ', 'buttons' => [ new MessageButton(MessageButton::TYPE_POSTBACK, 'Business Services'), new MessageButton(MessageButton::TYPE_POSTBACK, 'Translation & Languages') ] ] )); return true; } /** * Get Feed Data * * @param $url Feed url * @param $bot Bot instance * @param $message Received message * @return bool */ function getFeed($url, $bot, $message) { try { $reader = new Reader; $resource = $reader->download($url); $parser = $reader->getParser( $resource->getUrl(), $resource->getContent(), $resource->getEncoding() ); $feed = $parser->execute(); $items = array_reverse($feed->getItems()); if (count($items)) { foreach ($items as $itm) { $url = $itm->getUrl(); $message_text = substr(strip_tags($itm->getContent()), 0, 80); $bot->send(new StructuredMessage($message['sender']['id'], StructuredMessage::TYPE_GENERIC, [ 'elements' => [ new MessageElement($itm->getTitle(), $message_text, '', [ new MessageButton(MessageButton::TYPE_WEB, 'Read more', $url) ]), ] ] )); } } else { $bot->send(new Message($message['sender']['id'], 'Not found a new projects in this section.')); } } catch (Exception $e) { writeToLog($e->getMessage(), 'Exception'); } return true; } /** * Log * * @param mixed $data Data * @param string $title Title * @return bool */ function writeToLog($data, $title = '') { $log = "\n------------------------\n"; $log .= date("Ymd G:i:s") . "\n"; $log .= (strlen($title) > 0 ? $title : 'DEBUG') . "\n"; $log .= print_r($data, 1); $log .= "\n------------------------\n"; file_put_contents(__DIR__ . '/imbot.log', $log, FILE_APPEND); return true; }
<?php return [ 'token' => '', // 'verify_token' => '', // 'feeds' => [ 'All jobs' => 'https://job4joy.com/marketplace/rss/', 'Web Development' => 'https://job4joy.com/marketplace/rss/?id=3', 'Software Development & IT' => 'https://job4joy.com/marketplace/rss/?id=5', 'Design & Multimedia' => 'https://job4joy.com/marketplace/rss/?id=2', 'Mobile Application' => 'https://job4joy.com/marketplace/rss/?id=7', 'Host & Server Management' => 'https://job4joy.com/marketplace/rss/?id=6', 'Writing' => 'https://job4joy.com/marketplace/rss/?id=8', 'Customer Service' => 'https://job4joy.com/marketplace/rss/?id=10', 'Marketing' => 'https://job4joy.com/marketplace/rss/?id=11', 'Business Services' => 'https://job4joy.com/marketplace/rss/?id=12', 'Translation & Languages' => 'https://job4joy.com/marketplace/rss/?id=14', ] ];
Source: https://habr.com/ru/post/281559/
All Articles