tdlib_ping — официальный JSON-интерфейс TDLib
Бинарник вызывает td_create_client_id / td_send / td_receive / td_execute из td/telegram/td_json_client.h (рекомендуемый multi-client API), без Node.js.
Контракт stdout — одна строка JSON для mtproxy_checkerd:
{"ok":true,"error":"","exit_code":0}
Сборка в CI (Gitea)
В репозитории есть workflow .gitea/workflows/tdlib_ping.yaml (те же триггеры, что и у публикации Docker: push по любой ветке и любому тегу, плюс workflow_dispatch):
- при push тега собирается
tdlib_ping-linux-amd64и прикрепляется к релизу с этим тегом (релиз создаётся автоматически, если его ещё нет); - при push ветки или ручном запуске — только артефакт прогона в Actions.
Скачайте бинарник со страницы релиза или из вкладки Actions → нужный run → Artifacts. На сервере положите в каталог вроде /usr/local/bin, выставьте chmod +x, задайте MTPROXY_TDLIB_HELPER.
Сборка
Linux (Debian/Ubuntu), установите заголовки и библиотеку, например:
Важно: в Ubuntu 24.04 (Noble) пакета libtdjson-dev в официальном apt нет (ошибка Unable to locate package). Используйте 22.04 (Jammy) / Debian bookworm или сборку TDLib из исходников.
sudo apt-get install -y libtdjson-dev # Jammy/Bookworm и др.; имя может отличаться по дистрибутиву
export CGO_ENABLED=1
go build -tags=tdlib -o tdlib_ping ./cmd/tdlib_ping
macOS: brew install tdlib, затем при необходимости export PKG_CONFIG_PATH=... если pkg-config --libs tdlib находит -ltdjson.
Без libtdjson линковка завершится ошибкой — это ожидаемо.
Сборка без тега (как часть go build ./...):
go build ./cmd/tdlib_ping
получится заглушка, которая печатает JSON с exit_code: 2 и пояснением — чтобы репозиторий собирался без TDLib.
Переменные окружения
| Переменная | По умолчанию | Назначение |
|---|---|---|
MTPROXY_TD_API_ID |
12345 |
Замените на значение с my.telegram.org |
MTPROXY_TD_API_HASH |
демо-строка из примера TDLib | Замените на свой api_hash |
MTPROXY_TDLIB_PING_MS |
45000 |
Общий дедлайн цикла (мс) |
MTPROXY_TDLIB_DATABASE_DIR |
пусто | Если задан — постоянный каталог для database_directory / files_directory (подкаталоги db/ и files/ создаются автоматически). Иначе — временный каталог на каждый запуск |
MTPROXY_TD_USE_TEST_DC |
пусто | Если 1 — use_test_dc: true в setTdlibParameters (иногда помогает обойти ожидание телефона на «чистой» БД) |
Запуск
./tdlib_ping 'tg://proxy?server=HOST&port=PORT&secret=HEX'
Если MTPROXY_TDLIB_DATABASE_DIR не задан, каталоги БД TDLib создаются под уникальным префиксом во временном каталоге на каждый запуск (и удаляются после выхода).
Ограничение
При первом запуске с «чистой» БД TDLib может перейти в authorizationStateWaitPhoneNumber. Тогда helper завершится с ошибкой в JSON — нужен уже проинициализированный database_directory или рабочий сценарий входа. Для типичного мониторинга MTProxy на выделенной машине обычно достаточно повторных запусков с фиксированным каталогом (MTPROXY_TDLIB_DATABASE_DIR, см. таблицу выше).