Opracowane przez Fayna Digital dla CampScout. Autor: Volodymyr Shevchenko
Konkretna implementacja dostawcy SMS dla TurboSMS (Ukraina).
Dziedziczy po fayna.sms.provider.base z modułu fayna_sms_base i realizuje wysyłkę przez TurboSMS REST API v2.
fayna.sms.turbosms— konkretny dostawca, implementujesend_sms()iget_delivery_status()- Wysyłka przez TurboSMS REST API v2 (
https://api.turbosms.ua/message/send.json) - Token API nigdy nie trafia do logów
- Obsługa błędów: timeout, connection error, HTTP error, niepoprawny JSON
_send_sms(numbers, body)— legacy batch API dla wstecznej kompatybilności- Przycisk „Wyślij testowy SMS" w Settings
- Konfiguracja przez Settings → General → TurboSMS: API Token (zamaskowany), Sender Name, API URL
- i18n:
uk_UA+pl_PL
fayna_sms_turbosms/
├── __manifest__.py
├── __init__.py
├── data/
│ └── ir_config_parameter.xml # feature flag + api_token + sender_name + api_url
├── models/
│ ├── fayna_sms_turbosms.py # fayna.sms.turbosms (AbstractModel)
│ └── res_config_settings.py # rozszerzenie Settings o pola TurboSMS
├── security/
│ └── ir.model.access.csv # ACL (bez konkretnych modeli — abstract only)
├── views/
│ └── res_config_settings_views.xml
├── tests/
│ ├── test_scaffold.py
│ └── test_fayna_sms_turbosms.py # 18 testów (wszystkie wywołania HTTP zamockowane)
├── i18n/
│ ├── uk_UA.po
│ └── pl_PL.po
├── docs/TZ.md
├── pyproject.toml
├── LICENSE
├── CHANGELOG.md
└── README.md
- Zainstaluj moduł
- Przejdź do Settings → General → TurboSMS
- Wklej token API z panelu TurboSMS
- Podaj nazwę nadawcy (domyślnie:
CampScout) - Kliknij „Wyślij testowy SMS", aby zweryfikować
Lub bezpośrednio przez System Parameters:
fayna_sms_turbosms.api_token = <twój token>
fayna_sms_turbosms.sender_name = CampScout
fayna_sms_turbosms.api_url = https://api.turbosms.ua/message/send.jsonsend_sms(phone, body) zwraca:
{"success": bool, "external_id": str | None, "error": str | None}Przykład wyniku sukcesu:
{"success": True, "external_id": "uuid-from-turbosms", "error": None}Przykład błędu:
{"success": False, "external_id": None, "error": "Request timeout (10s)."}{
"response_status": "OK",
"response_result": [
{
"phone": "+380XXXXXXXXX",
"message_id": "uuid",
"response_status": "OK"
}
]
}cd /opt/campscout/custom-addons
sudo -u \#1000 git clone https://github.com/fayna-digital/fayna-sms-turbosms.git fayna_sms_turbosms
docker exec campscout_web odoo -c /etc/odoo/odoo.conf -d campscout \
-i fayna_sms_turbosms --stop-after-init --no-http
docker restart campscout_webWymaga: zainstalowany fayna_sms_base i fayna_sms_base.active = True.
- CLAUDE.md — jak pracować z repo + baner #4ZONES (flow wdrożeniowy)
- docs/TZ.md — specyfikacja techniczna (6 obszarów spec-driven)
- docs/PLAN.md — dependency graph, fazy, checkpointy
- CHANGELOG.md — historia wydań
OPL-1 (Odoo Proprietary License v1.0) — zobacz LICENSE.
Opracowane przez Fayna Digital · Volodymyr Shevchenko