Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Sms Streamtelecom Bundle Laravel Package

avtonom/sms-streamtelecom-bundle

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation:

    composer require avtonom/sms-streamtelecom-bundle ~1.1
    

    Replace ~1.1 with the latest version from releases.

  2. Register Bundles in config/bundles.php (Symfony 4+):

    return [
        // ...
        KPhoen\SmsSenderBundle\KPhoenSmsSenderBundle::class,
        Avtonom\Sms\StreamtelecomBundle\AvtonomSmsStreamtelecomBundle::class,
    ];
    
  3. Configure in .env:

    SMS_PROVIDER_STREAMTELECOM_LOGIN=your_login
    SMS_PROVIDER_STREAMTELECOM_PASSWORD=your_password
    SMS_PROVIDER_STREAMTELECOM_ORIGINATORS=["SenderName"]
    
  4. Define Logger (optional but recommended):

    # config/services.yaml
    services:
        avtonom_sms.logger:
            class: Symfony\Component\Monolog\Logger
            arguments: ['sms']
    
  5. First Use Case: Inject sms.sender service and send an SMS:

    $this->get('sms.sender')->send('+79123456789', 'Hello from Laravel!', 'YourBrand');
    

Implementation Patterns

Core Workflow

  1. Service Initialization:

    • The bundle extends KPhoenSmsSenderBundle, so leverage its provider pool (memory by default).
    • Configure streamtelecom as the provider in config/packages/k_phoen_sms_sender.yaml:
      k_phoen_sms_sender:
          providers: [streamtelecom]
          factories: ["%kernel.project_dir%/vendor/avtonom/sms-streamtelecom-bundle/Resources/config/provider_factories.xml"]
      
  2. Sending SMS:

    • Use dependency injection for SmsSenderInterface:
      use SmsSender\SmsSenderInterface;
      
      public function __construct(private SmsSenderInterface $sender) {}
      
    • Send with originator (sender name) and phone number:
      $this->sender->send('+79123456789', 'Test message', 'YourBrand');
      
  3. Balance & Session Management:

    • Access the provider directly via SmsSender\Provider\ProviderInterface:
      $provider = $this->sender->getProvider('streamtelecom');
      $balance = $provider->getBalance(); // Returns float
      $sessionId = $provider->getSessionId(); // For API auth
      
  4. Error Handling:

    • Wrap calls in try-catch for WrappedException:
      try {
          $this->sender->send($phone, $message, $originator);
      } catch (\SmsSender\Exception\WrappedException $e) {
          $data = $e->getWrappedException()->getData();
          // Log $data['response'] for debugging
      }
      

Integration Tips

  • Validation: Use Symfony’s Validator to sanitize phone numbers before sending.
  • Rate Limiting: Implement a decorator around SmsSenderInterface to throttle requests (e.g., 1 SMS/minute).
  • Async Processing: Dispatch SMS sends as messages to a queue (e.g., Symfony Messenger) for background processing.
  • Testing: Mock ProviderInterface in unit tests:
    $this->sender->setProvider('streamtelecom', $mockProvider);
    

Gotchas and Tips

Pitfalls

  1. Deprecated Symfony2 Syntax:

    • The bundle assumes Symfony 2.x/3.x patterns (e.g., AppKernel). For Symfony 4+, ensure config/bundles.php is used instead of AppKernel.php.
    • Fix: Use config/packages/ for bundle configs.
  2. HTTP Adapter Conflicts:

    • The bundle defaults to CurlHttpAdapter. If using BuzzHttpAdapter, install it manually:
      composer require kriswallsmith/buzz
      
    • Tip: Configure the adapter in services.yaml:
      services:
          Avtonom\Sms\StreamtelecomBundle\Adapter\BuzzHttpAdapter: ~
      
  3. Originator Validation:

    • If originators is empty in config, the bundle skips sender-name validation. Populate it to enforce branding:
      parameters:
          sms.provider.streamtelecom.originators: ["YourBrand", "Support"]
      
  4. Session Management:

    • The provider caches the session ID. If credentials change, manually clear the cache or restart the app.
  5. Logging:

    • The logger (avtonom_sms.logger) is optional but critical for debugging. Ensure it’s configured to write to a file/channel.

Debugging Tips

  • API Responses: Dump raw responses in exceptions:
    catch (\SmsSender\Exception\WrappedException $e) {
        var_dump($e->getWrappedException()->getData()['response']);
    }
    
  • Balance Issues: Check if the API returns balance in a non-standard format (e.g., string vs. float).
  • Timeouts: Increase curl.timeout in php.ini if the API is slow:
    // In a service config
    services:
        Avtonom\Sms\StreamtelecomBundle\Adapter\CurlHttpAdapter:
            arguments: [30] # Timeout in seconds
    

Extension Points

  1. Custom Adapters:

    • Extend Avtonom\Sms\StreamtelecomBundle\Adapter\AbstractHttpAdapter to add retry logic or headers.
  2. Provider Decorators:

    • Decorate ProviderInterface to add features like:
      • Message templating.
      • Recipient timezone-aware scheduling (not natively supported).
  3. Event Dispatching:

    • Use Symfony’s event system to trigger actions on send failures:
      $this->sender->send($phone, $message, $originator);
      // Listen for SmsSenderEvents::ON_SEND_FAILURE
      
  4. Configuration Overrides:

    • Override default configs via environment variables:
      # config/packages/k_phoen_sms_sender.yaml
      streamtelecom:
          login: "%env(SMS_LOGIN)%"
          password: "%env(SMS_PASSWORD)%"
      
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
comsave/common
alecsammon/php-raml-parser
chrome-php/wrench
lendable/composer-license-checker
typhoon/reflection
mesilov/moneyphp-percentage
mike42/gfx-php
bookdown/themes
aura/view
aura/html
aura/cli
povils/phpmnd
nayjest/manipulator
omnipay/tests
psr-mock/http-message-implementation
psr-mock/http-factory-implementation
psr-mock/http-client-implementation
voku/email-check
voku/urlify
rtheunissen/guzzle-log-middleware