آموزش ساخت ربات تلگرام با روش وب هوک – قسمت اول

آموزش ساخت ربات تلگرام با روش وب هوک - قسمت اولReviewed by مهدی نیکخو on Aug 1Rating: 5.0آموزش ساخت ربات تلگرام با روش وب هوک - قسمت اول

سلام دوستان عزیز امیدوارم حالتون خوب باشه ، همان طور که از موضوع پیداست قراره ساخت ربات تلگرام به وسیله وب هوک رو با هم انجام بدیم ، دلیل دست به قلم شدنم هم این بود که میخواستم با وب هوک ربات بسازم خیلی سرچ کردم دوستان فارسی زبون فقط در حد ساخت ربات تو BotFather  رو توضیح داده بودند و بعضی ها هم لطف کرده بودند با روش get updates  توضیح داده بودند در کل به درد من نخورد حالا تصمیم گرفتم که تجربیات ام رو در ساخت ربات به وسیله وب هوک به شما منتقل کنم تا شما راحت تر ربات بسازید.

 

در این مقاله قراره چه کار کنیم ؟

در این مقاله من با فرض این که شما قبلا ربات خود را در BotFather  ساخته اید و برای کدنویسی ربات  من با استفاده از C#  و به روش MVC  میسازم

پیش نیاز :

آشنایی با C# و معماری MVC

 

 

اما قبل از اینکه وب هوک رو بررسی کنیم برای دوستانی که آشنا نیستند، تلگرام دو تا روش برای دریافت اطلاعاتی که به بات ما فرستاده میشود در اختیار ما میذاره اولین روش getUpdates  هستش که با این طور هستش که باید کدی که نوشتیم رو تو یک حلقه قرار بدیم و هی به تلگرام میگیم خبر جدید چی داری ؟ ( و اون جواب میده این پیام اومده یا هیچ خبری ندارم ) و هر پیامی که به ربات ما فرستاده بشه تا ۲۴ ساعت در سرور های تلگرام نگهداری میشوند و بعدش پاک میشود، اما این روش معایب زیادی هم داره به طور مثال بعد از یک مدت هاست به دلیل ریکوئست زیاد برنامه رو متوقف میکنه پس هی باید دستی فعالش کنیم ، دوم این که وقتی کاربر پیام بفرسته در لحظه پاسخ داده نمیشود، سوم این که روش جالبی نیست 🙂

 

خب حالا بریم سراغ وب هوک ببینیم وب هوک چیست و وب هوک تلگرام  چگونه کار میکند ؟

بهتره اول وب هوک رو با هم بررسی کنیم و باهاش آشنا بشیم بعد بریم سراغ وب هوک تلگرام

وب هوک چیست :
وب هوک وب هوک اساسا یک رویداد اطلاع رسانی است که به URL انتخابی شما ارسال میشود.کاربران میتوانند آن را برای رویداد هایی که اتفاق میفتد روی یک سایت برای فراخوانی در سایت های دیگر پیکر بندی کنند .

وب هوک تلگرام :

همان طور که میدانید وب هوک یک روش برای ارسال تغییرات جدید به یک url  هستش وب هوک تلگرام هم دقیقا از همین روش داره استفاده میکنه به این صورت که وقتی کاربری به ربات پیام میفرسته با استفاده از وب هوک به url  ( آدرس سایت HTTPS  دار )  ثبت شده توسط کاربر ارسال میشه و کار ما دقیقا اینه که این اطلاعاتی که از سمت وب هوک اومده رو بخونیم و یک جواب برگردونیم.

 

قدم اول برای ساخت وب هوک تلگرام :

در اولین قدم باید شما به تلگرام بگید که میخواهید از روش Web Hook  استفاده کنید پس برای این کار باید از متد
setWebhook استفاده کنیم اما یه نکته ای هست ؟ برای استفاده از وب هوک تلگرام باید یک Url  دارای ssl  به تلگرام بدیم یعنی پس بیخیال شیم دیگه ؟ کی کلی به خاطر تست وب هوک هزینه میکنه که https  بگیره!! بزار همون getupdates  خودمون رو بنویسیم !!

حالا انقدر هم نا امید نباشید من بهتون میگم چی کار کنید به صورت رایگان https  بگیرید پس با من همراه باشید

