Подключение сторонней программы к Link-D
Как получать события и тревоги с пульта в свою систему. Инструкция рассчитана на любого читателя: если вы не программист — начните с первой вкладки, там всё по шагам и без установки чего-либо.
Что это такое и что вам нужно
Link-D — пульт централизованного наблюдения. К нему подключены приборы на объектах: пожарная сигнализация, охрана, датчики. Пульт принимает от них сообщения и показывает диспетчеру.
Эта инструкция — про то, как ваша программа может читать те же данные. Например, чтобы тревоги сами попадали в вашу систему учёта или чтобы объекты отображались на вашей карте.
Что понадобится
| Что | Откуда взять |
|---|---|
| Адрес пульта | Тот же, по которому вы читаете эту страницу:
—. В примерах он подставлен сам. |
| Ключ доступа строка вида linkd_xxxx… |
Выдаёт обслуживающая организация. Напишите или позвоните: «нужен ключ интеграции». Передадут файлом или письмом на вашу почту. |
Что ключ открывает, а что нет
| Можно | Нельзя | |
|---|---|---|
| Данные | Читать объекты, события и тревоги | Менять что-либо: закрыть тревогу, поправить карточку, добавить объект |
| Объём | Объекты того заказчика, которому выдан ключ | Объекты других заказчиков — их не видно вообще |
| Вход | Обращаться из программы | Войти ключом в кабинет или в пульт — форма его не примет |
Куда обращаться
Шаг 1. Проверим, что ключ рабочий
Начните отсюда. Этот запрос ничего не меняет — он спрашивает у пульта: «что за ключ вы мне дали и что он открывает».
Ключ скрыт намеренно: он равносилен паролю, а эту страницу открывают и при других
людях. Нажмите «Показать», если нужно сверить.
Он остаётся только в этой вкладке браузера и пропадёт, когда вы её закроете.
Как понять ответ
{
"вид": "ключ интеграции",
"название_ключа": "1С заказчика",
"доступ": "объекты одного заказчика",
"права": "только чтение",
"заказчик": "Иванов И. И."
}
| Строка | Что означает |
|---|---|
название_ключа | Как ключ подписан у обслуживающей организации. По нему его найдут в разговоре: «отзовите ключ „1С заказчика“». |
доступ | «объекты одного заказчика» — видны только его объекты. «все объекты пульта» — видно всё; такой ключ выдают редко и по отдельному решению. |
права | Всегда «только чтение». Другого не бывает. |
Как устроен обмен
Ваша программа сама спрашивает пульт, когда ей нужно. Пульт к вам не стучится — значит вам не нужен ни свой сервер в интернете, ни открытые порты.
Из чего состоит запрос
Адрес плюс ключ в заголовке. Больше ничего.
GET https://адрес-пульта/объекты
Authorization: Bearer linkd_ваш_ключ
Слово Bearer и пробел перед ключом обязательны — так устроен общепринятый
способ передачи ключей, и любая библиотека умеет это сама.
Как часто спрашивать
| Задача | Как часто | Почему так |
|---|---|---|
| Тревоги — чтобы реагировать | раз в 10–30 секунд | Чаще незачем: диспетчер видит их первым в любом случае |
| События — для журнала | раз в 1–5 минут | События копятся, деваться им некуда |
| Объекты — справочник | раз в час или при запуске | Состав объектов меняется редко |
Объекты
Список объектов, доступных вашему ключу. С него обычно начинают: из него берут номера для остальных запросов.
Адрес: GET /объекты
Что в ответе
[
{
"номер": 5,
"номер_объекта": 1,
"название": "Стенд",
"адрес": null,
"активен": true,
"количество_приборов": 1,
"приборов_без_связи": 1
}
]
| Поле | Что это |
|---|---|
номер | Внутренний номер объекта в пульте. Именно его подставляют в другие запросы. |
номер_объекта | Номер по договору — тот, что видит заказчик. Для запросов не годится. |
активен | false — объект отключён, события по нему
не идут. |
приборов_без_связи | Сколько приборов молчит прямо сейчас. Не ноль — часть объекта пульт не видит. |
номер.
События
Всё, что приборы прислали на пульт: срабатывания, восстановления, постановки на охрану, тесты связи. События не исчезают и не меняются.
Адрес: GET /события/последние?количество=50
Что в ответе
{
"id": 7045,
"recv_time": "2026-09-11 09:34:13.688000+00:00",
"event_code": "110",
"qualifier": "1",
"event_name": "Пожар",
"category": "Пожар",
"priority": 1,
"partition": "01",
"zone": "055",
"partition_name": "Дымовой",
"zone_name": null,
"dup_count": 1,
"object_id": 5,
"object_name": "Стенд"
}
| Поле | Что это |
|---|---|
id | Номер события, растёт. Запомните последний обработанный —
и дальше берите только те, у которых id больше. |
recv_time | Когда пульт принял событие. |
qualifier | 1 — сработало, 3 —
восстановилось. Это важнее, чем кажется: один и тот же event_code
означает и тревогу, и её снятие. |
category | «Пожар», «Тревога», «Неисправность», «Связь», «Постановка», «Служебное». Фильтровать удобнее по ней, чем по коду. |
priority | 1 — самое срочное, 5 — служебное. |
partition / zone | Раздел и зона по протоколу, рядом — их названия, если заведены в карточке объекта. |
dup_count | Сколько раз прибор повторил то же сообщение. Больше 1 — повтор, а не новое срабатывание. |
id и дальше берите только то, что новее. Иначе с ростом журнала программа
будет тянуть одно и то же гигабайтами.
Тревоги
Тревога — не событие, а случай, с которым работает диспетчер. Несколько событий об одном и том же собираются в одну тревогу; у неё есть состояние и время закрытия.
Адрес: GET /инциденты/активные
Что в ответе
{
"id": 1216,
"priority": 1,
"category": "Пожар",
"title": "Пожар",
"status": "open",
"event_count": 2,
"opened_at": "2026-09-09 07:27:34.944000+00:00",
"last_event_at": "2026-09-09 07:27:34.944000+00:00",
"acknowledged_at": null,
"restored": false,
"zone_partition": "01",
"zone_code": "005",
"object_id": 5,
"object_name": "Стенд"
}
| Поле | Что это |
|---|---|
status | open — никто ещё не взял в работу,
in_work — диспетчер принял. |
acknowledged_at | Когда диспетчер принял тревогу.
null — ещё не принял. |
restored | true — прибор прислал восстановление.
Тревога при этом может быть ещё открыта: восстановление и закрытие — разные вещи. |
event_count | Сколько событий собралось в эту тревогу. |
Ошибки и что делать
| Код | Что говорит пульт | Что делать |
|---|---|---|
| 401 | «требуется вход» или «ключ интеграции недействителен, отозван или просрочен» | Ключ не подставился, испорчен при копировании, отозван или просрочен. Проверьте,
что заголовок выглядит как Authorization: Bearer linkd_…, а ключ
скопирован целиком, без пробелов и переносов. Если всё верно — запросите новый. |
| 403 | «ключ интеграции даёт только чтение» | Вы пытаетесь что-то изменить. Ключом это невозможно ни по ошибке, ни намеренно. |
| 403 | «этот раздел ключу интеграции недоступен» | Адрес не входит в открытое интеграциям. Доступны объекты, события, тревоги и отчёты — все описаны на этих вкладках. |
| 404 | «объект не найден» | Такого объекта нет или он чужой. Со стороны ключа эти случаи неразличимы намеренно: иначе по номерам можно было бы перебрать чужие объекты. |
| 422 | перечисление полей | Неверный или пропущенный параметр в адресе. Сверьтесь с примером на вкладке. |
| 500 | внутренняя ошибка | Это наша сторона. Запишите время и запрос — и сообщите обслуживающей организации. |
Пустой ответ — не ошибка
Пришло [] — значит данных нет: ни активных тревог, ни событий за период.
Для пожарного пульта это желаемое состояние.
Безопасность
Как хранить ключ
- Не в коде программы. Код попадает в хранилища версий, копируется, пересылается. Ключ должен лежать в настройках или в переменной окружения.
- Не в переписке. Письмо с ключом останется в почте навсегда — и у вас, и у отправителя, и в резервных копиях почтового сервера.
- Не в мессенджерах и SMS. Сообщение видно на заблокированном экране при доставке и попадает в резервную копию телефона.
- Один ключ — одна программа. Тогда при утечке отзовут ровно её, а остальные интеграции продолжат работать.
Что видно с той стороны
У обслуживающей организации записано, когда ключ выдан, кому, как передан и когда им пользовались в последний раз. Ключ, который год лежит без дела, отзовут и спросят, нужен ли он ещё.
Чего ключ не может в принципе
- Изменить что-либо: тревоги, карточки, настройки — только чтение.
- Увидеть объекты других заказчиков.
- Узнать, как устроен обмен пульта с приборами: пара «порт + номер прибора» наружу не отдаётся никому.
- Войти в кабинет или в пульт — форма входа ключ не принимает.
Программисту
Если вы передаёте эту инструкцию разработчику — вот всё то же самое коротко.
| Что | Значение |
|---|---|
| Базовый адрес | — |
| Проверка подлинности | заголовок Authorization: Bearer <ключ> |
| Формат | JSON, UTF-8 |
| Способы | только GET |
| Машинное описание | /openapi.json |
Доступные адреса
| Адрес | Что отдаёт |
|---|---|
/пользователь | Сведения о самом ключе |
/объекты | Список объектов |
/объекты/{номер} | Карточка объекта: разделы, зоны, планы |
/события/последние?количество=N | Последние события |
/события/журнал?с=…&по=… | События за период |
/инциденты/активные | Тревоги в работе |
/отчёты/сводка?с=…&по=… | Сводка по объектам за период |
Те же данные доступны латинскими адресами — /objects,
/events/recent, /incidents/active и так далее — для систем,
которые плохо работают с русскими адресами.
Порядок работы
- При запуске —
/объекты, сохранить соответствие номеров своим объектам. - Раз в 10–30 секунд —
/инциденты/активные, сравнить с прошлым разом: появилось новое — реагировать, пропало — тревогу закрыли. - Раз в минуту —
/события/последние, брать только те, у которыхidбольше последнего обработанного. - Ошибку 401 считать поводом остановиться и позвать человека, а не поводом повторять запрос в цикле.
+00:00. Приводите его к своему поясу при выводе, а хранить лучше как есть.