althosalud/telemedicina

Typed PHP SDK for the AlthoTelemedicina API

Maintainers

Package info

github.com/gonzaloalonsod/althos-telemedicina-php

pkg:composer/althosalud/telemedicina

Transparency log

Statistics

Installs: 22

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v0.1.2 2026-07-29 13:06 UTC

This package is auto-updated.

Last update: 2026-07-29 13:10:54 UTC


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.

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; expone statusCode, apiErrorCode y details.
  • 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,
);