Coder Social home page Coder Social logo

laravel-notification-channels / facebook Goto Github PK

View Code? Open in Web Editor NEW
151.0 21.0 32.0 115 KB

๐Ÿ“จ Facebook Notifications Channel for Laravel

Home Page: https://laravel-notification-channels.com/facebook/

License: MIT License

PHP 100.00%
facebook laravel-6-package facebook-messenger laravel-notifications laravel-notification-channels facebook-page facebook-notification laravel php notifications

facebook's Introduction

Facebook Notifications Channel for Laravel

Join PHP Chat Chat on Telegram Latest Version on Packagist Software License Quality Score Total Downloads

This package makes it easy to send notifications using the Facebook Messenger with Laravel.

Contents

Installation

You can install the package via composer:

composer require laravel-notification-channels/facebook

Setting up your Facebook Bot

Follow the Getting Started guide in order to create a Facebook Messenger app, a Facebook page and a page token, which is connecting both.

Next we need to add this token to our Laravel configurations. Create a new Facebook section inside config/services.php and place the page token there:

// config/services.php
...
'facebook' => [
    'page-token' => env('FACEBOOK_PAGE_TOKEN', 'YOUR PAGE TOKEN HERE'),
    
    // Optional - Omit this if you want to use default version.
    'version'    => env('FACEBOOK_GRAPH_API_VERSION', '4.0')
    
    // Optional - If set, the appsecret_proof will be sent to verify your page-token.
    'app-secret' => env('FACEBOOK_APP_SECRET', '')
],
...

Usage

Let's take an invoice-paid-notification as an example. You can now use the Facebook channel in your via() method, inside the InvoicePaid class. The to($userId) method defines the Facebook user, you want to send the notification to.

Based on the details you add (text, attachments etc.) will determine automatically the type of message to be sent. For example if you only add text() then it will be a basic message; using attach() will turn this into a attachment message. Having buttons or cards will change this to the Button Template and Generic Template respectivily

use NotificationChannels\Facebook\FacebookChannel;
use NotificationChannels\Facebook\FacebookMessage;
use NotificationChannels\Facebook\Components\Button;
use NotificationChannels\Facebook\Enums\NotificationType;

use Illuminate\Notifications\Notification;

class InvoicePaid extends Notification
{
    public function via($notifiable)
    {
        return [FacebookChannel::class];
    }

    public function toFacebook($notifiable)
    {
        $url = url('/invoice/' . $this->invoice->id);

        return FacebookMessage::create()
            ->to($notifiable->fb_messenger_user_id) // Optional
            ->text('One of your invoices has been paid!')
            ->isUpdate() // Optional
            ->isTypeRegular() // Optional
            // Alternate method to provide the notification type.
            // ->notificationType(NotificationType::REGULAR) // Optional
            ->buttons([
                Button::create('View Invoice', $url)->isTypeWebUrl(),
                Button::create('Call Us for Support!', '+1(212)555-2368')->isTypePhoneNumber(),
                Button::create('Start Chatting', ['invoice_id' => $this->invoice->id])->isTypePostback() // Custom payload sent back to your server
            ]); // Buttons are optional as well.
    }
}

The notification will be sent from your Facebook page, whose page token you have configured earlier. Here's a screenshot preview of the notification inside the chat window.

Laravel Facebook Notification Example

Message Examples

Basic Text Message

Send a basic text message to a user

return FacebookMessage::create('You have just paid your monthly fee! Thanks')
    ->to($notifiable->fb_messenger_user_id);
Attachment Message

Send a file attachment to a user (Example is sending a pdf invoice)

return FacebookMessage::create()
    ->attach(AttachmentType::FILE, url('invoices/'.$this->invoice->id))
    ->to($notifiable->fb_messenger_user_id);
Generic (Card Carousel) Message

Send a set of cards / items to a user displayed in a carousel (Example is sending a set of links). Note you can also add up to three buttons per card

return FacebookMessage::create()
    ->to($notifiable->fb_messenger_user_id) // Optional
    ->cards([
        Card::create('Card No.1 Title')
            ->subtitle('An item description')
            ->url('items/'.$this->item[0]->id)
            ->image('items/'.$this->item[0]->id.'/image'),
        
        Card::create('Card No.2 Title')
            ->subtitle('An item description')
            ->url('items/'.$this->item[1]->id)
            ->image('items/'.$this->item[1]->id.'/image')
        // could add buttons using ->buttons($array of Button)
    ]); 

Routing a message

You can either send the notification by providing with the page-scoped user id (PSID) of the recipient to the to($userId) method like shown in the above example or add a routeNotificationForFacebook() method in your notifiable model:

...
/**
 * Route notifications for the Facebook channel.
 *
 * @return int
 */
public function routeNotificationForFacebook()
{
    return $this->fb_messenger_user_id;
}
...

Available Message methods

  • to($recipient, $type): (string|array) Recipient's page-scoped User id, phone_number, user_ref, post_id or comment_id (as one of the supported types - Use Enums\RecipientType to make it easier). Phone number supported format +1(212)555-2368. NOTE: Sending a message to phone numbers requires the pages_messaging_phone_number permission. Refer docs for more information.
  • text(''): (string) Notification message.
  • isResponse(): Set messaging_type as RESPONSE.
  • isUpdate(): (default) Set messaging_type as UPDATE.
  • isMessageTag($messageTag): (string) Set messaging_type as MESSAGE_TAG, you can refer and make use of the NotificationChannels\Facebook\Enums\MessageTag to make it easier to work with the message tag.
  • attach($attachment_type, $url): (AttachmentType, string) An attachment type (IMAGE, AUDIO, VIDEO, FILE) and the url of this attachment
  • buttons($buttons = []): (array) An array of "Call to Action" buttons (Created using NotificationChannels\Facebook\Components\Button::create()). You can add up to 3 buttons of one of the following types: web_url, postback or phone_number. See Button methods below for more details.
  • cards($cards = []): (array) An array of item cards to be displayed in a carousel (Created using NotificationChannels\Facebook\Components\Card::create()). You can add up to 10 cards. See Card methods below for more details.
  • notificationType(''): (string) Push Notification type: REGULAR will emit a sound/vibration and a phone notification; SILENT_PUSH will just emit a phone notification, NO_PUSH will not emit either. You can make use of NotificationType::REGULAR, NotificationType::SILENT_PUSH and NotificationType::NO_PUSH to make it easier to work with the type. This is an optional method, defaults to REGULAR type.
  • imageAspectRatio(''): (string) Image Aspect Ratio if Card with image_url present. You can use of ImageAspectRatioType::SQUARE or ImageAspectRatioType::HORIZONTAL. This is an optional method, defaults to ImageAspectRatioType::HORIZONTAL aspect ratio (image should be 1.91:1).
  • isTypeRegular(): Helper method to create a notification type: REGULAR.
  • isTypeSilentPush(): Helper method to create a notification type: SILENT_PUSH.
  • isTypeNoPush(): Helper method to create a notification type: NO_PUSH.

Available Button methods

  • title(''): (string) Button Title.
  • data(''): (string) Button Data - It can be a web url, postback data or a formated phone number.
  • type(''): (string) Button Type - web_url, postback or phone_number. Use ButtonType enumerator for guaranteeing valid values
  • isTypeWebUrl(): Helper method to create a web_url type button.
  • isTypePhoneNumber(): Helper method to create a phone_number type button.
  • isTypePostback(): Helper method to create a postback type button.

Available Card methods

  • title(''): (string) Card Title.
  • subtitle(''): (string) Card Subtitle.
  • url(''): (string) Card Item Url.
  • image(''): (string) Card Image Url. Image ratio should be 1.91:1
  • buttons($buttons = []): (array) An array of "Call to Action" buttons (Created using NotificationChannels\Facebook\Components\Button::create()). You can add up to 3 buttons of one of the following types: web_url, postback or phone_number. See Button methods above for more details.

Contributing

Please see CONTRIBUTING for details.

Credits

License

The MIT License (MIT). Please see License File for more information.

facebook's People

Contributors

casperboone avatar davidpiesse avatar dostrog avatar enniel avatar freekmurze avatar henokv avatar irazasyed avatar jclappiway avatar laravel-shift avatar mirnaxvb avatar mpociot avatar oyed avatar pschocke avatar themsaid avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

facebook's Issues

Installation Guide

Hey,

just tried it and it is working. Great work!
Only one two things I that could be better:

1.) Installation description
If you're not into Facebook it is really hard to understand what is happening and what are we / you going to achieve. Where does the message pop up? Which chat window between who?

I would also add some information about the "page-scoped User ID" what that is and where to get that. I got a chatbot already setup where I copied this ID, but I would not know where else I could get ip.

2.) Optional to() method. What is happening if I don't use that method? I didn't get that.

Cheers

Messaging Phone Number

Is it possible to show an example on how to message someone using a phone number??

return FacebookMessage::create() 
            ->to('+5521999823030')
            ->text('potato')

The format is: "+1(212)555-2368"
Correct?
But Im trying to send a message to a non-US phone...

Can someone tell me if using numbers from outside US is supported??

Btw, my output is:
"message": "Facebook responded with an error 100 - OAuthException (#100) Param recipient[id] must be a valid ID string (e.g., "123")"

Some Classes are missing

NotificationChannels\Facebook\Enums\NotificationType
NotificationChannels\Facebook\Component\Button

are not found. Kindly can you update the code?

How to get fb_messenger_user_id ?

Thanks for the great channel. @irazasyed

I have a basic question, how do we get "fb_messenger_user_id"?

Is there any way to get it and store it to 'users' table associated with user?

Thanks in advance.

