PHP code example of senndo / senndo-php

1. Go to this page and download the library: Download senndo/senndo-php library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

senndo / senndo-php example snippets


$senndo = new Client(apiKey: $cleApi);

$envoi = $senndo->sendMessage([
    'channel' => 'sms',
    'to' => '+33612345678',
    'text' => 'Votre code de connexion est 4821.',
    'idempotencyKey' => "connexion-{$utilisateurId}",
]);

journaliser($envoi['id'], $envoi['status']);

$message = $senndo->getMessage($identifiantDuMessage);

if ($message['status'] === 'failed') {
    journaliser('échec', $message['failureCode'] ?? null);
}

// CORRECT : la clé survit à un redémarrage, parce qu'elle vient de votre base.
$senndo->sendMessage([
    'channel' => 'whatsapp_cloud',
    'to' => $commande['telephone'],
    'text' => 'Votre commande est prête.',
    'idempotencyKey' => "commande-{$commande['reference']}-prete",
]);

$senndo->sendMessage([
    'channel' => 'sms',
    'to' => '+15551234567',
    'text' => 'Essai.',
    'idempotencyKey' => Http::newIdempotencyKey('essai-'),
]);

try {
    $senndo->sendMessage([
        'channel' => 'sms',
        'to' => '+22507000000',
        'text' => 'Bonjour.',
        'idempotencyKey' => "bienvenue-{$utilisateurId}",
    ]);
} catch (InsufficientFundsException) {
    rechargerLeCompte();
} catch (ValidationException $erreur) {
    journaliser('appel à corriger', $erreur->errorCode, $erreur->apiMessage);
} catch (RateLimitException $erreur) {
    attendre($erreur->retryAfter ?? 5);
} catch (SenndoException $erreur) {
    journaliser('échec senndo', $erreur->getMessage());
}

$message = $senndo->getMessage($identifiantDuMessage);
$code = $message['failureCode'] ?? null;

if ($code !== null && !in_array($code, Contract::KNOWN_FAILURE_CODES, true)) {
    journaliser('code plus récent que ce SDK', $code);
}

$solde = $senndo->getBalance(['currency' => 'EUR']);
journaliser('disponible', $solde['balanceUsd']);

$journal = $senndo->listLedger(['pageSize' => 100]);
$mouvementNet = '0';
foreach ($journal['rows'] as $ligne) {
    // Le SDK ne CONVERTIT pas les montants, il ne peut donc pas certifier qu'ils sont numériques :
    // la vérification est explicite, et un montant illisible fait échouer le calcul plutôt que de
    // le fausser en silence.
    if (!is_numeric($ligne['amountUsd'])) {
        throw new \RuntimeException("montant illisible : {$ligne['amountUsd']}");
    }
    $mouvementNet = bcadd($mouvementNet, $ligne['amountUsd'], 6);
}
journaliser('mouvement net', $mouvementNet);

$senndo->sendMessage(
    [
        'channel' => 'sms',
        'to' => '+5511998877665',
        'text' => 'Ping.',
        'idempotencyKey' => "ping-{$tentative}",
    ],
    new RequestOptions(timeout: 10.0, maxRetries: 0),
);

$fichier = $senndo->uploadMedia(
    new MultipartUpload($octets, 'facture.pdf', 'application/pdf'),
);

$senndo->sendMessage([
    'channel' => 'whatsapp_cloud',
    'to' => '+33612345678',
    'text' => 'Votre facture.',
    'media' => ['ref' => $fichier['ref']],
    'idempotencyKey' => "facture-{$commande['reference']}",
]);

final class TransportMaison implements Transport
{
    public function send(HttpRequest $request): HttpResponse
    {
        $reponse = appelerMonClient(
            $request->method,
            $request->url,
            $request->headers,
            $request->body,
            $request->timeout,
        );

        return new HttpResponse($reponse['status'], $reponse['headers'], $reponse['body']);
    }
}

journaliser((string) $senndo);  // Senndo\Client { baseUrl: …, apiKey: sk_live_…32 caractères masqués }

$endpoint = $senndo->createWebhook([
    'name' => 'Production',
    'url' => 'https://exemple.test/senndo',
    'events' => ['message.sent', 'message.failed'],
]);

conserverLeSecret($endpoint['secret']);
bash
composer