پیادهسازی سیستم وبهوک گیتهاب (GitHub) به تلگرام برای دریافت نوتیفیکیشن کدهای جدید
تصور کنید در حال مدیریت یک پروژه بزرگ هستید و چندین برنامهنویس به طور همزمان روی کدهای شما کار میکنند. هر بار که کسی تغییری ایجاد میکند یا یک "Pull Request" میفرستد، شما باید به صورت دستی وارد گیتهاب شوید تا ببینید چه اتفاقی افتاده است. خستهکننده است،不是؟ حالا تصور کنید به جای این گشت و گذارهای بیپایان، هر اتفاقی که در مخزن (Repository) شما میافتد، در کمتر از یک ثانیه به صورت یک پیام شیک و مرتب در تلگرام شما ظاهر شود. این یعنی شما دیگر منتظر ایمیلهای طولانی نمیمانید و کنترل کاملی روی جریان توسعه کد دارید.
وبهوک (Webhook) چیست و چرا به آن نیاز داریم؟
اگر بخواهیم خیلی ساده و به زبان غیرفنی صحبت کنیم، وبهوکها شبیه به یک "زنگ در" دیجیتالی هستند. در حالت عادی، اگر شما بخواهید بدانید آیا پیامی در گیتهاب برای شما آمده یا نه، باید هر چند دقیقه یک بار صفحه را رفرش کنید (این کار در برنامهنویسی به Polling معروف است). اما وبهوک دقیقاً برعکس عمل میکند. وبهوک به گیتهاب میگوید: «هر وقت اتفاق خاصی افتاد، تو خودت خبرم کن!»
وبهوکها در واقع یک روش برای ارسال دادههای بلادرنگ (Real-time) از یک اپلیکیشن به اپلیکیشن دیگر از طریق پروتکل HTTP POST هستند.
بیایید با یک مثال واقعی پیش برویم. فرض کنید شما یک فروشگاه آنلاین دارید و میخواهید هر زمان مشتری سفارش جدیدی داد، متوجه شوید. شما نمیخواهید هر ثانیه دیتابیس را چک کنید. در عوض، یک وبهوک تنظیم میکنید تا به محض ثبت سفارش، یک پیام به گوشی شما ارسال شود. در دنیای کدنویسی، گیتهاب نقش آن فروشگاه را دارد و تلگرام نقش گوشی شما را ایفا میکند.
اما چرا تلگرام؟ چرا ایمیل یا ابزارهای دیگر؟ تلگرام به دلیل داشتن یک API بسیار باز و قدرتمند (Bot API)، یکی از سریعترین و راحتترین راهها برای ساخت سیستمهای اطلاعرسانی است. وقتی نوتیفیکیشنها را در تلگرام دریافت میکنید، میتوانید سریعاً با همتیمیهای خود در گروههای چت بحث کنید و تصمیم بگیرید، بدون اینکه نیاز باشد محیط IDE یا مرورگر را ترک کنید.
تفاوت وبهوک با APIهای معمولی
بسیاری از افراد این دو را با هم اشتباه میگیرند. در API معمولی، شما (کلاینت) درخواست میدهید و سرور پاسخ میدهد. اما در وبهوک، سرور (در اینجا گیتهاب) درخواست را ارسال میکند و شما (که یک سرور واسط دارید) پاسخ میدهید. در واقع، در وبهوک، نقش "خواستار" و "پاسخدهنده" عوض میشود.
چگونه گیتهاب و تلگرام با هم ارتباط برقرار میکنند؟
شاید بپرسید: «آیا گیتهاب دکمهای دارد که مستقیماً به تلگرام وصل شود؟» پاسخ کوتاه این است: خیر. گیتهاب نمیشناسد تلگرام چیست و تلگرام هم نمیداند در مخزن کد شما چه میگذرد. برای اینکه این دو غول با هم صحبت کنند، ما به یک "مترجم" یا یک "پل ارتباطی" نیاز داریم.
این پل ارتباطی معمولاً یک قطعه کد کوچک است که روی یک سرور (یا یک فضای ابری مثل Google Cloud Functions یا Heroku یا حتی یک سرور شخصی) قرار دارد. روند کار به این صورت است:
- گام اول: اتفاقی در گیتهاب میافتد (مثلاً یک Push جدید).
- گام دوم: گیتهاب یک بسته اطلاعاتی (به فرمت JSON) را به آدرس وبهوک شما میفرستد.
- گام سوم: سرور واسط شما این بسته را میگیرد، اطلاعات مفید (مثل نام کاربر، پیام کامیت و لینک تغییرات) را استخراج میکند.
- گام چهارم: سرور شما این اطلاعات را به فرمتی که تلگرام میفهمد تبدیل کرده و از طریق Bot API به تلگرام میفرستد.
یک نکته حیاتی: اگر شما برنامهنویس نیستید یا نمیخواهید درگیر مدیریت سرور شوید، ابزارهایی مثل Zapier یا Make (سابقاً Integromat) این پل ارتباطی را به صورت آماده فراهم میکنند. اما برای کسانی که به دنبال شخصیسازی کامل و رایگان هستند، نوشتن یک اسکریپت ساده با Python یا Node.js بهترین گزینه است.
پیشنیازهای لازم برای شروع عملیات
قبل از اینکه دست به کد ببریم یا تنظیمات را تغییر دهیم، باید ابزارهایمان را آماده کنیم. بدون این پیشنیازها، در وسط راه با خطاهای عجیب و غریب مواجه میشوید. بیایید چکلیست زیر را با هم بررسی کنیم:
اولین و مهمترین مورد، داشتن یک حساب کاربری در GitHub است. طبیعتاً باید مخزنی داشته باشید که قصد دارید تغییرات آن را رصد کنید. اگر هنوز پروژهای ندارید، یک Repository تست بسازید تا با خیال راحت هر چه میخواهید در آن تغییر دهید و تست کنید.
دومین مورد، داشتن یک حساب تلگرام و آشنایی اولیه با نحوه کار با باتهاست. شما نیاز ندارید یک بات پیچیده بسازید؛ فقط باید یک بات ساده ایجاد کنید تا بتواند پیامها را به شما یا گروهتان ارسال کند.
حالا سوال اصلی اینجاست: کد ما کجا اجرا شود؟
اگر میخواهید این سیستم همیشه فعال باشد، نباید آن را روی لپتاپ شخصی خودتان اجرا کنید (چون با بستن لپتاپ، نوتیفیکیشنها قطع میشوند). شما به یک "Host" یا میزبان نیاز دارید. گزینههای متعددی وجود دارد:
| گزینه | مناسب برای چه کسانی است؟ | هزینه | سطح دشواری |
|---|---|---|---|
| Google Cloud Functions | کسانی که میخواهند فقط در صورت نیاز هزینه پرداخت کنند (Serverless) | بسیار ارزان / رایگان | متوسط |
| VPS شخصی (لینوکس) | برنامهنویسانی که کنترل کامل روی سرور میخواهند | ماهانه | بالا |
| PythonAnywhere / Heroku | تستهای سریع و پروژههای کوچک | رایگان/پولی | پایین |
| ابزارهای No-Code (مثل Make) | افراد غیرفنی که نمیخواهند کد بزنند | بسته به حجم ترافیک | بسیار پایین |
بسیاری از متخصصان برای شروع از گزینههای رایگان ابری استفاده میکنند تا متوجه منطق جریان داده شوند. اگر در انتخاب میزبان یا راه اندازی سرور تردید دارید، میتوانید از مشاوران متخصص در سرویسهای پشتیبانی زیرساختی کمک بگیرید تا بهترین گزینه را بر اساس حجم پروژهتان به شما پیشنهاد دهند.
گام اول: ساخت بات تلگرام (قلب تپنده سیستم)
حالا وقت آن رسیده که وارد عملیات شویم. اولین قدم، ساختن بات تلگرام است. باتها در واقع رابطهای برنامهنویسی (API) هستند که به ما اجازه میدهند بدون باز کردن اپلیکیشن تلگرام، پیام ارسال کنیم.
چگونه یک بات بسازیم؟
باید به سراغ پدر تمام باتها یعنی BotFather بروید. این بات توسط خود تلگرام ساخته شده و وظیفهاش مدیریت تمام باتهای دیگر است. کافی است در جستجوی تلگرام عبارت @BotFather را سرچ کنید و استارت بزنید.
سپس دستور /newbot را ارسال کنید. BotFather از شما میخواهد یک نام برای باتتان انتخاب کنید (مثلاً: GitHub Notifier) و سپس یک Username منحصربهفرد برای آن بسازید که باید حتماً با کلمه bot تمام شود (مثلاً: MyGithubAlerts_bot).
به محض اینکه نام کاربری را تایید کنید، BotFather یک رشته طولانی از اعداد و حروف به شما میدهد که به آن HTTP API Token میگویند. هشدار: این توکن مانند رمز عبور بات شماست. هر کسی که این توکن را داشته باشد، میتواند به جای شما پیام بفرستد. پس آن را در محیطهای عمومی یا داخل کدهای عمومی گیتهاب قرار ندهید!
دریافت Chat ID (آدرس مقصد پیام)
حالا بات شما آماده است، اما یک مشکل وجود دارد: بات نمیداند پیام را به چه کسی بفرستد! حتی اگر شما سازنده بات باشید، بات باید "شناسه چت" یا همان Chat ID شما را بداند تا بتواند پیام را دقیقا به صندوق ورودی شما ارسال کند.
برای پیدا کردن Chat ID، سادهترین راه این است که به بات @userinfobot پیام بدهید. این بات بلافاصله یک عدد (مثلاً 12345678) را به شما برمیگرداند. این عدد، آدرس منحصربهفرد شما در دنیای تلگرام است. اگر میخواهید نوتیفیکیشنها به یک گروه ارسال شود، باید بات خودتان را عضو آن گروه کنید و سپس Chat ID آن گروه را (که معمولاً با یک علامت منفی شروع میشود) به دست آورید.
بیایید روراست باشیم؛ تا اینجا شاید کمی خستهکننده به نظر برسد، اما این زیربنای لازم برای داشتن یک سیستم اتوماتیک است. وقتی این دو مقدار (Token و Chat ID) را داشته باشید، شما در واقع کلید ورود به تلگرام را در دست دارید.
گام دوم: ایجاد پل ارتباطی (سرور واسط)
حالا که کلیدهای ورود به تلگرام (Token و Chat ID) را داریم، باید جایی را پیدا کنیم که گیتهاب بتواند اطلاعات را به آن ارسال کند و آنجا تصمیم بگیرد چه پیامی به تلگرام برود. تصور کنید گیتهاب یک نامه مینویسد و به صندوق پستی شما میاندازد؛ حالا ما نیاز به یک "کارمند" داریم که هر لحظه صندوق پستی را چک کند، نامه را بخواند، قسمتهای مهم را هایلایت کند و سپس آن را به صورت یک پیام سریع تلگرامی ارسال کند.
برای این کار، ما از زبان Python استفاده میکنیم چون کتابخانههای بسیار قدرتمندی دارد و خواندن کدهای آن برای هر کسی (حتی کسانی که برنامهنویس حرفهای نیستند) راحت است. ما از یک فریمورک کوچک به نام Flask استفاده خواهیم کرد که اجازه میدهد در عرض چند دقیقه یک سرور وب ساده بسازیم.
اگر تا به حال با پایتون کار نکردید، نگران نباشید. تمام آنچه نیاز دارید، نصب پایتون روی سیستم و اجرای چند دستور ساده در ترمینال است.
در ادامه، یک نمونه کد ساده و بهینه را میبینید که دقیقاً همین کار را انجام میدهد. این کد را به گونهای طراحی کردهایم که منعطف باشد و بتوانید پیامها را مطابق سلیقه خود تغییر دهید:
from flask import Flask, request
import requests
app = Flask(__name__)
# اطلاعات بات خود را اینجا جایگزین کنید
TELEGRAM_TOKEN = 'YOUR_BOT_TOKEN'
CHAT_ID = 'YOUR_CHAT_ID'
def send_telegram_message(text):
url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
payload = {"chat_id": CHAT_ID, "text": text, "parse_mode": "Markdown"}
requests.post(url, json=payload)
@app.route('/github-webhook', methods=['POST'])
def webhook():
data = request.json
if 'commits' in data:
# استخراج اطلاعات کامیتها
commits = data['commits']
repo_name = data['repository']['full_name']
for commit in commits:
message = f"🚀 *Push جدید در {repo_name}*\n👤 توسط: {commit['author']['name']}\n📝 پیام: {commit['message']}\n🔗 [مشاهده تغییرات]({commit['url']})"
send_telegram_message(message)
elif 'pull_request' in data:
# استخراج اطلاعات Pull Request
pr = data['pull_request']
action = pr['action']
repo_name = data['repository']['full_name']
message = f"🛠 *PR جدید در {repo_name}*\nوضعیت: {action}\nعنوان: {pr['title']}\n🔗 [لینک PR]({pr['html_url']})"
send_telegram_message(message)
return "OK", 200
if __name__ == '__main__':
app.run(port=5000)
بیایید این کد را کالبدشکافی کنیم تا دقیقاً بفهمیم چه اتفاقی میافتد. تابع send_telegram_message در واقع یک درخواست HTTP به سرورهای تلگرام میفرستد. ما از parse_mode="Markdown" استفاده کردیم تا بتوانیم متنها را ضخیم (Bold) یا کج (Italic) کنیم و لینکهای قابل کلیک بسازیم. این کار باعث میشود نوتیفیکیشنهای شما در تلگرام شبیه به پیامهای یک ربات حرفهای باشد، نه یک متن ساده و خشک.
اما بخش جذابتر، قسمت @app.route('/github-webhook') است. این خط به سرور میگوید: «هر وقت کسی به آدرس /github-webhook درخواستی فرستاد، این تابع را اجرا کن». وقتی گیتهاب وبهوک را فعال میکند، دقیقاً همین آدرس را صدا میزند.
چالش بزرگ: دسترسی گیتهاب به سرور شما
تا اینجا همه چیز عالی است، اما یک مشکل فنی وجود دارد. اگر شما این کد را روی لپتاپ خودتان اجرا کنید، آدرس شما چیزی شبیه localhost:5000 خواهد بود. مشکل اینجاست که گیتهاب نمیتواند به "localhost" شما دسترسی داشته باشد؛ چون localhost یعنی "همین کامپیوتر من" و گیتهاب در سرورهای خودش در آمریکا است!
برای حل این مشکل دو راه دارید. راه اول (برای تست سریع)، استفاده از ابزاری به نام ngrok است. این ابزار یک تونل امن از اینترنت به کامپیوتر شما میسازد و یک لینک عمومی (مثلاً https://a1b2c3d4.ngrok.io) به شما میدهد که گیتهاب میتواند آن را ببیند. راه دوم و اصولیتر، قرار دادن کد روی یک سرور واقعی (VPS) یا سرویسهای Cloud است.
تصور کنید میخواهید یک مغازه بزنید. ngrok مثل این است که برای چند ساعت یک میز در خیابان بگذارید تا ببینید مردم خرید میکنند یا نه. اما داشتن یک سرور واقعی، یعنی شما یک مغازه رسمی با تابلو و آدرس ثابت دارید. برای پروژههای جدی، حتماً از گزینه دوم استفاده کنید.
گام سوم: تنظیمات نهایی در پنل گیتهاب (اتصال نهایی)
حالا که پل ارتباطی ما (سرور) آماده است و منتظر دریافت پیامها مینشیند، باید به گیتهاب بگوییم که اطلاعات را به کجا بفرستد. این مرحله، آخرین قطعه از پازل است.
برای این کار، مراحل زیر را دنبال کنید:
- وارد حساب گیتهاب خود شوید و به مخزن (Repository) مورد نظرتان بروید.
- از منوی بالای صفحه، روی گزینه Settings کلیک کنید.
- در منوی سمت چپ، گزینه Webhooks را پیدا کرده و روی آن کلیک کنید.
- دکمه Add webhook را بزنید تا فرم تنظیمات باز شود.
در این فرم، چند فیلد مهم وجود دارد که باید با دقت پر شوند:
- 🔹 Payload URL: اینجا باید آدرس سرور خود را وارد کنید. اگر از ngrok استفاده میکنید، همان لینک را قرار دهید و در انتها عبارت
/github-webhookرا اضافه کنید. (مثلاً:https://your-id.ngrok.io/github-webhook). - 🔹 Content type: این بخش بسیار حیاتی است. حتماً آن را روی application.json قرار دهید. چون کد ما منتظر دریافت دادهها به فرمت JSON است و اگر روی فرمت دیگر باشد، گیتهاب اطلاعات را به شکلی میفرستد که سرور ما نمیتواند آن را بخواند.
- 🔹 Which events you want triggered: در اینجا میتوانید انتخاب کنید چه اتفاقاتی باعث ارسال نوتیفیکیشن شود. پیشنهاد من این است که گزینه
Just the push eventرا انتخاب کنید تا فقط با آپلود کدهای جدید پیام بگیرید. اما اگر میخواهید هر زمان کسی برای کد شما نظر داد یا PR فرستاد خبردار شوید، گزینهLet me select individual eventsرا زده و تیکهای مربوط به Pull Requests و Issue comments را بزنید.
در نهایت، دکمه Update webhook را بزنید. حالا گیتهاب سعی میکند یک پیام تست (Ping) به سرور شما بفرستد تا مطمئن شود ارتباط برقرار است. اگر در کنار وبهوک شما یک تیک سبز رنگ ظاهر شد، یعنی تبریک میگویم! شما همین حالا یک سیستم مانیتورینگ حرفهای ساختهاید.
یک نکته برای حرفهایها: اگر میخواهید امنیت سیستم خود را بالا ببرید، از فیلد Secret در تنظیمات وبهوک استفاده کنید. با این کار، گیتهاب یک امضای دیجیتال به هر پیام اضافه میکند و سرور شما میتواند چک کند که آیا این پیام واقعاً از طرف گیتهاب آمده یا یک هکر سعی دارد با فرستادن پیامهای جعلی، شما را گمراه کند.
حالا بیایید یک تست واقعی بگیریم. یک فایل کوچک را در گیتهاب تغییر دهید و آن را Commit کنید. در عرض چند ثانیه، گوشی شما باید با صدای نوتیفیکیشن تلگرام خبردار شود. این حس "اتوماتیک شدن" اتفاقات، یکی از لذتبخشترین بخشهای توسعه نرمافزار است.
بهینهسازی و توسعه: چگونه سیستم خود را هوشمندتر کنیم؟
تا اینجا ما یک سیستم پایه و کاربردی را پیادهسازی کردیم. اما دنیای برنامهنویسی هیچوقت در نقطه "خوب است" متوقف نمیشود. اگر شما یک تیم بزرگ دارید یا تعداد مخازن گیتهاب شما زیاد است، دریافت پیامهای ساده ممکن است به مرور زمان تبدیل به "آلودگی صوتی" دیجیتالی شود (یعنی آنقدر پیام بیاید که دیگر به آنها توجه نکنید). برای جلوگیری از این اتفاق، باید سیستم خود را هوشمندتر کنید.
یکی از بهترین روشها برای بهینهسازی، فیلتر کردن نوتیفیکیشنها است. به جای اینکه هر کامیت سادهای را دریافت کنید، میتوانید در کد پایتون خود شرط بگذارید که فقط اگر تغییرات در "Branch اصلی" (مثل main یا master) رخ داد، پیام ارسال شود. با این کار، تغییرات کوچک و آزمایشی برنامهنویسان در شاخههای فرعی، شما را مزاحم نمیشود و فقط زمانی خبردار میشوید که کد واقعاً آماده انتشار باشد.
همچنین میتوانید سیستم SLA یا هشدار سریع را پیاده کنید. تصور کنید اگر یک Pull Request بیش از ۲۴ ساعت باز ماند و کسی آن را بررسی نکرد، بات تلگرام یک پیام هشدار با ایموجیهای قرمز 🚨 به مدیر پروژه بفرستد تا گلوگاههای توسعه شناسایی شوند. این سطح از مدیریت، تفاوت بین یک برنامهنویس معمولی و یک لید تکنیكال (Tech Lead) حرفهای است.
جدول مقایسهای: روشهای مختلف دریافت نوتیفیکیشن
شاید هنوز برایتان سوال باشد که آیا این روش بهترین راه است یا ابزارهای آماده بهترند. بیایید نگاهی به این مقایسه بیندازیم:
| ویژگی | روش کدنویسی (ما) | ابزارهای No-Code (Zapier/Make) | ایمیلهای گیتهاب |
|---|---|---|---|
| هزینه | رایگان (یا هزینه بسیار کم سرور) | ماهانه (پس از اتمام سهمیه رایگان) | رایگان |
| سرعت دریافت | لحظهای (Real-time) | بسته به پلن (ممکن است تا ۱۵ دقیقه تاخیر داشته باشد) | متغیر (بسته به سرور ایمیل) |
| شخصیسازی | نامحدود و کامل | محدود به امکانات ابزار | بسیار محدود |
| امنیت | بسیار بالا (اگر Secret را پیاده کنید) | وابسته به شرکت ثالث | بالا |
اشتباهات رایج و عیبیابی (Troubleshooting)
حتی حرفهایترینها هم گاهی با خطا مواجه میشوند. اگر سیستم شما کار نمیکند، احتمالاً یکی از این سه مورد رخ داده است. بیایید با هم بررسی کنیم:
۱. خطای ۴۰۳ یا ۴۰۱ در تلگرام: اگر پیام ارسال نمیشود اما سرور شما فعال است، احتمالاً توکن بات را اشتباه وارد کردهاید یا بات را در گروه مورد نظر عضو نکردهاید. به یاد داشته باشید که باتها نمیتوانند به صورت خودسر به هر کسی پیام بدهند؛ کاربر حتماً باید یک بار دکمه /start را در بات بزند تا اجازه ارسال پیام صادر شود.
۲. عدم دریافت پیام (تیک قرمز در گیتهاب): اگر در بخش Webhooks گیتهاب تیک قرمز میبینید، یعنی گیتهاب نتوانسته به سرور شما وصل شود. اولین جایی که باید چک کنید، دیوار آتش (Firewall) سرور است. مطمئن شوید که پورت مورد نظر (مثلاً ۵۰۰۰ یا ۸۰) باز است و اجازه ترافیک ورودی را میدهد.
۳. فرمت اشتباه دادهها: اگر سرور شما پیام دریافت میکند اما کرش (Crash) میکند، احتمالاً گیتهاب دادهها را به صورت application/x-www-form-urlencoded میفرستد در حالی که کد شما منتظر JSON است. حتماً در تنظیمات گیتهاب، Content type را روی JSON قرار دهید.
برنامهنویسی یعنی حل مسئله. هر خطایی که میگیرید، در واقع یک فرصت برای یادگیری بیشتر درباره نحوه کارکرد پروتکل HTTP و APIهاست. پس از دیدن خطا نترسید و لاگهای سرور خود را بررسی کنید.
جمعبندی و گامهای نهایی
ما در این مقاله یاد گرفتیم که چگونه یک سیستم ارتباطی سریع بین گیتهاب و تلگرام ایجاد کنیم. از ساخت بات در تلگرام شروع کردیم، یک سرور واسط با پایتون نوشتیم و در نهایت با تنظیم وبهوکها، این دو دنیا را به هم متصل کردیم. حالا شما دیگر نیازی ندارید هر چند دقیقه یک بار صفحه گیتهاب را رفرش کنید؛ کدها خودشان شما را خبر میکنند!
این پروژه کوچک، در واقع دریچهای است به دنیای وسیعتر اتوماسیون (Automation). وقتی یاد بگیرید چگونه دادهها را از یک سرویس بگیرید و به سرویس دیگر منتقل کنید، میتوانید هر فرآیند تکراری در کسبوکارتان را حذف کنید. از ارسال خودکار گزارشهای روزانه تا سیستمهای مانیتورینگ پیچیده سرور، همه از همین منطق ساده "دریافت و ارسال" پیروی میکنند.
شاید در حال حاضر پیادهسازی این مراحل برای شما ساده به نظر برسد، اما وقتی بخواهید این سیستم را برای یک سازمان بزرگ با صدها پروژه و هزاران توسعهدهنده مقیاسپذیر (Scale) کنید، با چالشهای جدیتری مثل مدیریت حافظه، امنیت پیشرفته و پایداری سرورها روبرو خواهید شد. در چنین مقیاسهایی، داشتن یک زیرساخت ابری بهینه و مدیریت شده، تفاوت بین یک سیستم پایدار و یک سیستم متزلزل است.
اگر در حال حاضر در حال توسعه یک پروژه بزرگ هستید و میخواهید سیستمهای اتوماسیون و مانیتورینگ خود را به صورت حرفهای و صنعتی پیاده کنید تا هیچ لحظهای از تغییرات کد یا وضعیت سرورهایتان دور بمانید، پیشنهاد میکنیم با متخصصین ما مشورت کنید. شما میتوانید برای دریافت راهنماییهای تخصصی در زمینه پیادهسازی زیرساختهای هوشمند و اتوماسیون، از طریق بخش تماس با ما در ZiroxAI با ما در ارتباط باشید تا در کنار هم، جریان توسعه کد شما را بهینهترین حالت ممکن کنیم.
در نهایت، توصیه میکنم این کدها را روی پروژههای واقعی خود تست کنید و سعی کنید ویژگیهای جدیدی مثل ارسال عکسهای تغییرات یا اتصال به دیسکورد (Discord) را هم به آن اضافه کنید. یادگیری واقعی زمانی اتفاق میافتد که شما کد را تغییر دهید، آن را خراب کنید و دوباره تعمیر کنید. موفق باشید در دنیای جذاب کدنویسی!