В данной статье рассмотрен способ отправки уведомлений из HOMEd в чаты сервиса https://vk.com
Краткая схема настройки:
- Создание и настройка бота (сообщества) в сервисе vk.com
- Создание и настройка скриптов для отправки уведомлений
- Диагностика и получение ID чатов
Пошаговая настройка:
1. Создание и настройка бота (сообщества) в сервисе vk.com
Информация о чат-ботах VK в официальном источнике https://dev.vk.com/ru/api/bots/overview
Особенность чат-ботов VK работа от имени сообществ, то есть для создания бота необходимо создать в VK сообщество.
1.1. Переходим по ссылке создания нового сообщества https://vk.com/groups_create
1.2. Заполняем поля "Название" и "Тематика".

1.3. Проходим шаги: Создать сообщество -> "Настраивать дальше" -> Продолжить -> Продолжить
1.4. На главной странице созданного сообщества обращаем внимание на поле "Адрес" в нём нам необходимо запомнить цифровое значение. В нашем примере это 236793532. Далее будет называть эту комбинацию GROUP_ID

1.5. В разделе "Дополнительно" -> "Работа с API" нажимаем кнопку "Создать ключ"

1.6. Устанавливаем следующие разрешения: "Разрешить приложению доступ к управлению сообществом" и "Разрешить приложению доступ к сообщениям сообщества". Нажимаем кнопку "Создать". Выполняем подтверждение действий. Сохраняем полученный ключ. Далее будем обозначать полученный ключ как API_KEY
1.7. Переходим на вкладку "Long Poll API". На подвкладке "Настройки" в поле "Long Poll API" выбираем значение "Включено". На подвкладке "Типы событий" выбираем "Входящее сообщение" и "Исходящее сообщение"
1.8. На странице созданного сообщества нажимаем кнопку "Сообщение". В открывшемся диалоговом окне нажимаем кнопку "Начать".

На этом настройка бота завершена, для получения уведомлений от бота в лс этих настроек достаточно.
Для получения уведомлений в чатах необходимо выполнить дополнительные шаги для добавления бота в существующий чат и выдачи прав на чтение всех сообщений в чате.
1.9. На главной странице сообщества нажимаем на кнопку "Добавить в чат"

1.10. Далее в настройках нажимаем на кнопку "+ Добавить в чат" и выбираем интересующий чат.
1.11. Нажимаем на название чата. В разделе "Доступ к переписке" выбираем вариант "Полный"

