> For the complete documentation index, see [llms.txt](https://halwarsings-organization.gitbook.io/halchat/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://halwarsings-organization.gitbook.io/halchat/halapi/halchat-web.md).

# HalChat (Web)

В этой главе будут все API запросы доступные для пользователей с обычными правами. **Ответ всегда в JSON формате.**

## Что обязательно указывается во всех API запросах

1. В POST запросах должен быть указан "code" - это API ключ для прямого доступа к запросам от аккаунта, ни в коем случае его никому не передавать!!! Приватный ключ можно получить в настройках - <https://halwarsing.net/settings>
2. Если нет "code" можно использовать сессионный ключ "uid" в cookie, он при каждой новой сессии новой, но их не может быть больше 10 одновременно для аккаунта.
3. "req" - это наименование запроса, какую api функцию вы хотите выполнить.

## Какие параметры всегда в ответе от API

1. errorCode: int \[0;4] - код типа ошибки
2. error: string - пояснение или наименование ошибки

## Пример запроса

**POST** /api

**Body**\
code: string(100) /^\[a-zA-Z0-9]+$/\
req: string /^\[a-zA-Z0-9]+$/ = "getMessages"\
limit: int = 100\
chatId: int = 1\
\
**Response**\
{ "errorCode": 0, "error": "Успешно", "messages": \[ { "uid": 1, "fromChat": 1, "fromId": 47, "fromIcon": "vIGhoFOfoRuwfBWtd8aF3qedcTcrWcUnVZu8iQ4j3U7Iy8yhZ7nWqplHqbZanAPWHXK5eNqDQGZYbiHAzKMOYgd4F450hfYCad8O", "fromNickname": "halwarsing", "message": "99c7a1", "attachments": \[], "time": 1738091283, "receive\_message\_sound": "JpSUQjNQDThj7yfahevVlBBIlgPDUAoy9vTgUs1oBKvhuSSOtt3fuk7ikXKVH2Ppd4D3ocBIlpfLAs0k4srW4cvxtJeJDOgFY6ny", "soundMsg": "-1", "answerMsg": "-1", "type": "0", "commentMsg": "-1", "encryptId": "1738091283242211", "recordMic": "-1", "isReaded": false, "dataBot": "" } ]}

## Типы ошибок

0\. Успешно, либо без ошибок.\
1\. Не указан тип запроса.\
2\. Не указан параметр.\
3\. Неправильного типа параметр. То есть отправили неправильного вида или формата данные, либо данные не подходят по другим причинам.\
4\. Другая причина которая прописана в "error".

## HalChatMessageType

0 - обычное\
1 - пост

## HalChatMessage

uid: int - целочисленный идентификатор сообщения\
fromChat: int - целочисленный идентификатор чата\
fromId: int - целочисленный идентификатор отправителя\
fromIcon: str - id HalDrive файла аватара отправителя\
fromNickname: str - никнейм отправителя\
message: str - зашифрованное сообщение\
attachments: list - список id HalDrive файлов прикреплённых к сообщению\
time: int - unix время в секундах когда было отправлено сообщение\
receive\_message\_sound: str - id HalDrive файла звука прихода сообщения\
sound\_msg: str - id HalDrive файла или "-1" звука прихода сообщения\
type: [HalChatMessageType](#halchatmessagetype) - тип сообщения\
commentMsg: int - целочисленный идентификатор сообщения поста, если это комментарий\
encryptId: str - id для уникального шифрования каждого сообщения - hex строка (размером только 16 символов)\
recordMic: str - голосовое сообщение - id файла HalDrive\
isReaded: bool - прочитано ли сообщение кем либо кроме отправителя\
answerMsg: int - целочисленный идентификатор сообщения если сообщение прикреплено к этому сообщению\
dataBot: str - данные от бота\
\
**Если есть answerMsg**\
answerMsgText: str - зашифрованное сообщение\
answerMsgTextEncoded: bool - если оно удалено или пустое, только файлы или recordMic, то answerMsgText будет обычным текстом\
answerMsgNickname: str - никнейм отправителя сообщения\
\
**Если это пост**\
countComments: int - кол-во комментариев на данном посту

## getMessages

Получение списка сообщений

**Параметры**\
**Обязательные**\
limit: int - максимальное кол-во получение сообщений за один запрос \[1;1000]\
chatId: int - целочисленный идентификатор чата, указан в настройках чата\
\
**Дополнительные**\
postId: int - id сообщения в виде поста, чтобы получить сообщения-комментарии данного поста\
start: int - id сообщения выше которого начинается список чтобы получать не последние сообщения, а с нужного диапазона.\
\
**Ответ**\
messages: list - массив сообщений (тип [HalChatMessage](#halchatmessage))\
**Результат**\
{ "errorCode": 0, "error": "Успешно", "messages": \[ { "uid": 1, "fromChat": 1, "fromId": 47, "fromIcon": "vIGhoFOfoRuwfBWtd8aF3qedcTcrWcUnVZu8iQ4j3U7Iy8yhZ7nWqplHqbZanAPWHXK5eNqDQGZYbiHAzKMOYgd4F450hfYCad8O", "fromNickname": "halwarsing", "message": "99c7a1", "attachments": \[], "time": 1738091283, "receive\_message\_sound": "JpSUQjNQDThj7yfahevVlBBIlgPDUAoy9vTgUs1oBKvhuSSOtt3fuk7ikXKVH2Ppd4D3ocBIlpfLAs0k4srW4cvxtJeJDOgFY6ny", "soundMsg": "-1", "answerMsg": "-1", "type": "0", "commentMsg": "-1", "encryptId": "1738091283242211", "recordMic": "-1", "isReaded": false, "dataBot": "" } ]}

## getNewMessages

Получение списка новых сообщений и действий в чате

**Параметры**\
**Обязательные**\
limit: int - максимальное кол-во получение сообщений за один запрос \[1;1000]\
chatId: int - целочисленный идентификатор чата\
firstId: int - целочисленный идентификатор сообщения (если нет id, то указываем -1) - необходим для отслеживания новых сообщений, то есть новые сообщения относительно firstId - для вас последнее сообщение.\
lastAction: int - целочисленный идентификатор действия (если нет, то указываем -1) - необходим для отслеживания новых действий, то есть новые действия относительно lastAction - для вас последнее действие.\
\
**Ответ**\
messages: list - массив сообщений (тип [HalChatMessage](#halchatmessage))\
actions: list - массив действий (тип HalChatAction)\
icon: str - аватар чата\
**Результат**\
{ "errorCode": 0, "error": "Успешно", "messages": \[ { "uid": 3345, "fromChat": 215, "fromId": 47, "fromIcon": "vIGhoFOfoRuwfBWtd8aF3qedcTcrWcUnVZu8iQ4j3U7Iy8yhZ7nWqplHqbZanAPWHXK5eNqDQGZYbiHAzKMOYgd4F450hfYCad8O", "fromNickname": "halwarsing", "message": "7b9b", "attachments": \[], "time": 1739225770, "receive\_message\_sound": "JpSUQjNQDThj7yfahevVlBBIlgPDUAoy9vTgUs1oBKvhuSSOtt3fuk7ikXKVH2Ppd4D3ocBIlpfLAs0k4srW4cvxtJeJDOgFY6ny", "soundMsg": "-1", "answerMsg": "-1", "type": "0", "commentMsg": "-1", "encryptId": "1739225771753215", "recordMic": "-1", "isReaded": false, "dataBot": "" } ], "actions": \[], "icon": "7DxquHnideh6SWErqMy5HKnML424g90e7RHnqsDLI5IeunbAohe6tpdrZvsO0YL5mOCZffpPyxPXNGDzNjseZGA66tUtvlXLKHVm" }

## getAllNewMessages

Получение списка всех новых сообщений с выбранных чатов.

**Параметры**\
**Обязательные**\
chats: list - массив чатов с firstId (Пример: {'1': '222'}). Ограничен по размеру до 220000 символов.\
\
**Ответ**\
messages: list - массив сообщений (тип [HalChatMessage](#halchatmessage))\
**Результат**\
{ "errorCode": 0, "error": "Успешно", "messages": \[ { "uid": 3345, "fromChat": 215, "fromId": 47, "fromIcon": "vIGhoFOfoRuwfBWtd8aF3qedcTcrWcUnVZu8iQ4j3U7Iy8yhZ7nWqplHqbZanAPWHXK5eNqDQGZYbiHAzKMOYgd4F450hfYCad8O", "fromNickname": "halwarsing", "message": "7b9b", "attachments": \[], "time": 1739225770, "receive\_message\_sound": "JpSUQjNQDThj7yfahevVlBBIlgPDUAoy9vTgUs1oBKvhuSSOtt3fuk7ikXKVH2Ppd4D3ocBIlpfLAs0k4srW4cvxtJeJDOgFY6ny", "soundMsg": "-1", "answerMsg": "-1", "type": "0", "commentMsg": "-1", "encryptId": "1739225771753215", "recordMic": "-1", "isReaded": false, "dataBot": "" } ]}

## getListChats

Получение списка чатов пользователя.

**Параметров нет**\
\
**Ответ**\
chats: list - список чатов.\
**Результат**\
{ "errorCode": 0, "error": "Успешно", "chats": \[ {"'uid": 1, 'id': "id1", "icon": "vIGhoFOfoRuwfBWtd8aF3qedcTcrWcUnVZu8iQ4j3U7Iy8yhZ7nWqplHqbZanAPWHXK5eNqDQGZYbiHAzKMOYgd4F450hfYCad8O", "name": "Name Chat", "fromMe": true, "publicType": 0, "isAllowMessages": true, "chatType": 0, "isAllowComments": false, "created": 1739225770, "lastMessage"=> { "uid": 3345, "fromChat": 1, "fromId": 47, "fromIcon": "vIGhoFOfoRuwfBWtd8aF3qedcTcrWcUnVZu8iQ4j3U7Iy8yhZ7nWqplHqbZanAPWHXK5eNqDQGZYbiHAzKMOYgd4F450hfYCad8O", "fromNickname": "halwarsing", "message": "7b9b", "attachments": \[], "time": 1739225770, "receive\_message\_sound": "JpSUQjNQDThj7yfahevVlBBIlgPDUAoy9vTgUs1oBKvhuSSOtt3fuk7ikXKVH2Ppd4D3ocBIlpfLAs0k4srW4cvxtJeJDOgFY6ny", "soundMsg": "-1", "answerMsg": "-1", "type": "0", "commentMsg": "-1", "encryptId": "1739225771753215", "recordMic": "-1", "isReaded": false, "dataBot": "" }, "maxLastMessage": 3345, "maxAction": -1}]}

## sendMessage

Отправка сообщения\
\
**Параметры**\
**Обязательные**\
chatId: int - целочисленный идентификатор чата\
message: text - текст сообщения в зашифрованном виде\
attachments: list - список id файлов HalDrive прикреплённых к сообщению\
\
**Дополнительные**\
answerMsg: int - целочисленный идентификатор сообщения, на кого ссылается данное сообщение\
commentMsg: int - целочисленный идентификатор поста, куда отправляется данное сообщение-комментарий\
recordMic: str - голосовое сообщение - id файла HalDrive\
soundMsg: str - звук прихода сообщения для данного сообщения - id файла HalDrive\
encryptId: str - id для уникального шифрования каждого сообщения - hex строка (размером только 16 символов)\
\
**Для ботов**\
buttons: list - список кнопок в сообщении от бота. Пример: \
`[`\
&#x20;  `{"text": "кнопка0", "color": "#ff0000"},`\
&#x20;  `{"text": "кнопка1", "color": "#00ff00"}`\
`]`\
plugins: dict - данные для плагинов HalChat от бота, нужно указать id плагина и данные. Пример:\
`{`\
&#x20;     `"HalStatisticsPlugin": {`\
&#x20;           `"type": "ChartLine",`\
&#x20;           `"name":"Датчик температуры",`\
&#x20;           `"names":["33:33:33"],`\
&#x20;           `"data":[222],`\
&#x20;           `"color": "#ff0000",`\
&#x20;           `"widthLine":3`\
&#x20;     `}`\
`}` \
\
**Ответ**\
type: int - тип сообщения HalChatMessageType\
uid: int - целочисленный идентификатор сообщения\
countComments: int - кол-во комментариев\
fromId: int - id пользователя от кого отправлено сообщение\
fromIcon: str - id аватара профиля отправителя\
fromNickname: str - никнейм отправителя\
time: int - время отправления сообщения\
\
**При answerMsg**\
answerMsgText: str - текст прикреплённого сообщения в зашифрованном виде\
\
**Результат**\
`{`\
&#x20;  `"errorCode": 0,`\
&#x20;  `"error": "Успешно",`\
&#x20;  `"type": 0,`\
&#x20;  `"countComments": 0,`\
&#x20;  `"uid": 4402,`\
&#x20;  `"fromId": "47",`\
&#x20;  `"fromIcon": "vIGhoFOfoRuwfBWtd8aF3qedcTcrWcUnVZu8iQ4j3U7Iy8yhZ7nWqplHqbZanAPWHXK5eNqDQGZYbiHAzKMOYgd4F450hfYCad8O",`\
&#x20;  `"fromNickname": "halwarsing",`\
&#x20;  `"time": 1743711798`\
`}`&#x20;

## deleteMessage

Удаление сообщения в чате.\
\
**Параметры**\
**Обязательные**\
chatId: int - целочисленный идентификатор чата\
msgId: int - целочисленный идентификатор сообщения\
\
**Ответ**\
msg: int - целочисленный идентификатор сообщения\
\
**Результат**\
`{`\
&#x20;   `"errorCode": 0,`\
&#x20;   `"error": "Успешно",`\
&#x20;   `"msg": 1`\
`}`&#x20;

## editMessage

Изменение сообщения\
\
**Параметры**\
**Обязательные**\
chatId: int - целочисленный идентификатор чата\
msgId: int - целочисленный идентификатор сообщения\
message: text - текст сообщения в зашифрованном виде\
attachments: list - список id файлов HalDrive прикреплённых к сообщению\
\
**Дополнительные**\
encryptId: str - id для уникального шифрования каждого сообщения - hex строка (размером только 16 символов)\
\
**Ответ**\
uid: int - целочисленный идентификатор сообщения\
message: [HalChatMessage](#halchatmessage) - сообщение\
\
**Результат**\
`{` \
&#x20;   `"errorCode": 0,`\
&#x20;   `"error": "Успешно",` \
&#x20;   `"uid": 3345,`\
&#x20;   `"message": [`\
&#x20;       `{` \
&#x20;           `"uid": 3345,` \
&#x20;           `"fromChat": 215,` \
&#x20;           `"fromId": 47,` \
&#x20;           `"fromIcon": "vIGhoFOfoRuwfBWtd8aF3qedcTcrWcUnVZu8iQ4j3U7Iy8yhZ7nWqplHqbZanAPWHXK5eNqDQGZYbiHAzKMOYgd4F450hfYCad8O",` \
&#x20;           `"fromNickname": "halwarsing",` \
&#x20;           `"message": "7b9b",` \
&#x20;           `"attachments": [],` \
&#x20;           `"time": 1739225770,` \
&#x20;           `"receive_message_sound": "JpSUQjNQDThj7yfahevVlBBIlgPDUAoy9vTgUs1oBKvhuSSOtt3fuk7ikXKVH2Ppd4D3ocBIlpfLAs0k4srW4cvxtJeJDOgFY6ny",` \
&#x20;           `"soundMsg": "-1",` \
&#x20;           `"answerMsg": "-1",` \
&#x20;           `"type": "0",` \
&#x20;           `"commentMsg": "-1",` \
&#x20;           `"encryptId": "1739225771753215",` \
&#x20;           `"recordMic": "-1",` \
&#x20;           `"isReaded": false,` \
&#x20;           `"dataBot": ""` \
&#x20;       `}` \
&#x20;   `],` \
&#x20;   `"actions": [],` \
&#x20;   `"icon": "7DxquHnideh6SWErqMy5HKnML424g90e7RHnqsDLI5IeunbAohe6tpdrZvsO0YL5mOCZffpPyxPXNGDzNjseZGA66tUtvlXLKHVm"` \
`}`
