Как вставить скрипт в бота Телеграмм

В Airtable предусмотрено несколько типов создания сценариев: на основе встроенных механизмов, с помощью лоукод сервисов и через запуск кода, который срабатывает при определенных условиях.

Запускать код можно используя уже готовые готовые приложения в магазине Airtable или создать свой код. Скрипты можно запускать двумя способами.

Те скрипты, которые работают через магазин запускаются поверх сценария автоматизации.

Скрипты, которые вы добавляете в раздел автоматизации будут работать в фоновом режиме. Производить вычисления они будут только при определенных условиях, которые Вы пропишите в сценарии.

Настройка автоматизации для запуска скрипта

Для начала хочу предупредить, что скрипты в сценариях автоматизации будут работать только на платных тарифах уровнях Pro и Enterprise. Сама автоматизация будет работать стабильно начиная с тарифа Plus. На бесплатном тарифе автоматизацию можно запустить всего 100 раз.

Для создания автоматизации с помощью скрипта нужно зайти в меню Automations. Создать новый сценарий. Вначале укажите какие действия в базе данных станут триггером для срабатывания скрипта.

Установка скрипта Телеграм бота

Например, в моей базе данных указано, что если в таблице «Заявки» поле «Готовый документ» не будет пусто (т.е. оно имеет расширение attachment), а также поле в «Статус услуги» будет выбран пункт Завершен, то алгоритм передаст сценарий на следующий шаг.

Там нужно выбрать из типа действий Action type запуск скрипта. В разделе Configuration можно выбрать какие столбцы с данными будут участвовать в вычислениях.

Airtable поддерживает библиотеку fetch — это позволяет делать API вызовы к сторонним сервисам.

Из чего состоит скрипт вызова к API Telegram

Давайте рассмотрим пример моего скрипта для отправки сообщений в чат-бот с определенными данными клиенту в Телеграм.

const token = ‘5241676555:’;
//Указываем токен бота, выданный BotFatherlet inputConfig = input.config();
// Объявляем, что будет загружать некоторые данные из таблиц, которые пропишем ниже. let message = `$, Ваш документ готов по заказу №$.Скачайте его ”>по ссылке.
Ждем Вас снова.
Ваш,
RealEstate DocuService`;
//Записываем сообщение, которое бот будет присылать в телеграм. Можно применить базовую html разметку.console.log(`$ $’`);
// Выводим наше сообщение в консоль. Этот пункт не обязателен.const options = method: ‘POST’,
headers: Accept: ‘application/json’,
‘User-Agent’: ‘Airtable’,
‘Content-Type’: ‘application/json’,
>,
body: JSON.stringify( text: `$`,
parse_mode: ‘HTML’,
disable_web_page_preview: true,
disable_notification: true,
reply_to_message_id: 0,
chat_id: `$inputConfig.chat_id>`
//Этот параметр обязателен. Вы должны где-то сохранять chat id, чтобы бот мог отправлять нужные сообщением именно уже в диалог с ботом, запущенный пользователем. Например, в БД Airtable можно это делать.
>)
>;
// Объявляем константу options. В нее записываем какие параметры будут передаваться через API телеграм.fetch(`/sendMessage?chat_id=$?=parse_mode=’HTML’`» rel=»noopener ugc nofollow» target=»_blank»>https://api.telegram.org/bot$/sendMessage?chat_id=$?=parse_mode=’HTML’`, options)

Юзербот для телеграм на Python


.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
// Вызываем метод fetch и прописываем в нем вызов в API Telegram.

Вы можете откорректировать скрипт под Ваши нужды, подставляя нужные переменные из Airtable в сообщение бота.
После запуска скрипта нажмите на Test. Бот может выдавать ошибки: 404 и 400. Проверьте правильно ли вы прописали ключ API, все ли переменные прописаны и от Airtable и от JavaScript. Из-за маленькой ошибки данные могут не передаться в Телеграм.

Еще по теме:  Если в Телеграмме одна галка

Далее, скрипт сохраняете Finish editing. На панели автоматизации включаете значок ON.

Источник: medium.com

Как превратить любой скрипт в Telegram-бота