من سایتی که ازش استفاده کردم سایت هیتوس که داخلش ثبت نام کنید و شما آدرسی بدید ( که قراره بعدا داخل اون کنترلر و اکشنی پیام ارسال شده از تلگرام رو بخونیم و کدش رو بنویسیم ) و بعد از ارسال توکن حالا شما یک آدرس https  دارید.

 

وب هوک تلگرام

 

من قصدم این نیست که سایتی رو معرفی کنم و یا آموزش بدم چیجوری از این سایت https دریافت کنید شما میتونید به هر طریق دیگری https  تهیه کنید مهم اینه که الان دارای https باشیم.

پس حالا آدرس url  خودمون رو با استفاده از متد setWebhook به تلگرام اعلام میکنیم برای این کار باید به صورت زیر عمل کنیم

https://api.telegram.org/{bot-token}/setWebhook?url={https://nickhoo.ir}

که با استفاده از فرمت بالا اطلاعات خود را قرار دهید در قسمت {bot-token}  توکن خود را قرار دهید و در قسمت {https://nickhoo.ir} آدرس https  که به دست آوردید رو بزنید. مانند نمونه زیر :

https://api.telegram.org/bot329340452:AAGx6B6C01Bn5Q9nSY0wkYs0e6XCwn9kjY/setWebhook?url=https://tlgbots.ir/1251tps://tlg

توضیح :  ما در بالا از متد setWebhook  استفاده کردیم که این متد یک پارامتر اجباری به نام url  داره که باید آدرس https  خود را به این پارامتر بدهیم.

 

اگر تا اینجا درست انجام داده باشید یک جواب به صورت json  دریافت میکنید که به صورت زیر می باشد :

{"ok":true,"result":true,"description":"Webhook was set"}

خب تا این جا ما آدرس دریافت وب هوک را به تلگرام ثبت کردیم حالا باید بریم ربات خود را بنویسیم.

ابتدا باید پکیج تلگرام را از Nuget  دانلود کنیم پس از اینجا پکیج را دانلود کنید یا با استفاده از دستور Install-Package Telegram.Bot در

package manager console  اقدام به نصب پکیج کنید.

خب پس یک پروژه MVC  ایجاد کنید و یک کنترلر ایجاد کنید ( همان طور موقع ثبت آدرس تعریف کردید ) پس از این که کنترلر و اکشن خود را ایجاد کردید با استفاده از کد زیر میتوانید اطلاعاتی که از طریق وب هوک تلگرام می آید رو دریافت کنید.

 var req = Request.InputStream; //get Request from telegram 
            var responsString = new StreamReader(req).ReadToEnd(); //read request
            var update = JsonConvert.DeserializeObject<Update>(responsString); // deserialize to update model
            var message = update.Message; //get message entity
            var chat = message.Chat; //get chat entity

خب با استفاده از دستور بالا ما هر پیامی از کاربر بیاد رو میتونیم بخونیم و نسبت به آن با استفاده از کد زیر میتوانیم پیام خود را بفرستیم.

راهنمایی : jsonConvert  از کتابخانه newton json آمده است  که میتوانید Newtonsoft.Json از Nuget دانلود کنید.

            TelegramBotClient api= new TelegramBotClient("329340452:AAGx6B6C01Bn5Q9nSY0wkYs0e6XCwn9kjY");
                var x = await api.SendTextMessageAsync(Chat.id, "تست پیام");

امیدوارم تا اینجا لذت برده باشید لطفا اگه نظری پیشنهادی بود برام ارسال کنید مشتاقانه منتظر نظرات شما دوستان هستم، در ضمن این رو هم بگم تمام مبحث رو تو این مقاله جا داده نمیشه برای همین من چند قسمت کردم و منتظر قسمت های جدید هم باشید.

 

ویرایش : من یکی از پروژه هایی که انجام دادم برای بات تلگرام تو گیت هابم گذاشتم از اینجا برید دانلود کنید  و اگه دوست داشتید این پروژه رو فورک کنید امیدوارم مقاله کمکی هرچند کوچیک کردده باشم

 

مهدی نیکخو

در حال حاضر مشغول خدمت سربازی ام، یه گروهبان خوشحال که سعی میکنه در حین خدمت یادبگیره، یاد بده و از همه مهم تر تلاش کنه تا دنیایی بهتر داشته باشیم.

  1. سلام
    وقت بخیر
    تشکر می کنم بابت توضیحات مفید و باارزشتون که در اختیارمون قرار دادین.
    من زمانی که SetWebHook رو فعال می کنم متن کامل و صحیح نمایش داده میشه
    اما زمانی که وب سایتم رو اجرا می کنم خطا داده می شه

    ۵۰۰ – Internal server error.
    There is a problem with the resource you are looking for, and it cannot be displayed.

    در صورتی که چنین صفحه ای در چنین مسیری کامل وجود داره ، پروتکلم https هست و همه چیز اکی.

    متشکر میشم راهنمایی کنید.

  2. محمد

    سلام داداش
    وب هوک رو خیلی خوب توضیح دادی، تا بعد اونجا که گفتی telegram.bot رو دانلود کنید، بعدش دیگه مبهم شد و گنگ، البته من هم زیاد مسلط نیستم.
    الان من یه کد C# دارم که برای ارتباطش با تلگرام و مدیریت بات، باید برنامه رو توی VS اجرا کنم.
    خب دیگه باید چکار کنم و چطور فایلها رو توی هاست بریزم که بات رو سرور اجرا بشه؟
    البته سرور هاست من هم لینوکسه! و نمیدونم چکار کنم. سرور VSP هم گرونه داداش.

  3. امیر

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

    • بیشتر بر پایه دانش شی گرا خودتون هستش هرچی بهتر بدونید بهتر میتونید کار کنید اما از همه مهم تر باید بدونید چگونه از APi استفاده کنید و چگونه request بفرستید

  4. امید

    با سلام و عرض احترام
    بنده توی یه کد دیگه یکی از خط های کد شما رو دیدم با یه تغییر :
    این کد شما TelegramBotClient api= new TelegramBotClient(“Token_Bot”);
    به جای کلاس TelegramBotClient کلاس Api نوشته شده بود ، یعنی به این صورت :
    Public Static Readonly Api Api= new Api(“Token_Bot”)
    میخواستم ببینم فرقش چیه ..???
    اگر لطف کنید جواب رو به ایمل بفرستید ممنون میشم

    • این کد دقیقا همین کار رو میکنه فقط من یک متد نوشته بودم که دیگه هر سری آبجکت رو نسازم و از اون مد استفاده کنم بیشتر برای تمیز بودن کد استفاده کردم از این روش

  5. مجید

    ممکنه قسمت کنترلر و اکشنی ک ساختیدو هم توضیح بدید؟

  6. اصغر

    ممنون از اموزش خوبت.
    لطفا بعدا یه مقاله بزن بگو چجوری سورس رو بریزیم تو هاست
    چجوری شکلک ها و لگوها تو یه سورس رو عوض کنیم.
    تشکر.

  7. محمدجواد

    سلام یک مشکل کوچیک داره سایتتون اگر اصلاح کنید خیلی خوبه
    وقتی رو دکمه ی Day and Night Toggle کلیک می کنیم خیلی خوب و قشنگ رنگ background رو با foreground عوض می کنه ولی در مورد نظرات نه
    و نظرات چونکه color شون سفیده و background شون هم سفید ….

  8. sadegh

    میشه لطفا یه بک آپ از دیتابیبس SQL پروژه بدید

  9. سلام.ببخشید من اصلا متوجه این بخش WebHook نمیشم.الان که اون سایتی که معرفی کردی بهتون آدرس ssl میده خب از اون آدرس چه ربطی به آدس سایت ما داره که وقتی تلگرامی requesti به آدرس هیتوس بفرسته خب چجوری کنترلر ما کار خواهد کرد؟

  10. majid

    سلام
    شما که زحمت کشیدید و خوب توضیح داد اگه امکان داره آموزش ویدویی هم بزارید البته اگه شد با جاوا
    بسیار سپاس گذارم

  11. محمد سیدی

    من همه کارها رو انجام دادم ولی ربات هیچ کاری نمیکنه وقتی مثلا /help میزنم
    لطفا کسی یه من کمک کنه حق الزحمه هم بچشم ۰۹۳۳۳۷۷۴۴۳۲

نظر شما چیست؟