# Servicio de SMS - BroadcasterMobile

## Descripción

Sistema integrado para envío de SMS a través de la API de BroadcasterMobile. Incluye soporte para:
- Códigos OTP de verificación
- Links de descarga de pólizas

## Configuración

### Credenciales API

```php
URL: https://api.broadcastermobile.com/brdcstr-endpoint-web/services/messaging/
API Key: 15225
Country: DO
Dial: 125252
Authorization: AcNw1Q7hs7tzkG2Gy1kdTw9EI/k=
```

Las credenciales están configuradas en: `classes/SMSService.php`

## Uso

### 1. Envío de SMS OTP

```php
require_once 'classes/SMSService.php';

$smsService = new SMSService();
$resultado = $smsService->enviarOTP('8095551234', '123456');
```

**Mensaje enviado:**
```
Su código OTP para validar su transaccion es 123456
```

### 2. Envío de SMS con Link de Póliza

```php
$smsService = new SMSService();
$resultado = $smsService->enviarLinkPoliza('8095551234', 'https://example.com/poliza');
```

**Mensaje enviado:**
```
Para descargar su poliza y marbete acceda a: https://example.com/poliza
```

## Formato de Teléfono

- **Input esperado:** 10 dígitos (ej: `8095551234`)
- **Formato enviado a API:** Se agrega prefijo `1` automáticamente (ej: `18095551234`)
- **País:** República Dominicana (DO)

## Integración con TransactionManager

### Envío automático de OTP

Cuando se llama a `enviarOTP($transactionId)`:

```php
// TransactionManager.php línea 167
$this->smsService->enviarOTP($transaccion['telefono'], $codigo);
```

### Envío automático de link de póliza

Cuando se emite una póliza exitosamente:

```php
// TransactionManager.php línea 441
$downloadLink = "{$baseUrl}/admin/download_policy.php?t={$transactionId}";
$this->smsService->enviarLinkPoliza($transaccion['telefono'], $downloadLink);
```

## Testing

### 1. Endpoint de API

**URL:** `POST /api/test-sms`

**Body para OTP:**
```json
{
  "telefono": "8095551234",
  "tipo": "otp",
  "codigo": "123456"
}
```

**Body para Póliza:**
```json
{
  "telefono": "8095551234",
  "tipo": "poliza",
  "link": "https://example.com/poliza"
}
```

### 2. Interfaz Web

Acceder a: `https://tu-dominio.com/admin/test_sms.php`

Formulario interactivo para probar ambos tipos de SMS.

## Respuestas de la API

### Respuesta Exitosa

```json
{
  "success": true,
  "message": "SMS enviado correctamente",
  "data": {
    // Respuesta de BroadcasterMobile
  }
}
```

### Respuesta de Error

```json
{
  "success": false,
  "error": "Mensaje de error descriptivo"
}
```

## Manejo de Errores

El servicio implementa manejo robusto de errores:

1. **Validación de formato:** Verifica que el teléfono tenga 10 dígitos
2. **Timeout:** Configurado a 30 segundos
3. **Logging:** Registra todos los intentos (éxitos y fallos)
4. **No-blocking:** Si el SMS falla, la transacción continúa

```php
try {
    $this->smsService->enviarOTP($telefono, $codigo);
} catch (Exception $e) {
    // Log del error pero no falla la transacción
    $this->logger->warning('Error al enviar SMS', ['error' => $e->getMessage()]);
}
```

## Logs

Todos los SMS enviados se registran en el log del sistema:

```
[2024-11-06 10:30:15] INFO: Enviando SMS OTP {"celular":"8095551234","msisdn":"18095551234"}
[2024-11-06 10:30:16] INFO: SMS OTP enviado exitosamente {"celular":"8095551234","response":{...}}
```

## Activación en Producción

Actualmente el envío real de SMS está **comentado** en `TransactionManager.php` línea 545:

```php
// return $this->smsService->enviarOTP($telefono, $mensaje);
```

Para activar:
1. Descomentar la línea
2. Verificar que las credenciales sean correctas
3. Probar con números de prueba primero

## Costos

Consultar con BroadcasterMobile sobre:
- Costo por SMS enviado
- Límites de rate limiting
- Plan contratado

## Soporte

Para problemas con el servicio de SMS:
- **API:** https://api.broadcastermobile.com/
- **Testing:** `admin/test_sms.php`
- **Logs:** Revisar `Logger` para detalles de errores