Если вам нужен простенький Telegram bot, способный выполнять скрипты (написанные на любом языке) и отвечать текстом и картинками, то вам под кат. Там вы найдёте рассказ о бот-движке, который делает то, что вам надо.

Telegram bot

Краткий список возможностей движка:

  • Движок может обслуживать сразу несколько ботов
  • Бот выполняет скрипты (написанные на любом языке)
  • Сообщение попадает на вход скрипту в виде аргументов и переменных окружения
  • Вывод скрипта может быть текстом, форматированным текстом или изображением (распознаётся автоматически)
  • Движок гарантирует поочерёдный запуск скриптов (при написании скриптов можно не думать про локи и конкурентный доступ к ресурсам)
  • Бота можно дёргать по HTTP, чтобы отправлять сообщен не в ответ на запрос, а «асинхронно» (например по cron-у)

Движок максимально неприхотлив: ему не нужны базы данных, публичные IP-шники, SSL-сертификаты… Можно просто запустить на лаптопе, сидя за НАТом с наглухо закрытыми портами. В общем, начать экспериментировать вы можете прямо не сейчас, не отрываясь от чтения.

Сейчас я покажу, как это всё запустить и оживить.

Сборка

Вам понадобится язык Go. Чтобы его поставить, не нужны даже root-права. Но, для простоты, далее, я буду предполагать, что он у вас стоит в системе.

Скачиваем и собираем проект:

cd tmp git clone https://github.com/michurin/cnbot.git cd cnbot go build ./cmd/. ./cnbot

При запуске без параметров (последняя команда) вы получите ошибку, что не указан конфигурационный файл. Это значит, что всё собралось правильно.

Начинаем разговор

Первым делом, вам надо зарегистрировать бота и получить для него токен. Это совсем не сложно: инструкция на сайте Telegram.

Создаём минимальный кофигурационный файл ( config.yaml ):

bots: firstBot: token: «22222222:AAAAAAAAAAAAAA» script: «/usr/bin/true»

Тут должен быть правильный токен и любой исполняемый файл в качестве скрипта (рекомендую выбить что-нибудь побезопасней, чем /bin/rm ). Проверяем настройки ( -i ):

./cnbot -i -c config.yaml

Если токен правильный, вы получите отчёт о состоянии бота.

Запускаем бота (без -i )

./cnbot -c config.yaml

Пытаемся добавить его в Telegram-клиенте. В логах бота видим ошибку

user 500050880 is not allowed

Это ваш user_id (у вас он будет другой), добавляем его в конфиг

bots: firstBot: token: «22222222:AAAAAAAAAAAAAA» script: «/bin/echo» allowed_users: [500050880]

Обратите внимание, я прописал echo в параметр script . Это быстрый (хоть и кривоватый) способ сделать echo-бота. Вы уже можете поговорить с ним. Попробуйте сказать hi , Hi! , -n hi .

Из подобного разговора сразу видно как легко получить уязвимость ( -n было интерпретировано как параметр echo ). Так же видно как формируются аргументы скрипта: сообщение приводится к нижнему регистру; допустимыми символами считаются буквы, цифры, минус, точка и подчёркивание; все недопустимые символы считаются разделителями.

Полное сообщение тоже доступно. Давайте заменим /bin/echo на простой скрипт и посмотрим переменные окружения:

#!/bin/sh env

Если сказать этому боту Hello! Он покажет переменные окружения

BOT_TEXT=Hello! BOT_FROM_FIRSTNAME=Alexey BOT_NAME=firstBot BOT_CHAT=500050880 BOT_FROM=500050880

Видно, что доступно оригинальное сообщение, имя и ID пользователя, который отправил сообщение, название бота (согласно конфигу; напомню, что движок может обслуживать сразу несколько ботов).

Если бот получает контакт или пересылку сообщения, то к переменным окружения добавляется информация о контакте или авторе оригинального сообщения. Это удобно, когда вы хотите добавить в white list нового пользователя. Чтобы узнать его ID — просто перешлите его контакт или любое его сообщение боту. См. пример в demo.sh.

Еще по теме:  Что делать если в Телеграмме пишет слишком много групп и каналов

