Перейти к основному содержимому

Inn-Book Socket API — TSP подключение

📌 Основная информация

Host: sockota.inn-book.com
Port: 44558

Socket API предназначен для получения уведомлений о любых изменениях в системе Inn-Book (например, бронирования, отмены, обновления статуса).

⚠️ Важно
После каждого JSON-объекта используйте перенос строки.
Формат всех уведомлений полностью соответствует методам REST API OTA.
Socket API является уведомительным каналом и не заменяет REST API.


🔧 Назначение API

  • Получение уведомлений о любых изменениях в PMS Inn-Book.
  • Все данные приходят в виде строк JSON (одна строка — один JSON-объект).
  • REST API продолжает использоваться для управления и получения детальной информации.

🔐 Аутентификация

После подключения клиент обязан аутентифицироваться:

{ 
"act": "auth",
"key": "<ваш ключ авторизации>"
}

🔄 Ping/Pong поддержка соединения

Сервер периодически отправляет:

{ "type": "ping" }

Клиент должен ответить:

{ "act": "pong" }
⚠️ Важно

Если TSP-соединение обрывается, система переключается на вебхук (если URL уведомлений настроен). В тестовом режиме уведомления могут приходить одновременно через сокет и вебхук.

💻 Пример клиента на Node.js

const net = require('net');

const HOST = 'sockota.inn-book.com';
const PORT = 44558;
const AUTH_KEY = 'your_api_key_here';

const client = net.createConnection({ host: HOST, port: PORT }, () => {
console.log('✅ Connected to Inn-Book Socket API');
});

client.setEncoding('utf8');

let buffer = '';

client.on('data', (chunk) => {
buffer += chunk;
let lines = buffer.split('\n');
buffer = lines.pop();

for (let line of lines) {
if (!line.trim()) continue;

try {
const msg = JSON.parse(line);

if (msg.type === 'auth') {
client.write(JSON.stringify({ act: 'auth', key: AUTH_KEY }) + '\n');
} else if (msg.type === 'ping') {
client.write(JSON.stringify({ act: 'pong' }) + '\n');
} else {
console.log('Received data:', msg);
}

} catch (e) {
console.error('Failed to parse message:', line);
}
}
});

client.on('end', () => console.log('Disconnected from server'));
client.on('error', (err) => console.error('Connection error:', err));

💻 Пример клиента на PHP

$host = 'sockota.inn-book.com';
$port = 44558;
$authKey = 'your_api_key_here';

$fp = stream_socket_client("tcp://$host:$port", $errno, $errstr, 30);

if (!$fp) {
echo "Ошибка подключения: $errstr ($errno)\n";
exit;
}

stream_set_blocking($fp, true);

echo "Подключено к $host:$port\n";

while (!feof($fp)) {
$line = fgets($fp);
if ($line === false) break;

$data = trim($line);
if (!$data) continue;

$json = json_decode($data, true);
if (!$json) continue;

if (isset($json['type']) && $json['type'] === 'auth') {
fwrite($fp, json_encode(['act' => 'auth', 'key' => $authKey]) . "\n");
} elseif (isset($json['type']) && $json['type'] === 'ping') {
fwrite($fp, json_encode(['act' => 'pong']) . "\n");
} else {
print_r($json);
}
}

fclose($fp);

💻 Пример клиента на Python

import socket
import json

HOST = 'sockota.inn-book.com'
PORT = 44558
AUTH_KEY = 'your_api_key_here'

def send_json(sock, data):
sock.sendall((json.dumps(data) + '\n').encode('utf-8'))

with socket.create_connection((HOST, PORT)) as sock:
buffer = ''
while True:
data = sock.recv(4096)
if not data:
break
buffer += data.decode('utf-8')
while '\n' in buffer:
line, buffer = buffer.split('\n', 1)
if not line.strip():
continue
message = json.loads(line)
if message.get('type') == 'auth':
send_json(sock, {"act": "auth", "key": AUTH_KEY})
elif message.get('type') == 'ping':
send_json(sock, {"act": "pong"})
else:
print(message)