Transactional SMS for Shopware 6 with multi-provider routing for African networks (Termii, Sendexa, Africa's Talking, Twilio).
# SMS for Shopware 6
Transactional SMS for Shopware 6, sent alongside core email, with multi-provider direct-carrier routing for African networks.
## Table of contents
- Requirements
- Installation
- Configuration
- Architecture
- Features
- Local development
- Makefile commands
- Testing
- Code quality
- CI/CD
- Release process
- Logging and debugging
- Security
- Contributing
- License
## Requirements
| | |
| --- | --- |
| Shopware | `~6.6.0 || ~6.7.0` |
| PHP | 8.2 or newer |
| Database | MySQL 8.0+ / MariaDB 10.11+ |
## Installation
### Via Composer (recommended)
```bash
composer require kommandhub/sms-sw
bin/console plugin:refresh
bin/console plugin:install --activate KommandhubSmsSW
bin/console cache:clear
```
### Manual upload
Download the release zip and install it under **Extensions > My extensions >
Upload extension**, then activate it.
## Configuration
**Settings > Extensions > SMS for Shopware 6**
Every setting is sales-channel scoped: use the sales-channel selector at the top
of the configuration page to override a value for one channel only.
## Architecture
Feature-first modules under `src/`, following Shopware's own plugin layout. A
top-level directory *is* a boundary; inside it, flat Symfony-idiomatic folders
(`Service`, `Subscriber`, `Handler`, `Struct`, `Event`, `Enum`, `Controller`).
No `Application/Domain/Infrastructure` nesting — one obvious home per class.
Always present:
| Path | Responsibility |
| --- | --- |
| `src/KommandhubSmsSW.php` | plugin bootstrap and lifecycle hooks |
| `src/Setting/Service/Config.php` | typed, sales-channel-aware settings reader |
| `src/Logging/ConfigurableLogger.php` | PSR-3 wrapper gated on the debug settings |
| `src/Exception/` | plugin-scoped exception base |
| `src/Resources/config/` | `services.yml`, `config.xml`, `packages/` |
| `tests/Unit`, `tests/Integration` | mirror `src/` |
## Features
### Administration
Vue/JS sources live in `src/Resources/app/administration/src/`. Built out …