althosalud / telemedicina
Typed PHP SDK for the AlthoTelemedicina API
Requires
- php: >=8.2
- ext-curl: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpstan/phpstan: ^2.0
- phpunit/phpunit: ^11.0 || ^12.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Cliente PHP tipado para integrar sesiones de video de AlthoTelemedicina.
La librería no depende de Symfony, Laravel ni de clientes HTTP de terceros:
usa cURL (extensión PHP) y la misma clase TelemedicineClient en cualquier
proyecto.
Instalación
composer require althosalud/telemedicina
Requisitos: PHP 8.2+ y extensión ext-curl.
- Packagist: althosalud/telemedicina
- Repositorio: gonzaloalonsod/althos-telemedicina-php
- Changelog: CHANGELOG.md
PHP
use AlthoSalud\Telemedicina\TelemedicineClient; $client = new TelemedicineClient( baseUrl: 'https://telemedicina.althosalud.com', apiKey: 'tm_...', ); $session = $client->createSession( externalReference: 'appointment:123', metadata: ['source' => 'my-product'], ); $professionalUrl = $session->professionalJoinUrl; $patientUrl = $session->patientJoinUrl;
Symfony
Instalá el paquete y registrá el cliente como servicio. No hay bundle propio: configurás la misma clase que en PHP puro.
# .env.local TELEMEDICINA_API_BASE_URL=https://telemedicina.althosalud.com TELEMEDICINA_API_KEY=tm_...
# config/services.yaml services: AlthoSalud\Telemedicina\TelemedicineClient: arguments: $baseUrl: '%env(TELEMEDICINA_API_BASE_URL)%' $apiKey: '%env(TELEMEDICINA_API_KEY)%'
Inyectalo donde lo necesites:
use AlthoSalud\Telemedicina\Contract\TelemedicineClientInterface; use AlthoSalud\Telemedicina\TelemedicineClient; final class StartVisit { public function __construct( private TelemedicineClient $telemedicine, ) { } public function __invoke(string $attentionId): void { $session = $this->telemedicine->createSession( externalReference: 'attention:'.$attentionId, metadata: ['source' => 'my-product'], ); } }
Opcional: alias de la interfaz al servicio concreto en services.yaml:
AlthoSalud\Telemedicina\Contract\TelemedicineClientInterface: alias: AlthoSalud\Telemedicina\TelemedicineClient
Laravel
Instalá el paquete y centralizá la instancia en un servicio de aplicación.
# .env TELEMEDICINA_API_BASE_URL=https://telemedicina.althosalud.com TELEMEDICINA_API_KEY=tm_...
// app/Services/TelemedicinaClientFactory.php namespace App\Services; use AlthoSalud\Telemedicina\TelemedicineClient; final class TelemedicinaClientFactory { public function client(): TelemedicineClient { return new TelemedicineClient( baseUrl: (string) config('services.telemedicina.base_url'), apiKey: (string) config('services.telemedicina.api_key'), ); } }
// config/services.php return [ 'telemedicina' => [ 'base_url' => env('TELEMEDICINA_API_BASE_URL'), 'api_key' => env('TELEMEDICINA_API_KEY'), ], ];
// app/Http/Controllers/StartVisitController.php public function __invoke(TelemedicinaClientFactory $factory) { $session = $factory->client()->createSession('appointment:123'); }
Operaciones
$credentials = $client->me(); $created = $client->createSession('appointment:123', [ 'source' => 'my-product', ]); $current = $client->getSession($created->id); $ended = $client->endSession($created->id);
No envíes nombres, documentos ni notas clínicas en metadata; usá
externalReference para correlacionar con tu sistema.
Aplicaciones multi-tenant
Si cada Organization/tenant guarda su propia API key, omití la key global (o dejala vacía) y creá un cliente inmutable por operación:
$tenantClient = $client->withApiKey($decryptedOrganizationApiKey); $session = $tenantClient->createSession('org:7:appointment:123');
withApiKey() no modifica el cliente compartido.
Errores
ConfigurationException: falta URL o API key.TransportException: no se pudo contactar la plataforma.ApiException: respuesta HTTP no exitosa; exponestatusCode,apiErrorCodeydetails.InvalidResponseException: la respuesta no cumple el contrato esperado.
Las excepciones no incluyen la API key.
Transporte HTTP
Por defecto el cliente usa CurlTransport. Para tests o integraciones
avanzadas podés inyectar cualquier implementación de
HttpTransportInterface.
use AlthoSalud\Telemedicina\Contract\HttpTransportInterface; $client = new TelemedicineClient( baseUrl: 'https://telemedicina.althosalud.com', apiKey: 'tm_...', transport: $customTransport, );