2. Создание и настройка скриптов для отправки уведомлений
Пример дан для устройства МТС с OpenWrt.
2.1. Для работы скриптов необходимы пакеты curl и jq. Установить их можно следующим образом:
opkg update
opkg install curl jq
2.2. Создаём первый скрипт vk_listen_messages.sh он необходим для диагностики работы и получения id чатов куда добавлен бот.
/root/vk_listen_messages.sh
#!/bin/sh
# Слушает входящие сообщения бота VK (LongPoll)
source /root/vk_token.env
API_VERSION="5.199"
echo "Получение сервера LongPoll..."
# Получаем сервер LongPoll
SERVER_INFO=$(curl -s "https://api.vk.com/method/groups.getLongPollServer" \
-d "access_token=${API_KEY}" \
-d "v=${API_VERSION}" \
-d "group_id=${GROUP_ID}")
# Извлекаем данные через jq
SERVER=$(echo "$SERVER_INFO" | jq -r '.response.server')
KEY=$(echo "$SERVER_INFO" | jq -r '.response.key')
TS=$(echo "$SERVER_INFO" | jq -r '.response.ts')
if [ -z "$SERVER" ] || [ "$SERVER" = "null" ]; then
echo "Ошибка получения сервера LongPoll"
echo "Ответ: $SERVER_INFO"
exit 1
fi
echo "LongPoll подключен. Ожидание сообщений..."
echo "Отправьте сообщение боту или в чат (Ctrl+C для выхода)"
echo "------------------------------------------------------"
# Основной цикл LongPoll
while true; do
RESPONSE=$(curl -s --max-time 30 "${SERVER}?act=a_check&key=${KEY}&ts=${TS}&wait=25&v=${API_VERSION}")
# Проверяем на ошибку
FAILED=$(echo "$RESPONSE" | jq -r '.failed // empty')
if [ "$FAILED" = "1" ]; then
TS=$(echo "$RESPONSE" | jq -r '.ts')
continue
elif [ "$FAILED" = "2" ] || [ "$FAILED" = "3" ]; then
# Получаем новый ключ
SERVER_INFO=$(curl -s "https://api.vk.com/method/groups.getLongPollServer" \
-d "access_token=${API_KEY}" \
-d "v=${API_VERSION}" \
-d "group_id=${GROUP_ID}")
KEY=$(echo "$SERVER_INFO" | jq -r '.response.key')
TS=$(echo "$SERVER_INFO" | jq -r '.response.ts')
continue
fi
# Обновляем ts
NEW_TS=$(echo "$RESPONSE" | jq -r '.ts')
[ -n "$NEW_TS" ] && [ "$NEW_TS" != "null" ] && TS=$NEW_TS
# Проверяем наличие сообщений и выводим
echo "$RESPONSE" | jq -r '.updates[] | select(.type == "message_new") |
"[\(.object.message.from_id)|\(.object.message.peer_id)] \(.object.message.text // "[без текста]")"' 2>/dev/null | while read -r line; do
FROM_ID=$(echo "$line" | cut -d'|' -f1 | tr -d '[]')
PEER_ID=$(echo "$line" | cut -d'|' -f2 | tr -d '[]')
TEXT=$(echo "$line" | cut -d'|' -f3-)
if [ -n "$PEER_ID" ]; then
echo "[$(date '+%H:%M:%S')] Сообщение от ${FROM_ID} в чате ${PEER_ID}: ${TEXT}"
fi
done
done
2.3. Создаем второй скрипт vk_token.env в нём содержится API_KEY и GROUP_ID которые мы зафиксировали проходя шаги по созданию бота.
/root/vk_token.env
export API_KEY="vk1.a.MpyUWhsdfgQJgjkxHldfkgsOIWwB0vHZicYyCmq6MEg5xyvYPHWOURXeqDKrX5dC4sdfgsdgfGDLMk3WQgLH1dsfgsergG1fmNPG5Pgy6cfHkuMizQCA8dfsgfdg7ZBjS13QqgEQEFJl_C0sAlh_cb8lQOZfr5sdfgsdgf8Sc0EJp88gjHKqk5rQzJk2QuLvY7pJA"
export GROUP_ID=236793532
2.4. Создаём третий скрипт vk_send.sh он выполняет отправку уведомлений в указанный чат. ID чата указывается прямо в скрипте в переменной CHAT_ID
/root/vk_send.sh
#!/bin/sh
# Отправляет сообщение в чат VK через curl
source /root/vk_token.env
CHAT_ID=2001564001
API_VERSION="5.199"
if [ -z "$1" ]; then
echo "Использование: $0 <текст сообщения>"
exit 1
fi
MESSAGE="$*"
RANDOM_ID=$(date +%s%N)
RESPONSE=$(curl -s -X POST "https://api.vk.com/method/messages.send" \
--data-urlencode "peer_id=${CHAT_ID}" \
--data-urlencode "message=${MESSAGE}" \
--data-urlencode "random_id=${RANDOM_ID}" \
--data-urlencode "access_token=${API_KEY}" \
--data-urlencode "v=${API_VERSION}")
if echo "$RESPONSE" | grep -q '"response"'; then
echo "Сообщение отправлено: $MESSAGE"
else
echo "Ошибка: $RESPONSE"
exit 1
fi
3. Диагностика и получение ID чатов
Для получения ID собственного ID и ID чатов необходимо использовать утилиту vk_listen_messages.sh
Пример его работы:
root@nut-01:~# /root/vk_listen_messages.sh
Получение сервера LongPoll...
LongPoll подключен. Ожидание сообщений...
Отправьте сообщение боту или в чат (Ctrl+C для выхода)
------------------------------------------------------
[20:17:33] Сообщение от 9613495 в чате 9613495 тестовое сообщение:
[20:17:49] Сообщение от 9613495 в чате 2001564001 Тестовое сообщение из чата:
В первой строке сообщение отправлено боту лс. На выходе получаем наш собственный ID в примере это 9613495
Во второй строке сообщение отправлено из общего чата. На выходе получаем ID общего чата в примере это 2001564001
Заносим в скрипт отправки /root/vk_send.sh в переменную CHAT_ID нужный id и проверяем работу.
Пример отправки сообщений в общий чат:
root@nut-01:~# /root/vk_send.sh !!!
Сообщение отправлено: !!!
root@nut-01:~#

Ну а далее вы можете использовать этот скрипт в автоматизациях. В разделе "Actions" создаем действие с типом "shell"
Пример заполнения действия "shell":
/root/vk_send.sh "Входная дверь открылась"