ساخت ربات تلگرام با استفاده از Node.js — راهنمای کاربردی

۹۲۴ بازدید
آخرین به‌روزرسانی: ۲۷ شهریور ۱۴۰۲
زمان مطالعه: ۵ دقیقه
ساخت ربات تلگرام با استفاده از Node.js — راهنمای کاربردی

در این مقاله به بررسی روش ساخت یک ربات تلگرام با استفاده از Node.js و Ngrok در توزیع محلی می‌پردازیم. شاید از خود بپرسید که چرا باید یک ربات در تلگرام بسازیم. پاسخ این است که بات‌ها بسیار مفید هستند و می‌توانند در کاربردهای مختلفی از جمله موارد زیر مورد استفاده قرار گیرند:

  • نظارت اجتماعی
  • ارائه سرویس به مشتریان
  • وظایف خودکارسازی/تسریع شده
  • مدیریت تراکنش‌های پرداخت

تلگرام یکی از برترین اپلیکیشن‌ها و پلتفرم‌های موبایل است که امنیت را به همراه رمزنگاری و در یک سیستم کاملاً رایگان، سریع و توزیع یافته ارائه می‌کند. تلگرام همچنین API کاملاً مستندسازی شده ساده و مناسبی دارد.

telegram.org

دریافت مجوز از BotFather

اگر به مستندات ربات تلگرام نگاه کنیم، متوجه خواهیم شد که‌ تنها یک الزام برای ایجاد بات وجود دارد و آن داشتن یک حساب تلگرام است.

تنها راه برای ثبت نام از طریق استفاده از شماره تلفن معتبر است.

پیام‌رسان تلگرام برای iOS

زمانی که عمل ثبت نام انجام شد، می‌توانید از نسخه وب برای ورود به حساب خود استفاده کنید:

نسخه وب تلگرام
نسخه وب تلگرام

زمانی که وارد حساب خود شدید، باید به دنبال حساب کاربری BotFather گشته و گفتگویی را با آن آغاز کنید:

BotFather در تلگرام
جستجو به دنبال BotFather در تلگرام
BotFather
نمایش ظاهر BotFather
آغاز گفتگو با BotFather
آغاز گفتگو با BotFather

ما اکنون فرایند ایجاد یک ربات جدید را با وارد کردن دستور زیر آغاز می‌کنیم:

/newbot

سپس باید نام و نام کاربری بات را تعیین کنیم:

ایجاد یک ربات جدید تلگرام با BotFather

زمانی که این فرایند کامل شد، باید یک توکن API برای استفاده بگیرید. این توکن را جایی کپی کنید، چون در ادامه برای ایجاد درخواست‌های HTTP از آن استفاده خواهیم کرد.

توکن API ربات تلگرام که اخیراً ایجاد کردیم.

استفاده از Postman برای پیکربندی ربات

اکنون که بات خود را در اختیار داریم، می‌توانیم از اپلیکیشن Postman برای چند چیز استفاده کنیم. ما با استفاده از مستندات API ربات تلگرام، قصد داریم وضعیت بات را دریافت کنیم.

# HTTP request format

# https://api.telegram.org/bot<token>/METHOD_NAME

# our first method /getMe

https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getMe
متد API بات تلگرام
متد API بات تلگرام

ما همچنین می‌توانیم تعامل خود با ربات جدید را بررسی کنیم و نتایج تعامل‌های اخیر خود را ببینیم:

 پیام دادن مستقیم به بات جدید
پیام دادن مستقیم به ربات جدید
getUpdates
نتایج API تعامل ما به صورت /getUpdates

استفاده از Ngrok برای تونل/فوروارد کردن اتصال

در اغلب اپلیکیشن‌های شخص ثالث که دارای API هستند می‌بایست یک URL عمومی وجود داشته باشد که پلتفرم بتواند داده‌ها را به آن جا ارسال کند. ما می‌توانیم یک نام دامنه جدید ثبت کنیم، گواهی SSL برای ایجاد امکان اتصال HTTPS راه‌اندازی کنیم و کد خود را روی این راه‌حل میزبانی شده توزیع کنیم؛ اما ما قصد داریم اپلیکیشن خود را در توزیع محلی تست کنیم. این همان جایی است که می‌توانیم از Ngrok استفاده کنیم.

Ngrok
Ngrok

این نرم‌افزار کاملاً ساده است؛ اما باید آن را دانلود کرده و url را راه‌اندازی کنید.

نصب Ngrok
نصب Ngrok

برای آغاز Ngrok باید دستور زیر را اجرا کنید:

./ngrok http 80
ngrok که به صورت محلی اجرا می‌شود.

ما از فوروارد کردن https که از سوی Ngrok ایجاد شده است، استفاده می‌کنیم. در این مورد URL به صورت زیر است:

https://da6d9f1d.ngrok.io

