PHP code example of callisto-php / sdk
1. Go to this page and download the library: Download callisto-php/sdk 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/ */
callisto-php / sdk example snippets
public function __construct(
?string $clientId = null,
?string $apiKey = null,
?string $baseUrl = null,
float $timeout = 30.0,
?GuzzleHttp\Client $httpClient = null,
)
use Callisto\Sdk\Client;
$callisto = new Client(
clientId: 'your-client-id',
apiKey: 'your-api-key',
baseUrl: 'https://api.callistosignal.com/v1', // optional
timeout: 30.0, // optional, seconds
);
use Callisto\Sdk\Client;
// Reads CALLISTO_CLIENT_ID / CALLISTO_API_KEY / CALLISTO_BASE_URL.
$callisto = new Client();
use Callisto\Sdk\Client;
use Callisto\Sdk\Exception\CallistoException;
$callisto = new Client(clientId: 'your-client-id', apiKey: 'your-api-key');
try {
// Check your balance
$balance = $callisto->balance()->get();
// Send an SMS
$result = $callisto->sms()->send(
sender: 'Acme',
to: '+2250700000000',
message: 'Welcome to Acme!',
);
echo $result['status'];
} catch (CallistoException $e) {
echo "API error ({$e->getStatusCode()}): {$e->getMessage()}";
}
$balance = $callisto->balance()->get();
$balance = $callisto->balance()->get(format: 'full', currency: 'XOF');
$callisto->sms()->send(
sender: 'Acme',
to: '+2250700000000',
message: 'Your code is 1234',
);
// Multiple recipients + scheduling
$callisto->sms()->send(
sender: 'Acme',
to: ['+2250700000000', '+2250700000001'],
message: 'Sale starts tomorrow!',
notifyUrl: 'https://acme.example/webhooks/sms',
scheduledAt: '2026-06-02 10:00:00',
);
$messages = $callisto->sms()->list(page: 1, perPage: 50);
foreach ($messages->items as $msg) {
echo "{$msg->recipient}: {$msg->status}\n";
}
$msg = $callisto->sms()->getStatus('msg_abc123');
echo $msg->status;
use Callisto\Sdk\Enum\OtpType;
use Callisto\Sdk\Enum\OtpProvider;
// SMS OTP
$otp = $callisto->otp()->send(
to: '+2250700000000',
message: 'Your Acme code is {{code}}',
sender: 'Acme',
type: OtpType::Digit,
digitSize: 6,
expiredIn: 300,
);
// WhatsApp OTP — instanceCode is
$result = $callisto->otp()->verify(otpId: 'otp_abc123', code: '123456');
$otp = $callisto->otp()->getStatus('otp_abc123');
echo $otp->status;
$otps = $callisto->otp()->list(page: 1, limit: 20);
foreach ($otps->items as $otp) {
echo "{$otp->recipient}: {$otp->status}\n";
}
$instance = $callisto->whatsApp()->createInstance(
name: 'Acme Support',
phoneNumber: '+2250700000000',
webhookUrl: 'https://acme.example/webhooks/wa',
);
echo $instance->code;
$instances = $callisto->whatsApp()->listInstances(page: 1);
$instance = $callisto->whatsApp()->getInstance('inst_abc123');
$qr = $callisto->whatsApp()->getQr('inst_abc123');
$status = $callisto->whatsApp()->getStatus('inst_abc123');
$messages = $callisto->whatsApp()->listMessages('inst_abc123', page: 1, perPage: 50);
$msg = $callisto->whatsApp()->getMessage('wamsg_abc123');
echo $msg->status;
$callisto->whatsApp()->sendText(
code: 'inst_abc123',
to: '+2250700000000',
message: 'Hello from Acme!',
);
use Callisto\Sdk\Enum\WhatsAppMediaType;
$callisto->whatsApp()->sendMedia(
code: 'inst_abc123',
to: '+2250700000000',
type: WhatsAppMediaType::Image,
mediaUrl: 'https://acme.example/promo.jpg',
caption: 'Check this out!',
);
$callisto->whatsApp()->sendButtons(
code: 'inst_abc123',
to: '+2250700000000',
body: 'Confirm your order?',
buttons: [
['id' => 'yes', 'title' => 'Yes'],
['id' => 'no', 'title' => 'No'],
],
);
$callisto->whatsApp()->sendLocation(
code: 'inst_abc123',
to: '+2250700000000',
latitude: 5.3599,
longitude: -4.0083,
name: 'Acme HQ',
address: 'Abidjan, Côte d\'Ivoire',
);
$callisto->whatsApp()->sendList(
code: 'inst_abc123',
to: '+2250700000000',
body: 'Pick a plan',
buttonText: 'View plans',
sections: [
[
'title' => 'Plans',
'rows' => [
['id' => 'basic', 'title' => 'Basic'],
['id' => 'pro', 'title' => 'Pro'],
],
],
],
);
$callisto->notify()->send(
topic: 'order.shipped',
email: [
['to' => '[email protected] ', 'subject' => 'Your order shipped'],
],
sms: [
['to' => '+2250700000000', 'message' => 'Your order is on the way!'],
],
);
$page = $callisto->sms()->list(page: 1, perPage: 50);
echo "Page {$page->currentPage} of {$page->totalPages} ({$page->total} total)\n";
foreach ($page->items as $message) {
// $message is an SmsMessage instance
echo "{$message->id} → {$message->status}\n";
}
if ($page->next !== null) {
$next = $callisto->sms()->list(page: $page->next, perPage: 50);
}
use Callisto\Sdk\Exception\AuthenticationException;
use Callisto\Sdk\Exception\ValidationException;
use Callisto\Sdk\Exception\NotFoundException;
use Callisto\Sdk\Exception\RateLimitException;
use Callisto\Sdk\Exception\NetworkException;
use Callisto\Sdk\Exception\CallistoException;
try {
$callisto->sms()->send(
sender: 'Acme',
to: '+2250700000000',
message: 'Hello!',
);
} catch (RateLimitException $e) {
$wait = $e->getRetryAfter() ?? 1;
sleep($wait);
// ...retry
} catch (ValidationException $e) {
echo "Invalid request: {$e->getMessage()}";
var_dump($e->getBody());
} catch (AuthenticationException $e) {
echo 'Check your client ID and API key.';
} catch (NotFoundException $e) {
echo 'Resource not found.';
} catch (NetworkException $e) {
echo "Network problem: {$e->getMessage()}";
} catch (CallistoException $e) {
// Catch-all for any remaining API error (ApiException, etc.)
echo "API error ({$e->getStatusCode()}): {$e->getMessage()}";
}
use Callisto\Sdk\Client;
$callisto = new Client(
clientId: 'your-client-id',
apiKey: 'your-api-key',
errorDsn: 'https://ingest.callistosignal.com/apps/<uuid>?key=<hex>', // enables reporting
captureUnhandled: true, // optional, default false — install global handler
environment: 'production', // optional, tagged in context.environment
);
use Callisto\Sdk\Callisto;
Callisto::init(
dsn: 'https://ingest.callistosignal.com/apps/<uuid>?key=<hex>',
environment: 'production', // optional
captureUnhandled: true, // optional, default false — install global handler
);
Callisto::captureException($throwable, level: 'error', extra: ['feature' => 'checkout']);
Callisto::captureMessage('payment retried', level: 'info');
Callisto::setUser(['id' => 'u-123', 'email' => '[email protected] ']);
Callisto::flush();
// Report your own exceptions and messages.
$callisto->captureException($throwable, level: 'error', extra: ['feature' => 'checkout']);
$callisto->captureMessage('payment retried', level: 'info');
// Attach user context to subsequent events (pass null to clear).
$callisto->setUser(['id' => 'u-123', 'email' => '[email protected] ']);
// Best-effort flush (no-op for the synchronous PHP reporter).
$callisto->flush();
// Advanced: the reporter itself.
$reporter = $callisto->errorReporter();
use Callisto\Sdk\Framework\Bowphp\CallistoErrorHandler;
class ErrorHandle extends \Bow\Application\Exception\BaseErrorHandler
{
public function handle($exception): mixed
{
CallistoErrorHandler::report($exception); // report to Callisto, then render as usual
// ... your existing rendering
}
}
use Callisto\Sdk\Integration\CallistoIntegration;
$callisto = CallistoIntegration::fromEnv();
try {
$kernel->handle($request);
} catch (\Throwable $e) {
$callisto->captureUnhandled($e, CallistoIntegration::request($method, $path), $user);
throw $e;
}