Отправка сообщение другим пользователям в Телеграм (Библиотека Telegraf)
var fs = require("fs")
const path = require("path"); // Подключаю библиотеку path
var envPath = path.join(__dirname, ".env") // создает переменную envPath, которая содержит путь к файлу .env. __dirname - это глобальная переменная в Node.js, которая представляет путь к текущей директории, в которой находится исполняемый файл.
require("dotenv").config({ path: envPath }) // загружает содержимое файла .env и помещает его в переменные окружения. Модуль dotenv позволяет загружать переменные окружения из файла .env в процесс Node.js
const { telegramToken, lpTrackerToken } = process.env // Деструктуризация telegramToken и lpTrackerToken изenv файла
const fetch = require('node-fetch'); // Подключаю библиотеку запросов
const { Telegraf } = require('telegraf'); // Подключаю библиотеку Telegraf
const bot = new Telegraf(telegramToken); // создает новый экземпляр класса Telegraf и присваивает его переменной bot. В скобках (telegramToken) указывается аргумент, который передается в конструктор класса
var ordersPath = path.join(__dirname, "orders.json")
async function fetchDataAndSaveToFile() {
const response = await fetch("https://direct.lptracker.ru/lead/103451/list?sort[created_at]=3", { headers: { token: lpTrackerToken } });
const data = await response.json(); // Преобразование ответа в JSON
if(recivedNewOrder(data.result)) {
var newIds = findNewOrders(data.result)
newIds.forEach(newId => console.log(newId))
}
}
function recivedNewOrder(newOrders) {
var oldOrders = JSON.parse(fs.readFileSync(ordersPath, "utf-8"))
return newOrders[0].id != oldOrders[0].id
}
function findNewOrders(newOrders) {
var newIds = []
var oldOrders = JSON.parse(fs.readFileSync(ordersPath, "utf-8"))
var oldOrderIds = oldOrders.map(oldOrder => oldOrder.id)
var newOrderIds = newOrders.map(newOrder => newOrder.id)
var newOrderPhone = newOrders.map(newOrder => newOrder.contact?.details?.find(detail => detail.type === 'phone')?.data)
var adress = newOrders.map(newOrder => newOrder.custom.find(object => object.name == 'Адрес').value)
var info = newOrders.map(newOrder => newOrder.custom.find(object => object.name == 'Важная информация').value);
var worker = newOrders.map(newOrder => newOrder.custom.find(object => object.name == 'Исполнитель').value);
console.log(worker)
oldOrderIds = oldOrderIds.map(Number)
firstElemOld = oldOrderIds[0]
var arrayNewLeads = [];
var i = 0;
while (newOrderIds[i] !== firstElemOld) {
var obj = {
id: newOrderIds[i],
phone: '+' + newOrderPhone[i],
adress: adress[i],
info: info[i],
worker: worker[i]
};
arrayNewLeads.push(obj);
i++;
}
const chatId = '1013645358';
for (let i = 0; i < arrayNewLeads.length; i++) {
let message = JSON.stringify(arrayNewLeads[i]);
message = message.replace(/^{/, '').replace(/}$/, '');
let keyboard = {
inline_keyboard: [
[{ text: "Отправить фотографию внешнего вида", callback_data: "look" }],
[{ text: "Отправить чек для оплаты", callback_data: "pay" }]
]
};
if (worker[i][0] === "Абсолют Новосибирск") {
bot.telegram.sendMessage(chatId, message, { reply_markup: keyboard });
}
}
console.log(JSON.stringify(arrayNewLeads[i]));
newOrderIds.forEach(newOrderId => {
if(!oldOrderIds.includes(newOrderId)) newIds.push(newOrderId)
})
return newIds
}
setInterval(fetchDataAndSaveToFile, 100000);
fetchDataAndSaveToFile()
В переменной chatID вписываю свой ID, и мне сообщения отправляет, если запущу бот, но если указываю другой ID, даже в случае того если человек подписан на бот, сообщение не отправляется