SIP Provider Plugins¶
SIP provider plugins are the most common use case. In Faxbot, plugin type follows capability, not protocol. SIP is the transport layer — your plugin should implement the base class that matches what you’re doing:
- SIP for T.38 fax transmission →
FaxPlugin(category:outbound) - SIP for SMS via SIP MESSAGE →
MessagingPlugin(category:messaging) - SIP for voice (if added in the future) → a new
VoicePlugintype
Typical SIP Fax Provider¶
For T.38 fax over SIP, create a FaxPlugin with categories: ["outbound"] and capabilities: ["send_fax", "get_status"].
Example manifest.json:
{
"id": "faxbot-sip-flowroute",
"name": "Flowroute SIP Fax",
"categories": ["outbound"],
"capabilities": ["send_fax", "get_status"]
}
Example plugin skeleton (Python):
from faxbot_plugin_dev import FaxPlugin, SendResult
class FlowrouteSIPPlugin(FaxPlugin):
async def send_fax(self, to_number, file_path, options=None):
# 1. Convert PDF to TIFF
# 2. Connect to Asterisk AMI
# 3. Originate call with T.38
# 4. Track via channel events
return SendResult(job_id="...", backend=self.manifest().id)
Why This Mapping Makes Sense¶
The existing SIP/Asterisk backend (self‑hosted) is a fax transmission backend alongside Phaxio and Sinch. Each SIP trunk provider (Bandwidth, Flowroute, Twilio SIP, Voxbone, etc.) differs in:
- Authentication methods
- T.38 codec preferences
- Number formatting requirements
- Billing/metadata APIs
- Regional coverage
By packaging each as a plugin, users can install the one that matches their trunk without modifying core.
pip install faxbot-sip-bandwidth
# or
pip install faxbot-sip-flowroute
This design also allows the same SIP provider to offer multiple plugins when appropriate:
faxbot-twilio-fax—FaxPluginusing Twilio’s SIP trunking for T.38faxbot-twilio-sms—MessagingPluginusing Twilio’s SMS API
Shared authentication or configuration can live in a common internal module if desired, but keep each plugin focused on its capability to avoid backend leakage in the UI and API.