Обратите внимание, что переменной PATH не видно. Если вам нужны экзотические пути, пропишите их явно в начале скрипта или используйте полные пути.

Скрипт можно чуть усовершенствовать

#!/bin/sh echo ‘%!PRE’ env | sort

Теперь вывод будет преформатированный. Можно использовать и markdown, см. всё тот же demo.sh.

Чтобы ответить картинкой, её достаточно просто вывалить на stdout :

#!/bin/sh curl -qfs https://golang.org/lib/godoc/images/footer-gopher.jpg

Если скрипт не выдаст ничего, то бот отправит сообщение «empty», чтобы бот действительно ничего не ответил, скрипт должен ответить одним единственным символом «точка».

Все примеры можно найти в demo-скрипте, а я бы чуть подробнее остановился бы на асинхронной нотификации.

Бот говорит сам

В боте можно включить HTTP сервер добавлением одной строки bind_address в конфиг:

bots: firstBot: token: «22222222:AAAAAAAAAAAAAA» script: «/bin/echo» allowed_users: [500050880] bind_address: «:9091»

Теперь вы можете отправить асинхронное сообщение:

То есть, пользователь получит его не в ответ на своё сообщение, а просто как нотификацию. Тело сообщения обрабатывается по тем же правилам, что и аутпут скрипта. То есть, вы можете отправлять форматированный текст и картинки.

Можно использовать и multipart/form-data :

curl -qfsX POST -F to=500050880 -F msg=ok «http://:9091»

Думаю, нет смысла обсасывать каждую деталь работы бота. У вас уже есть достаточно информации, чтобы понять, нужно оно вам или нет. Полный спектр возможностей можно посмотреть, поговорив с demo-сриптом. В конфиге можно указать таймауты для http-клиента и выполнения скрипта.

Все опции есть в readme проекта, хотя, думаю, большинству будет комфортно жить и с дефолтами.

Любые вопросы, пожелания, предложения — приветствуются.

Если вы всё ещё читаете.

. то могу рассказать, как я дошел до жизни такой.

Как превратить любой скрипт в Telegram-бота

Если вам нужен простенький Telegram bot, способный выполнять скрипты (написанные на любом языке) и отвечать текстом и картинками, то вам под кат. Там вы найдёте рассказ о бот-движке, который делает то, что вам надо.

Telegram bot

Краткий список возможностей движка:

  • Движок может обслуживать сразу несколько ботов
  • Бот выполняет скрипты (написанные на любом языке)
  • Сообщение попадает на вход скрипту в виде аргументов и переменных окружения
  • Вывод скрипта может быть текстом, форматированным текстом или изображением (распознаётся автоматически)
  • Движок гарантирует поочерёдный запуск скриптов (при написании скриптов можно не думать про локи и конкурентный доступ к ресурсам)
  • Бота можно дёргать по HTTP, чтобы отправлять сообщен не в ответ на запрос, а «асинхронно» (например по cron-у)

Движок максимально неприхотлив: ему не нужны базы данных, публичные IP-шники, SSL-сертификаты… Можно просто запустить на лаптопе, сидя за НАТом с наглухо закрытыми портами. В общем, начать экспериментировать вы можете прямо не сейчас, не отрываясь от чтения.

Сейчас я покажу, как это всё запустить и оживить.

Сборка

Вам понадобится язык Go. Чтобы его поставить, не нужны даже root-права. Но, для простоты, далее, я буду предполагать, что он у вас стоит в системе.

Скачиваем и собираем проект:

cd tmp git clone https://github.com/michurin/cnbot.git cd cnbot go build ./cmd/. ./cnbot

При запуске без параметров (последняя команда) вы получите ошибку, что не указан конфигурационный файл. Это значит, что всё собралось правильно.

Начинаем разговор

Первым делом, вам надо зарегистрировать бота и получить для него токен. Это совсем не сложно: инструкция на сайте Telegram.

Еще по теме:  Как записать полный адрес в Телеграмм

Создаём минимальный кофигурационный файл ( config.yaml ):

bots: firstBot: token: «22222222:AAAAAAAAAAAAAA» script: «/usr/bin/true»