و این آدرس را به صورت نقطه انتهایی اصلی خود برای پذیرش درخواست‌ها در مورد وب‌هوک‌های تلگرام تنظیم می‌کنیم. بدین منظور به این URL نیاز داریم و باید آن را چنان که به وسیله API بات تلگرام اشاره شده است، از طریق Postman به عنوان URL اصلی خود تنظیم کنیم.

setWebhook
درخواست POST برای تنظیم وب‌هوک ربات تلگرام به صورت /setWebhook

یکی از ویژگی‌های جالب Ngrok این است که می‌توان درخواست‌های ورودی را روی پورت 4040 مشاهده کرد.

بررسی http در Ngrok

شما می‌توانید برخی درخواست‌های ورودی POST را ببینید که با خطای 502 Bad Gateway مواجه شده‌اند. دلیل این امر آن است که ما همچنان درخواست‌هایی را که قبل از تنظیم ربات ارسال شده‌اند، دریافت می‌کنیم. در ادامه یک درخواست ساده ارائه می‌کنیم تا ببینیم که موفق است یا نه.

ارسال پیام مجدد به بات تلگرام
نتایج ارسال پیام ما در Ngork

اکنون که یک اتصال ایجاد کرده‌ایم، می‌توانیم نقطه انتهایی اولیه خود را که یک پیام را پذیرفته و به آن پاسخ می‌دهد ایجاد کنیم.

ساخت API برای NodeJs

برای ایجاد API در Node.js باید نخستین اپلیکیشن خود را در این زبان برنامه‌نویسی ایجاد کنیم.

در یک دایرکتوری جدید پروژه Node.JS را آغاز کنید:

# configure as needed
npm init;

# install dependencies
npm i express axios body-parser --save;

# create main file
touch index.js;

در فایل مربوطه یک خروجی ساده برای بازگشت دادن داده‌ها و نمایش payload در کنسول ترمینال پیکربندی کنید:

فایل index.js به صورت زیر خواهد بود:

// Dependencies
const express = require('express');
const app = express();
const axios = require('axios');
const bodyParser = require('body-parser');
const port = 80;
const url = 'https://api.telegram.org/bot';
const apiToken = '{api-token-given-by-BotFather}';

// Configurations
app.use(bodyParser.json());

// Endpoints
app.post('/', (req, res) => {
     console.log(req.body);
     res.send(req.body);
});

// Listening
app.listen(port, () => {
     console.log(`Listening on port ${port}`);
});

فایل را ذخیره و آن را اجرا کنید:

node index.js;

# [Expected Output]
# Listening on port 80

ممکن است ببینید که درخواست‌های قبلی اینک می‌رسند و نتیجه‌ای مشابه JSON ارائه می‌کنند؛ اما در صورتی که چنین پیامی وجود نداشته باشد، می‌توانید پیام دیگری را از طریق بات به تلگرام ارسال کنید:

ارسال پیام متنی دیگر به ربات

نکته اصلی که باید مطلع باشیم این است که chat.id درخواست payload در POST چه مقداری دارد؟

نتایج Ngrok درخواست موفق POST به API مربوط به Node.js

سپس به اصلاح اسکریپت خود می‌پردازیم تا متن را فیلتر کنیم و ببینیم آیا کلمه «hello» در آن وجود دارد یا نه و در صورت وجود با پیام «hello back» پاسخ دهیم. جهت اجرای این کار باید یک درخواست HTTP ارسال کنیم تا پیامی به API ربات تلگرام جهت پاسخ داده به کاربر ارسال شود.

در این مرحله، فایل index.js به صورت زیر خواهد بود:

// Dependencies
const express = require('express');
const app = express();
const axios = require('axios');
const bodyParser = require('body-parser');
const port = 80;
const url = 'https://api.telegram.org/bot';
const apiToken = '{api-token-given-by-BotFather}';

// Configurations
app.use(bodyParser.json());

// Endpoints
app.post('/', (req, res) => {
     // console.log(req.body);
     const chatId = req.body.message.chat.id;
     const sentMessage = req.body.message.text;

     // Regex for hello
     if (sentMessage.match(/hello/gi)) {
          axios.post(`${url}${apiToken}/sendMessage`,
               {
                    chat_id: chatId,
                    text: 'hello back ?'
               })
               .then((response) => { 
                    res.status(200).send(response);
               }).catch((error) => {
                    res.send(error);
               });
     } else {
          // if no hello present, just respond with 200 
          res.status(200).send({});
     }
});

// Listening
app.listen(port, () => {
     console.log(`Listening on port ${port}`);
});

فایل را ذخیره کرده و اپلیکیشن NodeJS را مجدداً اجرا کنید و به تلگرام بازگردید.

دقت کنید که ربات ما وقتی پاسخ می‌دهد که کلمه hello در پیام ارسالی وجود داشته باشد

بدین ترتیب بات ما کامل شده است. ما در این مقاله با موفقیت یک ربات برای توزیع محلی راه‌اندازی کرده‌ایم که پیام‌ها را فیلتر می‌کند و بر همین مبنا پاسخ می‌دهد.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۶ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
manuel.pineault
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *