A framework agnostic PHP library to build chat bots

Overview

BotMan

Latest Version on Packagist Build Status codecov Scrutinizer Code Quality Packagist StyleCI Slack Monthly Downloads

https://phppackagedevelopment.com

If you want to learn how to create reusable PHP packages yourself, take a look at my upcoming PHP Package Development video course.

About BotMan

BotMan is a framework agnostic PHP library that is designed to simplify the task of developing innovative bots for multiple messaging platforms, including Slack, Telegram, Microsoft Bot Framework, Nexmo, HipChat, Facebook Messenger and WeChat.

$botman->hears('I want cross-platform bots with PHP!', function (BotMan $bot) {
    $bot->reply('Look no further!');
});

If you want to learn how to create reusable PHP packages yourself, take a look at my upcoming PHP Package Development video course.

Documentation

You can find the BotMan documentation at https://botman.io.

Support the development

Do you like this project? Support it by donating

Contributing

Please see CONTRIBUTING for details.

0 1 2 3 4 5 6 7

Security Vulnerabilities

If you discover a security vulnerability within BotMan, please send an e-mail to Marcel Pociot at [email protected]. All security vulnerabilities will be promptly addressed.

License

BotMan is free software distributed under the terms of the MIT license.

Issues
  • Telegram: Conversations

    Telegram: Conversations

    Hello,

    I use botman in a new Laravel 5.3 application. I have tried with the laravel starter, but i couldnt get it to work. So i started with a clean install.

    As I am not very familiar with Laravel, I got it working, except the conversations. I have taken the Example conversations from the Laravel Starter.

    When I use Start Conversation, the conversation is triggered and the buttons appear in Telegram. When I click a button, nothing happens.

    Can it be something with the cache? As i can read in previous issues and documentation, when used in Laravel, caching is automatic handled?

    Controller

    namespace App\Http\Controllers;
    use Illuminate\Http\Request;
    use Mpociot\BotMan\BotManFactory;
    use Mpociot\BotMan\BotMan;
    use App\Conversations\ExampleConversation;
    
    class BotManController extends Controller
    {
    	public function handle(Request $request)
    	{
    		$botman = app('botman');
    
    		// Simple respond method
    		$botman->hears('Hello|hi|Hi', function (BotMan $bot) {
    			//Reply
    			$bot->reply('Hi there :)');
    		});
    
    		$botman->hears('Start conversation', function (BotMan $bot) {
    			$bot->startConversation(new ExampleConversation());
    		});
    		
    		$botman->listen();
    	}
    }
    

    Conversation

    namespace App\Conversations;
    
    use Illuminate\Foundation\Inspiring;
    use Mpociot\BotMan\Answer;
    use Mpociot\BotMan\Button;
    use Mpociot\BotMan\Conversation;
    use Mpociot\BotMan\Question;
    
    class ExampleConversation extends Conversation
    {
        /**
         * First question
         */
        public function askReason()
        {
            $question = Question::create("Huh - you woke me up. What do you need?")
                ->fallback('Unable to ask question')
                ->callbackId('ask_reason')
                ->addButtons([
                    Button::create('Tell a joke')->value('joke'),
                    Button::create('Give me a fancy quote')->value('quote'),
                ]);
            return $this->ask($question, function (Answer $answer) {
                if ($answer->isInteractiveMessageReply()) {
                    if ($answer->getValue() === 'joke') {
                        $joke = json_decode(file_get_contents('http://api.icndb.com/jokes/random'));
                        $this->say($joke->value->joke);
                    } else {
                        $this->say(Inspiring::quote());
                    }
                }
            });
        }
    
        /**
         * Start the conversation
         */
        public function run()
        {
            $this->askReason();
        }
    }
    
    opened by mrtn 46
  • BotMan property in Conversation object

    BotMan property in Conversation object

    Didn't find a better place to ask this question, maybe Botman could have it's own gitter or slack? 😃

    Conversation object now get serialized and deserialized from the cache by loadActiveConversation in BotMan while BotMan is an attribute of Conversation itself. I am not yet familiar with a code enough to propose how to avoid this circular dependency, however, BotMan should really be a singleton (which will help to avoid problems with cache and storage drivers that require connecting to some backend). One way to do might be to not serialize it via __sleep and rather inject current BotMan instance in getStoredConversation.

    Any thoughts on this?

    opened by thedotedge 29
  • Start Conversation without hears

    Start Conversation without hears

    Is there a way to start a conversation with ->hears()?

    We are wanting to have our bot ask a question every morning at a certain time, how could we go about that with a conversation?

    opened by brianclogan 26
  • Listen to other data types

    Listen to other data types

    BotMan should be able to listen for other data types, such as images, audio, location or generic attachments.

    Proposed API

    // Images
    $botman->receivesImages(function($bot) {
       $data = $bot->getMessage()->getImages();
    });
    
    // Videos
    $botman->receivesVideos(function($bot) {
       $data = $bot->getMessage()->getVideos();
    });
    
    // Audio
    $botman->receivesAudio(function($bot) {
       $data = $bot->getMessage()->getAudio();
    });
    
    // Location
    $botman->receivesLocation(function($bot) {
       $data = $bot->getMessage()->getLocations();
    });
    
    // Generic
    $botman->receivesAttachments(function($bot) {
       $data = $bot->getMessage()->getAttachments();
    });
    

    Necessary Steps:

    Images

    • [X] Telegram Driver
    • [X] Slack RTM Driver
    • [X] Facebook Driver
    • [x] MS Bot Framework Driver
    • [x] WeChat Driver
    • [ ] HipChat Driver

    Videos

    • [X] Telegram Driver
    • [X] Slack RTM Driver
    • [X] Facebook Driver
    • [ ] MS Bot Framework Driver
    • [x] WeChat Driver
    • [ ] HipChat Driver

    Audio

    • [X] Telegram Driver
    • [X] Slack RTM Driver
    • [X] Facebook Driver ( @christophrumpel )
    • [x] WeChat Driver
    • [ ] HipChat Driver

    Location

    • [X] Telegram Driver
    • [X] Facebook Driver ( @christophrumpel )
    • [x] WeChat Driver
    • [ ] HipChat Driver

    Generic

    • [X] Telegram Driver
    • [X] Slack RTM Driver
    • [X] Facebook Driver ( @christophrumpel )
    • [X] MS Bot Framework Driver
    • [ ] WeChat Driver
    • [ ] HipChat Driver

    Related issue: #169

    help wanted 
    opened by mpociot 24
  • no answer, no exception

    no answer, no exception

    I just made like in tutorial

    use Mpociot\BotMan\BotManFactory;
    use Mpociot\BotMan\BotMan;
    use Mpociot\BotMan\Storages\Drivers\FileStorage;
    
    $token = 'MY-TOKEN';
    $config =  [
        'facebook_token' => $token,
        'facebook_app_secret' => 'MY-SECRET',
    
    ];
    
    // $storage = new FileStorage(__DIR__);
    // create an instance
    $botman = BotManFactory::create($config);
    $botman->verifyServices($token);
    
    $botman->hears('foo', function ($bot) {
        $bot->typesAndWaits(2);
        $bot->reply('Hello World');
    });
    // give the bot something to listen for.
    $botman->hears('.*', function (BotMan $bot) {
        $bot->reply('Hello yourself.');
    });
    
    // start listening
    $botman->listen();
    

    I see in logs...that facebook made request to my address. but no answer appear. Also didn't get anythng in error log.

    opened by adeptofvoltron 21
  • Serialization of 'Closure' is not allowed

    Serialization of 'Closure' is not allowed

    I'm using botman with laravel 5.4 when I try to run some conversation with ask function. It will result to Serialization of 'Closure' is not allowed. Example conversation:

    <?php
    namespace App\Conversations;
    
    use Illuminate\Foundation\Inspiring;
    
    use Mpociot\BotMan\Answer;
    use Mpociot\BotMan\Button;
    use Mpociot\BotMan\Conversation;
    use Mpociot\BotMan\Question;
    
    class ReservationConversation extends Conversation
    {
    
        /**
         * First question
         */
        public function askReason()
        {
            $question = Question::create("Ahoj, ako ti pomozem?")
                ->fallback('Unable to ask question')
                ->addButtons([
                    Button::create('Tell a joke')->value('joke'),
                    Button::create('Give me a fancy quote')->value('quote'),
                ]);
    
            return $this->ask($question, function (Answer $answer) {
                $this->say('Hello');
            });
        }
        /**
         * Start the conversation
         */
        public function run()
        {
            $this->askReason();
        }
    }
    

    When I take a look to stack trace I see that error comes from FileStore.php

    public function put($key, $value, $minutes)
        {
            $this->ensureCacheDirectoryExists($path = $this->path($key));
    
            $this->files->put(
                $path, $this->expiration($minutes).serialize($value), true
            );
        }
    
    opened by xar 19
  • botman->say()

    botman->say()

    Hi There,

    Firstly, awesome library, what more can be said.

    I was wondering if someone has a working example of botman->say, I am new to all of this and try as I may I can not originate messages to either skype or telegram, my own ignorance I am sure. (Got everything else working, hears, replies, conversations).

    What I am trying to do is originate a message to a user, using laravel, simple get route for testing as follows:

    public function testOriginate()
    {
    	\\ log at this point shows I get here
    	$botman = app('botman');
    	$botman->say('Hello There I have some interesting news','29:xxx',BotFrameworkDriver::class);
    }
    

    switching to telegram driver and user id has no effect. No errors in the log etc. Just seems to disappear into a dark abyss.

    Would appreciate a push down the rabbit hole.

    Thanks in advance.

    opened by jacquesvn 18
  • Does not send reply

    Does not send reply

    Helo, I have set up the botman project and configured facebook messenger, i can receive messages, but the reply() method does not send a message back to the user.

    I have also tried using botman:tinker but no reply also.

    I am using a windows 10 PC

    opened by jokamjohn 18
  • Add Laravel example to readme.md

    Add Laravel example to readme.md

    When I get a chance I'll update the readme.md with a working implementation on how to get SlackBot up and running from a Laravel 5 app.

    opened by jerairrest 18
  • Nothing being passed in Payload

    Nothing being passed in Payload

    For some reason, the payload that comes from Slack is empty, is that an issue with the repo, or slack?

    I followed your directions, setup a route that responds with the URL verification, that works just fine, but when I send a message to the bot, Slack sends a message with the $request variable being completely empty. Am I missing something here?

    opened by brianclogan 18
  • Buttons and carousel not showing on apps

    Buttons and carousel not showing on apps

    • BotMan Version: 2.0
    • PHP Version: 8.0.3
    • Messaging Service(s): Facebook Messenger
    • Cache Driver: FacebookDriver

    Description:

    When I send a message to the bot from desktop app or mobile app and it is supposed to answer with a text answer and a carousel or buttons, I get only the text from the answer, but it acts normally when I use the web interface (messenger.com) to send messages. Also, the same messages that misses the buttons on mobile acts as it should on web app

    Steps To Reproduce:

    • open messenger app on mobile
    • open messenger app on web (messenger.com)
    • send a message to the bot that triggers a carousel or a quick answer

    This is how it works on web app: On web

    This is how it works on mobile On mobile

    opened by stsmuniz 0
  • Start conversation without user input

    Start conversation without user input

    • BotMan Version: 2.6.1
    • PHP Version:7.4
    • Messaging Service(s):
    • Cache Driver:

    Description:

    I would like to know how I can make botman initiate a conversation without prior user input. That is, when Botman loads that starts the conversation. Thanks

    Steps To Reproduce:

    opened by gus-at-2122 0
  • Form in Slack Bot to Submit GitHub Issue

    Form in Slack Bot to Submit GitHub Issue

    • BotMan Version: #.#.#
    • PHP Version: 7.2.34
    • Messaging Service(s): Slack to Github
    • Cache Driver:RTM

    Description: I have created a Slack app which can create GitHub issue using RTM driver. The app asks questions and the user has to enter one by one to create a GitHub issue.

    But currently, I want to create a GitHub issue using the form or modal in the slack. The user needs to enter the form and submit instead of one-by-one answering. Is this possible to do via botman. What is the process to implement this type of behavior?

    Steps To Reproduce:

    opened by bkuppala95 0
  • BotMan Timeout

    BotMan Timeout

    • BotMan Version: 2.6.1
    • PHP Version: 7.3.2
    • Messaging Service(s): Skype, Telegram
    • Cache Driver: none

    Description:

    How do I set timeout for BotMan say method? I searched through documentation and source code but Curl.php has not any timeout options. By default cURL has very big timeout which is not applicable in the real app.

    opened by decadence 1
  • Loading database data to build a Carousel (Facebook)

    Loading database data to build a Carousel (Facebook)

    • BotMan Version: 2.0
    • PHP Version: 7.4
    • Messaging Service(s): Facebook
    • Cache Driver:

    Description:

    I want to load a Carousel which data is coming from a database. No errors are being raised, but no carousel is being loaded. Someone help please or point me to the right direction. Thank you.

    Steps To Reproduce:

    $items = new Product(); $products = $items->GetProducts(); $i = 1; $elements = array(); foreach ($products as $product) { if ($i <= 10) { $newproduct[] = array( Element::create($product['name'].' ('.$product['price'].')') ->subtitle($product['subtitle']) ->image($product['img']) ->addButton(ElementButton::create('Order Now!') ->payload('add_order '.$product['id']) ->type('postback')) );
    $elements = $newproduct; $bot->reply($elements); $i = $i+1; } else { $bot->reply(GenericTemplate::create() ->addImageAspectRatio(GenericTemplate::RATIO_SQUARE) ->addElements($elements)); $i = 1; $elements = array(); }

    opened by sherwinaval 0
  • Collect funding from Tidelift

    Collect funding from Tidelift

    Community / funding issue, not a Botman bug.

    Description:

    I was checking out Tidelift this morning and spotted your packages in the list of packages with funding available.

    Botman caught my eye there (I'm a Hubot user currently with some concerns about that platform's future), so I checked your project out, and spotted that the README mentions a few other funding methods but not Tidelift.

    I have no interest in Tidelift (entry pricing to support it too rich for my blood) but thought you might want to know since your project does request funding as I see. (I'm aware this issue sounds a lot like email spam right now 🤷🏼, so apologies if I myself have been taken in). I don't assume Tidelift is right for you, there may be licensing specifics or fine print or some "you need to be this high to ride" requirement. OTOH it looks like Tidelift have coin for you if you want it ... I guess someone who uses your packages is a Tidelift subscriber?

    Steps To Reproduce:

    Proposed solution

    Issue opened with the best of intentions - apologies if it's at all a timewaster!

    opened by xurizaemon 0
  • The

    The "Symfony\Component\HttpFoundation\Response::create()" method is deprecated

    • BotMan Version: ^2.6
    • PHP Version: 7.4.3
    • Messaging Service(s): Facebook
    • Cache Driver: ??

    Description:

    Steps To Reproduce:

    Install Botman standalone following the installation on the page here: https://botman.io/2.0/installation and here: https://botman.io/2.0/driver-facebook-messenger Then at the Facebook callback URL verification, the challenge fails with the php error message:

    [UNKNOWN in /var/www/html/test/vendor/symfony/deprecation-contracts/function.php:25] Since symfony/http-foundation 5.1: The "Symfony\Component\HttpFoundation\Response::create()" method is deprecated, use "new Symfony\Component\HttpFoundation\Response()" instead.
    

    A Trace may could helps:

    #0 [internal function]: error_handler()
    #1 /var/www/html/test/vendor/symfony/deprecation-contracts/function.php(25): trigger_error()
    #2 /var/www/html/test/vendor/symfony/http-foundation/Response.php(237): trigger_deprecation()
    #3 /var/www/html/test/vendor/botman/driver-facebook/src/FacebookDriver.php(120): Symfony\Component\HttpFoundation\Response::create()
    #4 /var/www/html/test/vendor/botman/botman/src/Drivers/DriverManager.php(157): BotMan\Drivers\Facebook\FacebookDriver->verifyRequest()
    #5 /var/www/html/test/vendor/botman/botman/src/BotMan.php(530): BotMan\BotMan\Drivers\DriverManager::verifyServices()
    #6 /var/www/html/test/vendor/botman/botman/src/BotMan.php(416): BotMan\BotMan\BotMan->verifyServices()
    #7 /var/www/html/test/cb.php(36): BotMan\BotMan\BotMan->listen()
    #8 {main}
    
    opened by gymadarasz 0
  • How to get outgoing message id with conversation?

    How to get outgoing message id with conversation?

    • BotMan Version: 2.6
    • PHP Version: 7.4
    • Messaging Service(s): Telegram
    • Cache Driver: file

    Im trying to remove outgoing message. I need message_id from response. It's easy with Botman's say method:

    $response = BotMan::say("ping", "***", \BotMan\Drivers\Telegram\TelegramDriver::class);
    $response = json_decode($response->getContent(), true);
    $response['result']['message_id'];
    

    But there are problems with conversation say method:

     $this->ask($message, function(Answer $answer) {
    
            $response = $this->say("ping" );
    
           // This $response contains this conversation object. I need $response how in BotMan::say(). 
    
      });
    

    How can i get the outgoing message id with conversation?

    opened by Cyrtolat 1
  • Web driver php 8 error: Cannot use positional argument after named argument

    Web driver php 8 error: Cannot use positional argument after named argument

    • BotMan Version: 2.6.1
    • PHP Version: 8.0.2
    • Messaging Service(s): Web
    • Cache Driver: laravel file driver

    Description:

    Error: Cannot use positional argument after named argument {"exception":"[object] (Error(code: 0): Cannot use positional argument after named argument at ..../vendor/botman/botman/src/BotMan.php:495)

    Tried to change the order to first positional followed by the named arguments: in BotMan.php line 474 to 487: image (didn't change comments, so they are invalid)

    But that ends in another error: Named parameter $id overwrites previous argument {"exception":"[object] (Error(code: 0): Named parameter $id overwrites previous argument at ..../vendor/botman/botman/src/BotMan.php:495)

    The paramters I get from the matcher: image (after mentioned changes)

    Steps To Reproduce:

    Just started the conversation with the starting message "start72/de". 72 is $id and "de" is the $locale in my case $bot->hears('start{id}/{locale}', function ($bot, $id, $locale) {...}

    opened by lostertschnig 2
  • Botman Studio don't reply

    Botman Studio don't reply

    • BotMan Version: 2
    • PHP Version:7
    • Messaging Service(s):
    • Cache Driver:

    Description:

    I started a new project with Botman Studio

    composer create-project --prefer-dist botman/studio test then I do update

    cd test
    composer up
    

    and then installed drivers : facebook and telegram .

    composer require botman/driver-facebook
    composer require botman/driver-telegram
    

    done with installing

    then I do

    php artisan key:gen
    php artisan serve
    

    I go to localhost , it works fine. I say "hi" it replay "Hello!"

    I edit .env file added token Facebook and Telegram

    FACEBOOK_TOKEN=my_app_token
    FACEBOOK_APP_SECRET=my_secret
    FACEBOOK_VERIFICATION=my_verification
    TELEGRAM_TOKEN='my_bo_ttoken'
    

    I upload this project to my host

    move publicfile to public_htmledit index file

    require __DIR__.'/test/vendor/autoload.php';
    $app = require_once __DIR__.'/test/bootstrap/app.php';
    

    the host works fine. I tested it Responded to all on web and telegram for every user . But in Facebook it Respond only to me like telegram and web my_domain/botman/tinker . when new user say "hi" , it not respond at all .

    Steps To Reproduce:

    opened by hussenk 3
Releases(2.6.1)
  • 2.6.1(Sep 10, 2020)

  • 2.6.0(May 31, 2020)

    Changes

    • Added missing namespace 'File' (#1105)
    • Apply fixes from StyleCI (#1107)
    • symfony/http-foundation 5.0 (#1117)
    • Allow any callable as a callback (#1102)
    • Added OutgoingMessage type to BotMan::reply() $message parameter (#1104)
    • Add tests for PHP 7.4. (#1134)
    • Update LaravelCache.php (#1028)
    • Indicate possible null values in PHPDoc @return (#1097)
    • Updated compatibility for tightenco/collect (#1063)
    • fix wit ai connection (#1131)
    • Add Select action for Slack (#1087)
    • Allow BotMan to hear from an array of commands (#855)
    • Fix type of Curl::prepareRequest() (#1059)
    Source code(tar.gz)
    Source code(zip)
  • 2.4.1(Aug 9, 2018)

  • 2.4.0(Aug 8, 2018)

    Added

    • Added ability to listen for multiple events at once

    Fixed

    • Fixed Symfony dependency issues
    • Allow using opis/closure 3.0
    • Fix invalid conversation cache handling
    Source code(tar.gz)
    Source code(zip)
  • 2.3.3(May 2, 2018)

  • 2.3.2(Apr 16, 2018)

  • 2.3.1(Apr 3, 2018)

  • 2.3.0(Feb 20, 2018)

    Added

    • Added extras on attachment objects
    • Added support for Laravel's autowiring in the PSR-11 implementation

    Fixed

    • Fixed an issue with custom middleware added to specific hears commands
    Source code(tar.gz)
    Source code(zip)
  • 2.2.0(Feb 19, 2018)

  • 2.1.10(Feb 7, 2018)

  • 2.1.9(Jan 19, 2018)

  • 2.1.8(Jan 18, 2018)

  • 1.5.9(Jan 15, 2018)

  • 2.1.7(Jan 12, 2018)

  • 2.1.6(Dec 19, 2017)

  • 2.1.5(Dec 4, 2017)

  • 2.1.4(Dec 1, 2017)

  • 2.1.3(Oct 18, 2017)

  • 2.1.2(Oct 9, 2017)

  • 2.1.1(Oct 5, 2017)

  • 2.1.0(Sep 30, 2017)

    Added

    • Added ability to cache message user information (#542)
    • Added macro functionality to the Conversation method
    • Added getStoredConversationQuestion method
    • Improved Fake Driver

    Fixed

    • Fix incorrect 'conversation_cache_time' config path (#557)
    Source code(tar.gz)
    Source code(zip)
  • 2.0.4(Sep 11, 2017)

  • 2.0.3(Sep 10, 2017)

  • 2.0.2(Sep 6, 2017)

    Added

    • Drivers can have a method called additionalDrivers to simplify manual driver loading, when not using BotMan studio.

    Fixed

    • Fixed matching middleware inside of conversations not receiving the manipulated $message object.
    Source code(tar.gz)
    Source code(zip)
  • 2.0.1(Aug 28, 2017)

    Added

    • Added ability to originate inline conversations.
    • Moved each driver into their own repository.
    • Facebook - Added support to send file and audio attachments.
    • Telegram - Added support to send file, audio and location attachments.
    • Added Kik driver.
    • Added custom Attachment classes.
    • Added support to listen for message service events.
    • Changed the way middleware works in BotMan.
    • Added support for Slack interactive menu messages.
    • Added Facebook Referral driver.
    • Allow replying to an existing thread for Slack drivers (#327).
    • Added loadDriver method to BotMan.
    • Added ability to use BotMan with a local socket.

    Changed

    • Switched from plain text to JSON responses for Slack slash commands, to allow richer message formatting.
    • Moved message matching into a separate Matcher class.

    Removed

    • Removed FacebookPostbackDriver, FacebookOptinDriver and FacebookReferralDriver in favor of the new event API.
    Source code(tar.gz)
    Source code(zip)
  • 1.5.8(Jul 12, 2017)

    [1.5.8]

    Added

    • Allow adding of plain array buttons on Element class (#448)
    • Added Authentication to RedisStorage (#439)

    Fixed

    • Fixes an issue with Facebook attachment detection. (#463)
    Source code(tar.gz)
    Source code(zip)
  • 1.5.7(May 30, 2017)

  • 1.5.6(May 18, 2017)

  • 1.5.5(Apr 24, 2017)

Mailgun's Official SDK for PHP

Mailgun PHP client This is the Mailgun PHP SDK. This SDK contains methods for easily interacting with the Mailgun API. Below are examples to get you s

Mailgun Team 975 Jun 10, 2021
PHP library for the GitHub API v3

GitHub API v3 - PHP Library Currently under construction. Overview Provides access to GitHub API v3 via an Object Oriented PHP library. The goal of th

Darren Rees 62 Jan 13, 2021
PHP library for the Stripe API.

Stripe PHP bindings The Stripe PHP library provides convenient access to the Stripe API from applications written in the PHP language. It includes a p

Stripe 2.9k Jun 18, 2021
A PHP library for the Campaign Monitor API

createsend A PHP library which implements the complete functionality of the Campaign Monitor API. Installation Composer If you use Composer, you can r

Campaign Monitor 280 May 29, 2021
A PHP library for communicating with the Twilio REST API and generating TwiML.

twilio-php The default branch name for this repository has been changed to main as of 07/27/2020. Documentation The documentation for the Twilio API c

Twilio 1.3k Jun 3, 2021
PHP 5.3+ library which helps you to interact with the DigitalOcean API

DigitalOcean The version 2 of the API will be available soon ! Please visit DigitalOceanV2 and contribute :) This PHP 5.3+ library helps you to intera

Antoine Kirk 158 May 4, 2021
Twitter REST API for PHP 5.3+

README The Wid'op Twitter REST library is a modern PHP 5.3+ API allowing you to easily interact with Twitter 1.1. In order to sign your request with t

Wid'op 24 Aug 10, 2020
PHP library to use IOTA REST API to help node management and tangle queries

iota.php About PHP library to use IOTA REST API to help node management and tangle queries. Please be aware that this library is in an early developme

IOTA Community 13 Jun 16, 2021
Adds a specific header to every response to disable Google's usage of your site in it's FLoC tracking method.

Go Unfloc Yourself Description A bundle for Symfony 5 that adds a Permissions-Policy header in all the responses to prevent the use of new Google's "F

(infinite) loophp 3 Apr 29, 2021
[DEPRECATED] A Pusher Channels bridge for Laravel

DEPRECATED Laravel now has built-in support for Pusher Channels. This is now the recommended approach to integrate Channels into a Laravel project. Cu

Pusher 410 May 7, 2021
Official repository of the AWS SDK for PHP (@awsforphp)

AWS SDK for PHP - Version 3 The AWS SDK for PHP makes it easy for developers to access Amazon Web Services in their PHP code, and build robust applica

Amazon Web Services 5.2k Jun 18, 2021
A versatile PHP Library for Google PageSpeed Insights

PhpInsights An easy-to-use API Wrapper for Googles PageSpeed Insights. The JSON response is mapped to objects for an headache-free usage. Installation

Daniel Sentker 108 Jan 25, 2021
A simple PHP GitHub API client, Object Oriented, tested and documented.

PHP GitHub API A simple Object Oriented wrapper for GitHub API, written with PHP. Uses GitHub API v3 & supports GitHub API v4. The object API (v3) is

KNP Labs 1.9k Jun 18, 2021
oursms.app client library that allows you to send SMS

Oursms laravel client https://oursms.app client library that allows you to send SMS Installation Install oursms client with composer composer requir

Khalid Mohammad 11 Jun 11, 2021