Пример реализации собственного бота (CustomBot) для приёма уведомлений от Обновлятора-1С.
Приложение запускает HTTP-сервер и сохраняет полученные сообщения и файлы в локальную папку ReceivedData.
- .NET 8 SDK (или новее)
Проверить установку:
dotnet --version- Откройте терминал в папке проекта.
- Запустите:
dotnet runСервер запустится на порту 9099. В консоли будет выведен полный путь к папке ReceivedData, куда сохраняются данные.
Все настройки находятся в начале файла Program.cs в виде констант:
| Константа | Значение по умолчанию | Описание |
|---|---|---|
DefaultPort |
9099 |
Порт HTTP-сервера |
Token |
MY-SECRET-TOKEN-CHANGE-ME |
Токен авторизации (Bearer-токен) |
Важно: перед использованием замените токен на свой собственный.
В настройках CustomBot укажите:
| Параметр | Значение |
|---|---|
| Token | Тот же токен, что указан в Program.cs |
| SendMessageUrl | http://<адрес-сервера>:9099/sendMessage |
| SendFileUrl | http://<адрес-сервера>:9099/sendFile |
Если бот запущен на том же компьютере, что и обновлятор, используйте http://localhost:9099/....
Настройка параметров Custom-бота:
Настройка уведомлений — выберите созданного бота в качестве средства для отправки и укажите получателя:
Приём текстового сообщения.
- Query-параметры:
chat_id(обязательный) — идентификатор получателя (чат, канал или пользователь), которому адресовано уведомление.batch_id(обязательный) — уникальный идентификатор пачки (GUID). Объединяет текстовое сообщение и все прикреплённые файлы в рамках одного уведомления, позволяя определить, какие файлы относятся к какому сообщению.
- Заголовок:
Authorization: Bearer <token> - Тело: JSON с полями
subject,bodyиreport_data - Ответ при успехе:
{"ok": true} - Ответ при ошибке:
{"ok": false, "error": "Описание ошибки."}(см. Коды ответов)
Приём файла.
- Query-параметры:
chat_id(обязательный) — идентификатор получателя (тот же, что и в/sendMessage).batch_id(обязательный) — идентификатор пачки, связывающий этот файл с сообщением из соответствующего вызова/sendMessage.
- Заголовок:
Authorization: Bearer <token> - Тело:
multipart/form-data, полеdocumentс файлом - Ответ при успехе:
{"ok": true} - Ответ при ошибке:
{"ok": false, "error": "Описание ошибки."}(см. Коды ответов)
Все данные сохраняются в папку ReceivedData рядом с исполняемым файлом.
Каждый запрос создаёт подпапку вида:
ReceivedData/
2025-01-15_143022345_abc123_message/
message.json — тело сообщения (pretty-print JSON)
params.json — параметры запроса (chat_id, batch_id)
2025-01-15_143025678_abc123_file/
report.zip — полученный файл (оригинальное имя)
params.json — параметры запроса (chat_id, batch_id)
Формат имени подпапки: {дата}_{время с миллисекундами}_{batch_id}_{тип}.
Пример принятого сообщения (message.json):
Для создания автономного исполняемого файла:
dotnet publish -c Release -o ./publishДля single-file публикации (один файл):
dotnet publish -c Release -r win-x64 --self-contained -o ./publish
dotnet publish -c Release -r linux-x64 --self-contained -o ./publish
dotnet publish -c Release -r osx-x64 --self-contained -o ./publish| Код | Описание | Пример ответа |
|---|---|---|
| 200 | Успех, данные сохранены | {"ok": true} |
| 400 | Ошибка запроса (например, отсутствует обязательный параметр) | {"ok": false, "error": "Описание ошибки..."} |
| 401 | Неверный токен авторизации | {"ok": false, "error": "Описание ошибки..."} |


