## Composer

La forma más sencilla de instalar [bulkgate/php-sdk](https://packagist.org/packages/bulkgate/php-sdk) en un proyecto es utilizar [Composer](https://getcomposer.org/) desde la línea de comandos.

```
composer require bulkgate/php-sdk
```


Una vez instalado el paquete, basta con incluir el autoloader.

```php
require_once __DIR__ . '/vendor/autoload.php';
```

```php
use BulkGate\Sdk\Connection\ConnectionStream;
use BulkGate\Sdk\MessageSender;
use BulkGate\Sdk\Scheduler\Simple;
use BulkGate\Sdk\Configurator\ViberConfigurator;
```


Para enviar mensajes necesita una instancia de la clase `BulkGate\Sdk\MessageSender`, que depende de una instancia de la clase `BulkGate\Sdk\Connection\Connection`. Consulte [cómo obtener los datos de acceso a la API](https://www.bulkgate.com/es/documentacion/administracion-de-la-api/administracion-api/).

```php
$connection = new ConnectionStream(/*application_id: */ 451, /*application_token:*/ 'NKN02TWE6NfBkfl-your-secret-token-Wf05GaqLIWLW4aBj');
$sender = new MessageSender($connection);
```

En este punto ya está listo para enviar un mensaje.

```php
$message = new Sms('420777777777', 'test message');
$sender->send($message);
```

El método `send()` envía el mensaje `$message`.

## Resultado del envío

El método `send()` devuelve el mismo mensaje con su estado completado. El resultado
se lee en las propiedades públicas:

```php
$message = $sender->send(new Sms('420777777777', 'test message'));

$message->status;     // 'accepted', 'sent', 'scheduled' o 'error'
$message->message_id; // ID del mensaje
$message->part_id;    // ID de las distintas partes del mensaje
$message->error;      // descripción del error; si no hay error, null
```

En un mensaje masivo, el estado se completa para cada mensaje por separado: recórralo
con un bucle `foreach`.

## Gestión de errores

El envío puede terminar con una excepción. Todas ellas heredan de
`BulkGate\Sdk\SdkException`:

| Excepción | Cuándo se produce |
|:--|:--|
| `ConnectionException` | No se ha podido conectar con la API |
| `ApiException` | La API ha devuelto un error (por ejemplo, credenciales no válidas) |
| `SenderException` | Se ha pasado al remitente un tipo de mensaje desconocido |
| `InvalidStateException` | Un valor no válido, por ejemplo un código ISO de país o una unidad del programador |
| `ChannelException` | Un error en la configuración de canales de un mensaje multicanal |

```php
try
{
    $sender->send($message);
}
catch (BulkGate\Sdk\SdkException $e)
{
    // registrar $e->getMessage()
}
```

## Configuración opcional

```php
$sender->setTag('your identificator');
```

Si quiere utilizar números de teléfono en formato nacional, debe configurar el país predeterminado.
```php
$sender->setDefaultCountry('sk');
```

Puede añadir [configuradores](https://www.bulkgate.com/es/documentacion/php-sdk/php-sdk-configuradores/2.0/) al remitente.

```php
$viber_configurator = new ViberConfigurator('Sender');
$sender->addSenderConfigurator($viber_configurator);
```

Para la programación del envío puede añadir una instancia de `BulkGate\Sdk\Scheduler\Scheduler`.

```php
$scheduler = new Simple(new DateTime('2022-05-14 20:00:00'));
$sender->setScheduler($scheduler);
```