Бот Telegram: различия между версиями
Дым (обсуждение | вклад) Нет описания правки |
Дым (обсуждение | вклад) |
||
Строка 6: | Строка 6: | ||
=Получение бота= | =Получение бота= | ||
Cгенерим нового телегобота в... генераторе телегоботов, для чего следует: | Cгенерим нового телегобота в... генераторе телегоботов, для чего следует: | ||
#Отправить боту-праотцу [https://t.me/BotFather @BotFather] команду '''/newbot'''. | |||
#Ввести название бота — в этой категории особых ограничений нет. | |||
#Задать техническое имя бота, которое будет отображаться в адресной строке. К нему есть требования — оно должно: | |||
*быть уникальным, | |||
*написано латиницей, | |||
*оканчиваться на '''bot''' ''(так Телега защищается от злыдней, выдающих ботов за людей)''. | |||
По завершению сего действа BotFather пришлет токен-жетон нового бота в виде: <pre><10-числовой ИД бота>:ХХХ-<31-цифробуквенный жетон></pre>Каковой в дальнейшем и задействуем. | По завершению сего действа BotFather пришлет токен-жетон нового бота в виде: <pre><10-числовой ИД бота>:ХХХ-<31-цифробуквенный жетон></pre>Каковой в дальнейшем и задействуем. | ||
=Группы-чаты-каналы= | =Группы-чаты-каналы= | ||
Добавив свежеиспечённого бота в скопления людей, куда нужно слать мессаги, получим ИДы этих групп, имеющие вид 13-значного числа с дефисом в начале. | Добавив свежеиспечённого бота в скопления людей, куда нужно слать мессаги, получим ИДы этих групп, имеющие вид 13-значного числа с дефисом в начале. |
Версия от 06:37, 26 января 2023
Многие ищут способы отправлять оповещения о событиях на инфраструктуре в свои телеграм-группы/чаты.
Изучают перл, питон (дело хорошее, но необязательное), роются на гитхабе в поисках телегоботов, написанных другими.
А меж тем всё довольно просто.
Получение бота
Cгенерим нового телегобота в... генераторе телегоботов, для чего следует:
- Отправить боту-праотцу @BotFather команду /newbot.
- Ввести название бота — в этой категории особых ограничений нет.
- Задать техническое имя бота, которое будет отображаться в адресной строке. К нему есть требования — оно должно:
- быть уникальным,
- написано латиницей,
- оканчиваться на bot (так Телега защищается от злыдней, выдающих ботов за людей).
По завершению сего действа BotFather пришлет токен-жетон нового бота в виде:
<10-числовой ИД бота>:ХХХ-<31-цифробуквенный жетон>
Каковой в дальнейшем и задействуем.
Группы-чаты-каналы
Добавив свежеиспечённого бота в скопления людей, куда нужно слать мессаги, получим ИДы этих групп, имеющие вид 13-значного числа с дефисом в начале.
- Для публичных всё просто — с помощью нашего жетона-токена запросим их командой вида:
curl https://api.telegram.org/bot<жетон:бота>/getChat?chat_id=@ИмяГруппы
На что будет выводиться ответ, одним из полей в котором и станет искомый 13-числовой ИД с дефисом в начале. - Для приватных посложнее — потребуется:
- добавить в чатик бота @olegonbot по имени Акакий Акваланг и
- задать ему в этом чатике вопрос:
Акваланг?
- на что он через несколько секунд выдаст ответ, первым же полем которого и будет искомый ИД.
Отправка сообщений
Внесём в баш-скрипт команду (удобнее оформить как функцию — см. в примере ниже), которая при наступлении отслеживаемого события будет слать соответствующий текст по жетону бота и ИДу канала (на куски разбито для удобочитаемости, можно одной строкой):
curl -s -X POST -H 'Content-Type: application/json' \ -d '{"chat_id": "ИД_чатика", "text": "текст сообщения", "disable_notification": true}' \ https://api.telegram.org/bot<токен бота>/sendMessage
Пример скрипта
У меня таким макаром распаковывается дамп базы для проверки его на целостность:
#!/bin/bash
WD=/mnt/dumps.psql/daily # Ежедневные дампы на СХД.
DUMP=`ls -1 $WD/$1*|tail -2|head -1|sed 's|.*/||'` # Проверять предпоследнюю ежедневку.
DATE=`echo $DUMP | cut -d, -f2`
ChatID="-13_цифр" # ИД чатика, куда слать оповещения.
BoTokn="10_цифр:???-31_цифробуква" # Токен/жетон созданного для этого бота.
Notify(){ # Функция отправки оповещений, предварительно формирующая текст.
curl -s -X POST -H 'Content-Type: application/json' \
-d "{\"chat_id\": \"$ChatID\", \"text\": \"$1\", \"disable_notification\": true}" \
https://api.telegram.org/bot$BoTokn/sendMessage 2>&1 >/dev/null
}
case ${DUMP##*.} in
zst) UNPAK=zstdcat ;;
lzo) UNPAK="lzop -dcf" ;;
esac
TESTDB=check_${DUMP%%,*}
Notify "Распаковывается база $TESTDB от $DATE."
# [пере]создадим проверочную базу:
[ `psql -U postgres -c "\l+" | grep -c $TESTDB` -lt 1 ] ||
for DO in drop create; do
${DO}db -U postgres $TESTDB
done
# и распакуем в неё дамп:
$UNPAK $WD/$DUMP | psql -U postgres -d $TESTDB >/dev/null 2>&1
#date +"Elapsed %T" -ud @$[`date +%s`-START] # Сколько длился весь процесс.
TIME=$(date +%T -ud @$[`date +%s`-START])
Notify "$TESTDB распакована за $TIME, можно проверять целостность."