Websocket App

Introducción

En una Websocket App, la centralita se conecta mediante websockets a la lógica remota y envía mensajes en formato JSON con la información de la llamada y el audio recibido del llamante en tiempo real. Además acepta mensajes con audio para reproducir al llamante.

El uso habitual de esta aplicación es la de integrar con sistemas de IA.

Cuando una llamada de centralita es enviada a esta aplicación, se realizará una conexión por websockets a la URL configurada y se enviará un mensaje inicial con la información de la llamada (id, número llamante, etc). A partir de ese momento se enviarán mensajes con el audio encodeado en base64.

Mensajes

connect

Cuando la pbx se conecta a la aplicación remota por websockets es el primer mensaje que se envía. En este mensaje está la información de la llamada.

Propiedades del mensaje

Nombre Tipo Valor por defecto Opcional Descripción
type Enumerado - No El tipo de mensaje, en este caso sería "connect"
websocketAppId uuid - No Id del comportamiento (sirve como referencia por si se manejan diferentes comportamientos en la misma url)
pbxId uuid - No Id interno de la centralita
pbxDomain String - No Dominio SIP de la centralita
callIdNumber String - No Número del llamante
callIdName String - No Nombre del llamante si se ha establecido por algún método
audioType Enumerado - No El valor puede ser PCMU o PCMA, de momento sólo esta soportado PCMU
created long - No Fecha de creación en formato timestamp en milisegundos.

Ejemplo de mensaje

{
    "type": "connect",
    "websocketAppId": "c47e89b46adc4dbd815230346a6761a7",
    "pbxId": "0e835106e5b446b0-8b449bd4618713cf",
    "pbxDomain": "mitestpbx.vpbx.me",
    "callId": "9e6d4eca94344862a870b377f3abe231",
    "callerIdNumber": "911123123",
    "callerIdName": "Test Client",
    "audioType": "PCMU",
    "created": 1756800615000
}

audio

El sistema genera estos eventos cada 20ms aproximadamente con el audio recibido del llamante. Éste mismo mensaje también lo tiene que enviar la aplicación remota con el audio que se quiere reproducir al cliente.

Propiedades del mensaje

Nombre Tipo Valor por defecto Opcional Descripción
type Enumerado - No El tipo de mensaje, en este caso sería "audio"
websocketAppId uuid - No Id del comportamiento (sirve como referencia por si se manejan diferentes comportamientos en la misma url)
pbxId uuid - No Id interno de la centralita
pbxDomain String - No Dominio SIP de la centralita
audio String - No Audio en el formato especificado en la conexión (PCMU/PCMA) y encodeado en base64.

Ejemplo de mensaje

{
    "type": "audio",
    "websocketAppId": "c47e89b46adc4dbd815230346a6761a7",
    "pbxId": "0e835106e5b446b0-8b449bd4618713cf",
    "pbxDomain": "mitestpbx.vpbx.me",
    "callId": "9e6d4eca94344862a870b377f3abe231",
    "audio": "fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx..."
}

dtmf

Cuando el llamante pulsa un dígito de su teclado, llega este evento por el websocket.

Propiedades del mensaje

Nombre Tipo Valor por defecto Opcional Descripción
type Enumerado - No El tipo de mensaje, en este caso sería "dtmf"
websocketAppId uuid - No Id del comportamiento (sirve como referencia por si se manejan diferentes comportamientos en la misma url)
pbxId uuid - No Id interno de la centralita
pbxDomain String - No Dominio SIP de la centralita
digit String - No Dígito pulsado

Ejemplo de mensaje

{
    "type": "dtmf",
    "websocketAppId": "c47e89b46adc4dbd815230346a6761a7",
    "pbxId": "0e835106e5b446b0-8b449bd4618713cf",
    "pbxDomain": "mitestpbx.vpbx.me",
    "callId": "9e6d4eca94344862a870b377f3abe231",
    "digit": "1"
}

command

La aplicación remota, además del mensaje de audio, puede enviar este comando para finalizar o transferir la llamada. Además, también puede parar la reproducción de un audio que ya enviado y esta buffereado.

Propiedades del mensaje

Nombre Tipo Valor por defecto Opcional Descripción
type Enumerado - No El tipo de mensaje, en este caso sería "command"
websocketAppId uuid - No Id del comportamiento (sirve como referencia por si se manejan diferentes comportamientos en la misma url)
pbxId uuid - No Id interno de la centralita
pbxDomain String - No Dominio SIP de la centralita
command Enumerado - No Los valores pueden ser HANGUP,BREAK,TRANSFER
data String - Actualmente sólo se usario en el comando "TRANSFER" para transferir a un destino de la centralita

Ejemplo de mensaje para colgar una llamada

{
    "type": "command",
    "websocketAppId": "c47e89b46adc4dbd815230346a6761a7",
    "pbxId": "0e835106e5b446b0-8b449bd4618713cf",
    "pbxDomain": "mitestpbx.vpbx.me",
    "callId": "9e6d4eca94344862a870b377f3abe231",
    "command": "HANGUP"
}

Ejemplo de mensaje para parar la reproducción de un audio en buffer.

{
    "type": "command",
    "websocketAppId": "c47e89b46adc4dbd815230346a6761a7",
    "pbxId": "0e835106e5b446b0-8b449bd4618713cf",
    "pbxDomain": "mitestpbx.vpbx.me",
    "callId": "9e6d4eca94344862a870b377f3abe231",
    "command": "BREAK"
}

Ejemplo de mensaje para transferir la llamada a un destino de la centralita

{
    "type": "command",
    "websocketAppId": "c47e89b46adc4dbd815230346a6761a7",
    "pbxId": "0e835106e5b446b0-8b449bd4618713cf",
    "pbxDomain": "mitestpbx.vpbx.me",
    "callId": "9e6d4eca94344862a870b377f3abe231",
    "command": "TRANSFER",
    "data": "QUEUE::10"
}