🚀 Обновление Telegram-бота и интеграция с AmoCRM!
Сегодня я переписывал своего Telegram-бота, который следит за событиями в множестве чатов — кто вступил, кто вышел. Использую библиотеку Telegraf, и в новой версии 5 произойдут изменения: нужно будет использовать фильтры вместо указания названий событий при навешивании обработчиков. Вот пример кода:
const { Telegraf } = require('telegraf') const { message } = require('telegraf/filters')
const bot = new Telegraf(process.env.BOT_TOKEN) bot.start((ctx) => ctx.reply('Welcome')) bot.help((ctx) => ctx.reply('Send me a sticker')) bot.on(message('sticker'), (ctx) => ctx.reply('👍')) bot.hears('hi', (ctx) => ctx.reply('Hey there')) bot.launch()
// Enable graceful stop process.once('SIGINT', () => bot.stop('SIGINT')) process.once('SIGTERM', () => bot.stop('SIGTERM'))
Также доработал код, чтобы можно было удобно производить локальный запуск для разработки, так как бот живёт в облачной функции.
Интеграция с AmoCRM
Появилось требование добавлять сведения о пользователе в сделку в AmoCRM. Для этого нужно найти идентификатор сделки в базе. Так как к базе нет полноценного API, я использую NocoDB поверх PostgreSQL, который предоставляет только CRUD операции. Создаю туннель к виртуальной машине с PostgreSQL и через него подключаюсь к базе.
В базе в таблице хранятся записи о пользователях, и там есть массив чатов, в которых они должны состоять. Это поле является JSON, и для работы с ним нужно сначала преобразовать в JSONB. Запрос будет выглядеть так:
SELECT crm_id FROM tableName WHERE receivers::jsonb @> '[$1]'::jsonb;
Этот запрос позволит найти идентификатор сделки, основываясь на чате, в котором находится пользователь.
Работа продолжается, и я рад делиться своими достижениями! Если у вас есть вопросы или вы хотите обсудить детали, пишите в комментариях! 💬