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)