Klassen `BulkGate\Sms\Message` representerer objektet for SMS-meldingen, som består av innholdet i meldingen og mottakeren.

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

## Mottaker

Som første argument tar klassen imot et telefonnummer, som kan angis som en streng:

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

eller en instans av objektet [`Message\PhoneNumber`](https://www.bulkgate.com/no/dokumentasjon/php-sdk/php-sdk-telefonnummer/):

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

Du kan også angi telefonnummeret etter at instansen av objektet er opprettet, med metoden `phoneNumber($phone_number, $iso = null)`:

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

$message->phoneNumber('420777777777');  // streng
$message->phoneNumber('777777777', BulkGate\Sms\Country::CZECH_REPUBLIC);  // Varianten der det internasjonale landsprefikset fylles ut
$message->phoneNumber(new Message\PhoneNumber('420777777777')); 
```

For å hente telefonnummeret kan du bruke metoden `getPhoneNumber()`, som alltid returnerer en instans av objektet [`Message\PhoneNumber`](https://www.bulkgate.com/no/dokumentasjon/php-sdk/php-sdk-telefonnummer/).

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

## Meldingstekst 

Den andre parameteren er teksten i meldingen. Også her finnes det 2 muligheter: den første er å angi teksten som en streng, den andre er en instans av klassen [`Message\Text`](https://www.bulkgate.com/no/dokumentasjon/php-sdk/php-sdk-meldingstekst/).

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

Du kan selvfølgelig også angi teksten etter at instansen av objektet er opprettet, med metoden `text($text, array $variables = [])`

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

$message->text('testmelding'); // streng

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

$message->text(
    'Hei <first_name> <last_name>', [
        'first_name' => 'Ola', 
        'last_name' => 'Nordmann'
    ]); // utfylling av variabler; resultatet er "Hei Ola Nordmann"
```

For å hente meldingsteksten kan du bruke metoden `getText()`, som alltid returnerer en instans av objektet [`Message\Text`](https://www.bulkgate.com/no/dokumentasjon/php-sdk/php-sdk-meldingstekst/).

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

## JSON-støtte

Objektet `BulkGate\Sms\Message` implementerer grensesnittet [`\JsonSerializable`](http://php.net/manual/en/class.jsonserializable.php), slik at du kan konvertere det til JSON-format med [`json_encode()`](http://php.net/manual/en/function.json-encode.php).

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

echo json_encode($message);
```

Utdataene er:

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

Nøklene `status`, `price`, `credit` og `id` fylles ut først etter sending,
`scheduled` når du kaller `schedule()`.

## Konvertering til streng

Objektet `BulkGate\Sms\Message` implementerer den magiske metoden [`__string()`](http://php.net/manual/en/language.oop5.magic.php#object.tostring)

```php
/** @var BulkGate\Sms\Message $message */
$message = (string) $message; // til variabelen
echo $message; // til utdataene
```

Utdataene er:

```
420777777777: testmelding
```

## Konvertering til array

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

## Flytende grensesnitt

[Flytende grensesnitt](https://en.wikipedia.org/wiki/Fluent_interface) (fluent interface) er en teknikk for å kjede sammen metodekall.

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

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

## Informasjon etter sending

Etter at du har sendt meldingen, kan du hente prisen, statusen og ID-en til meldingen fra den.

```php
$id = $message->getId();  // meldings-ID
$status = $message->getStatus(); // status
$price = $message->getPrice(); // pris
$credit = $message->getCredit(); // kredittsaldo etter sending
```

## Planlegging av meldingen

Metoden `schedule()` angir sendetidspunktet som et Unix-tidsstempel. Uten
parameter avbryter den planleggingen.

```php
$message->schedule(strtotime('2026-01-15 09:00')); // planlegg
$message->schedule(); // avbryt planleggingen
```
