Die Klasse `BulkGate\Sms\Message` stellt das Objekt der SMS-Nachricht dar, das aus dem Inhalt der Nachricht und dem Empfänger besteht.

```php
use BulkGate\Sms\Message;
```

## Empfänger

Als erstes Argument nimmt die Klasse eine Telefonnummer entgegen, die als String angegeben werden kann:

```php
$message = new Message('420777777777', 'Testnachricht');
```

oder eine Instanz des Objekts [`Message\PhoneNumber`](https://www.bulkgate.com/de/dokumentation/php-sdk/php-sdk-telefonnummer/):

```php
$message = new Sms\Message(new Message\PhoneNumber('420777777777'), 'Testnachricht');
```

Die Telefonnummer können Sie auch nach dem Erstellen der Objektinstanz mit der Methode `phoneNumber($phone_number, $iso = null)` angeben:

```php
$message = new Sms\Message();

$message->phoneNumber('420777777777');  // String
$message->phoneNumber('777777777', BulkGate\Sms\Country::CZECH_REPUBLIC);  // Variante mit Ergänzung der internationalen Vorwahl
$message->phoneNumber(new Message\PhoneNumber('420777777777')); 
```

Um die Telefonnummer zu erhalten, können Sie die Methode `getPhoneNumber()` verwenden, die immer eine Instanz des Objekts [`Message\PhoneNumber`](https://www.bulkgate.com/de/dokumentation/php-sdk/php-sdk-telefonnummer/) zurückgibt.

```php
/** @var Message\PhoneNumber $phone_number */
$phone_number = $message->getPhoneNumber();
```

## Nachrichtentext 

Der zweite Parameter ist der Text der Nachricht. Auch hier gibt es 2 Möglichkeiten: Entweder geben Sie den Text als String an oder als Instanz der Klasse [`Message\Text`](https://www.bulkgate.com/de/dokumentation/php-sdk/php-sdk-nachrichtentext/).

```php
$message = new Message(
        new Message\PhoneNumber('420777777777'), 
        new Message\Text('Testnachricht')
);
```

Selbstverständlich können Sie den Text auch nach dem Erstellen der Objektinstanz mit der Methode `text($text, array $variables = [])` festlegen

```php
$message = new Sms\Message();
$message->phoneNumber('420777777777');  // String

$message->text('Testnachricht'); // String

$message->text(new Message\Text('Testnachricht')); 

$message->text(
    'Hallo <first_name> <last_name>', [
        'first_name' => 'Max', 
        'last_name' => 'Mustermann'
    ]); // Ergänzung der Variablen; der resultierende Text lautet "Hallo Max Mustermann"
```

Um den Nachrichtentext abzurufen, können Sie die Methode `getText()` verwenden, die immer eine Instanz des Objekts [`Message\Text`](https://www.bulkgate.com/de/dokumentation/php-sdk/php-sdk-nachrichtentext/) zurückgibt.

```php
/** @var Message\Text $text */
$text = $message->getText();
```

## JSON-Unterstützung

Das Objekt `BulkGate\Sms\Message` implementiert das Interface [`\JsonSerializable`](http://php.net/manual/en/class.jsonserializable.php), mit dem Sie es über die Funktion [`json_encode()`](http://php.net/manual/en/function.json-encode.php) in das JSON-Format umwandeln können.

```php
/** @var BulkGate\Sms\Message $message */
$message = new Message('420777777777', 'Testnachricht');

echo json_encode($message);
```

Die Ausgabe lautet:

```json
{
  "number": {
    "number": "420777777777",
    "iso": null
  },
  "text": "Testnachricht",
  "status": "preparation",
  "price": 0.0,
  "credit": 0.0,
  "id": null,
  "scheduled": null
}
```

Die Schlüssel `status`, `price`, `credit` und `id` werden erst nach dem Versand gefüllt,
`scheduled` erst nach dem Aufruf von `schedule()`.

## Umwandlung in einen String

Das Objekt `BulkGate\Sms\Message` implementiert die magische Methode [`__string()`](http://php.net/manual/en/language.oop5.magic.php#object.tostring)

```php
/** @var BulkGate\Sms\Message $message */
$message = (string) $message; // in die Variable
echo $message; // auf die Ausgabe
```

Die Ausgabe lautet:

```
420777777777: Testnachricht
```

## Umwandlung in ein Array

```php
/** @var BulkGate\Sms\Message $message */
$array = $message->toArray();
```

## Fluent Interface

[Fluent Interface](https://en.wikipedia.org/wiki/Fluent_interface) ist eine Technik zur Verkettung von Methoden.

```php
$message = new Sms\Message();

$message->phoneNumber('420777777777')
        ->text('Testnachricht');
```

## Informationen nach dem Versand

Nach dem Versand der Nachricht können Sie aus ihr den Preis, den Status und die ID der Nachricht abrufen.

```php
$id = $message->getId();  // ID der Nachricht
$status = $message->getStatus(); // Status
$price = $message->getPrice(); // Preis
$credit = $message->getCredit(); // Guthaben nach dem Versand
```

## Planung der Nachricht

Die Methode `schedule()` legt den Versandzeitpunkt als Unix-Zeitstempel fest. Ohne
Parameter hebt sie die Planung auf.

```php
$message->schedule(strtotime('2026-01-15 09:00')); // planen
$message->schedule(); // Planung aufheben
```