Тут должен быть правильный токен и любой исполняемый файл в качестве скрипта (рекомендую выбить что-нибудь побезопасней, чем /bin/rm ). Проверяем настройки ( -i ):

./cnbot -i -c config.yaml

Если токен правильный, вы получите отчёт о состоянии бота.

Запускаем бота (без -i )

./cnbot -c config.yaml

Пытаемся добавить его в Telegram-клиенте. В логах бота видим ошибку

user 500050880 is not allowed

Это ваш user_id (у вас он будет другой), добавляем его в конфиг

bots: firstBot: token: «22222222:AAAAAAAAAAAAAA» script: «/bin/echo» allowed_users: [500050880]

Обратите внимание, я прописал echo в параметр script . Это быстрый (хоть и кривоватый) способ сделать echo-бота. Вы уже можете поговорить с ним. Попробуйте сказать hi , Hi! , -n hi .

Из подобного разговора сразу видно как легко получить уязвимость ( -n было интерпретировано как параметр echo ). Так же видно как формируются аргументы скрипта: сообщение приводится к нижнему регистру; допустимыми символами считаются буквы, цифры, минус, точка и подчёркивание; все недопустимые символы считаются разделителями.

Полное сообщение тоже доступно. Давайте заменим /bin/echo на простой скрипт и посмотрим переменные окружения:

#!/bin/sh env

Если сказать этому боту Hello! Он покажет переменные окружения

BOT_TEXT=Hello! BOT_FROM_FIRSTNAME=Alexey BOT_NAME=firstBot BOT_CHAT=500050880 BOT_FROM=500050880

Видно, что доступно оригинальное сообщение, имя и ID пользователя, который отправил сообщение, название бота (согласно конфигу; напомню, что движок может обслуживать сразу несколько ботов).

Если бот получает контакт или пересылку сообщения, то к переменным окружения добавляется информация о контакте или авторе оригинального сообщения. Это удобно, когда вы хотите добавить в white list нового пользователя. Чтобы узнать его ID — просто перешлите его контакт или любое его сообщение боту. См. пример в demo.sh.

Обратите внимание, что переменной PATH не видно. Если вам нужны экзотические пути, пропишите их явно в начале скрипта или используйте полные пути.

Скрипт можно чуть усовершенствовать

#!/bin/sh echo ‘%!PRE’ env | sort

Теперь вывод будет преформатированный. Можно использовать и markdown, см. всё тот же demo.sh.

Чтобы ответить картинкой, её достаточно просто вывалить на stdout :

#!/bin/sh curl -qfs https://golang.org/lib/godoc/images/footer-gopher.jpg

Если скрипт не выдаст ничего, то бот отправит сообщение «empty», чтобы бот действительно ничего не ответил, скрипт должен ответить одним единственным символом «точка».

Все примеры можно найти в demo-скрипте, а я бы чуть подробнее остановился бы на асинхронной нотификации.

Бот говорит сам

В боте можно включить HTTP сервер добавлением одной строки bind_address в конфиг:

bots: firstBot: token: «22222222:AAAAAAAAAAAAAA» script: «/bin/echo» allowed_users: [500050880] bind_address: «:9091»

Теперь вы можете отправить асинхронное сообщение:

То есть, пользователь получит его не в ответ на своё сообщение, а просто как нотификацию. Тело сообщения обрабатывается по тем же правилам, что и output скрипта. То есть, вы можете отправлять форматированный текст и картинки.

Можно использовать и multipart/form-data :

curl -qfsX POST -F to=500050880 -F msg=ok «http://:9091»

Думаю, нет смысла обсасывать каждую деталь работы бота. У вас уже есть достаточно информации, чтобы понять, нужно оно вам или нет. Полный спектр возможностей можно посмотреть, поговорив с demo-сриптом. В конфиге можно указать таймауты для http-клиента и выполнения скрипта.

Все опции есть в readme проекта, хотя, думаю, большинству будет комфортно жить и с дефолтами.

Любые вопросы, пожелания, предложения — приветствуются.

Если вы всё ещё читаете.

. то могу рассказать, как я дошел до жизни такой.

Рейтинг
( Пока оценок нет )
Загрузка ...