100 - OAuthException (#100) param recipient must be non-empty

Hi,

Just made a fresh clone of this repo and I'm getting "100 - OAuthException (#100) param recipient must be non-empty error" in laravel logs whenever I try sending text message. Meanwhile the version fetched via composer require laravel-notification-channels/facebook works fine.

Code review

Ping me when you're done writing the code and readme, then I'll do a code review.

Currently only uses Button Template

This currently only uses the Button Template for Facebook Messenger.
Is this intentional to restrain its ability.
For example we could also allow sending of

  • Attachments (files, images etc)
  • Generic message
  • Receipts
  • Basic text message with no buttons

If you want this functionality I can add this but I will have to rip up a bit of code that forces it currently down the Button Template route.

Another tweak I can add in:

  • Change API version to 2.7 (latest)

Error when Installing Package on Laravel 5.7

Can you guys add support for 5.7 please.

Using version ^0.0.2 for laravel-notification-channels/facebook
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for laravel-notification-channels/facebook ^0.0.2 -> satisfiable by laravel-notification-channels/facebook[0.0.2].
    - Conclusion: remove laravel/framework v5.7.0
    - Conclusion: don't install laravel/framework v5.7.0
    - laravel-notification-channels/facebook 0.0.2 requires illuminate/notifications 5.3.* || 5.4.* || 5.5.* || 5.6.* -> satisfiable by illuminate/notifications[5.3.x-dev, 5.4.x-dev, 5.5.x-dev, 5.6.x-dev, v5.3.0, v5.3.16, v5.3.23, v5.3.4, v5.4.0, v5.4.13, v5.4.17, v5.4.19, v5.4.27, v5.4.36, v5.4.9, v5.5.0, v5.5.16, v5.5.17, v5.5.2, v5.5.28, v5.5.33, v5.5.34, v5.5.35, v5.5.36, v5.5.37, v5.5.39, v5.5.40, v5.5.41, v5.5.43, v5.6.0, v5.6.1, v5.6.10, v5.6.11, v5.6.12, v5.6.13, v5.6.14, v5.6.15, v5.6.16, v5.6.17, v5.6.19, v5.6.2, v5.6.20, v5.6.21, v5.6.22, v5.6.23, v5.6.24, v5.6.25, v5.6.26, v5.6.27, v5.6.28, v5.6.29, v5.6.3, v5.6.30, v5.6.31, v5.6.32, v5.6.33, v5.6.34, v5.6.35, v5.6.36, v5.6.37, v5.6.38, v5.6.4, v5.6.5, v5.6.6, v5.6.7, v5.6.8, v5.6.9].
    - don't install illuminate/notifications 5.3.x-dev|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications 5.4.x-dev|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications 5.5.x-dev|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications 5.6.x-dev|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.3.0|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.3.16|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.3.23|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.3.4|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.4.0|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.4.13|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.4.17|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.4.19|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.4.27|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.4.36|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.4.9|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.5.0|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.5.16|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.5.17|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.5.2|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.5.28|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.5.33|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.5.34|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.5.35|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.5.36|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.5.37|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.5.39|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.5.40|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.5.41|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.5.43|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.0|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.1|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.10|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.11|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.12|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.13|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.14|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.15|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.16|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.17|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.19|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.2|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.20|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.21|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.22|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.23|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.24|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.25|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.26|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.27|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.28|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.29|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.3|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.30|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.31|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.32|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.33|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.34|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.35|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.36|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.37|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.38|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.4|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.5|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.6|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.7|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.8|don't install laravel/framework v5.7.0
    - don't install illuminate/notifications v5.6.9|don't install laravel/framework v5.7.0
    - Installation request for laravel/framework (locked at v5.7.0, required as 5.7.*) -> satisfiable by laravel/framework[v5.7.0].

updating pages

Hi,

How can I update my Facebook page with this package?

for example currently I'm updating my twitter account like:

public function toTwitter($post)
    {
        return (new TwitterStatusUpdate("New Article is here \n - $post->title  \n http://domain.pp/blog/$post->slug"))->withImage('http://domain.pp/storage/images/'.$post->image);
    }

but in this package documents i didn't find any sample for that matter, all i saw was about sending message.

can anyone help me with that?

appsecret_proof requrired

If I send a message via this package, I get the error from facebook that for the graph-api an appsecret_proof is required:

NotificationChannels/Facebook/Exceptions/CouldNotSendNotification with message 'Facebook resonded with an error 100 - GraphMethodException API calls from the server require an appsecret_proof argument'

If I attach it manually in the api method, the message is getting send. Is there a problem with my implementation or is this something new?

I am happy to PR my changes if there is any demand for this.

Page scoped user id

Hello,

I'm currently trying to send messages to facebook users.
However I only have access to the app scoped user ids, which I got after a successful 'login with facebook' process.

I've been researching this for hours and I can't find anything relevant or/and up to date to get the page scoped user id.

Could you provide some help on how to proceed to get this ?

Thanks,

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.