سلام دوستان عزیز امیدوارم حالتون خوب باشه ، همان طور که از موضوع پیداست قراره ساخت ربات تلگرام به وسیله وب هوک رو با هم انجام بدیم ، دلیل دست به قلم شدنم هم این بود که میخواستم با وب هوک ربات بسازم خیلی سرچ کردم دوستان فارسی زبون فقط در حد ساخت ربات تو 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, "تست پیام");
امیدوارم تا اینجا لذت برده باشید لطفا اگه نظری پیشنهادی بود برام ارسال کنید مشتاقانه منتظر نظرات شما دوستان هستم، در ضمن این رو هم بگم تمام مبحث رو تو این مقاله جا داده نمیشه برای همین من چند قسمت کردم و منتظر قسمت های جدید هم باشید.
ویرایش : من یکی از پروژه هایی که انجام دادم برای بات تلگرام تو گیت هابم گذاشتم از اینجا برید دانلود کنید و اگه دوست داشتید این پروژه رو فورک کنید امیدوارم مقاله کمکی هرچند کوچیک کردده باشم
سلام
وقت بخیر
تشکر می کنم بابت توضیحات مفید و باارزشتون که در اختیارمون قرار دادین.
من زمانی که SetWebHook رو فعال می کنم متن کامل و صحیح نمایش داده میشه
اما زمانی که وب سایتم رو اجرا می کنم خطا داده می شه
۵۰۰ – Internal server error.
There is a problem with the resource you are looking for, and it cannot be displayed.
در صورتی که چنین صفحه ای در چنین مسیری کامل وجود داره ، پروتکلم https هست و همه چیز اکی.
متشکر میشم راهنمایی کنید.
سلام داداش
وب هوک رو خیلی خوب توضیح دادی، تا بعد اونجا که گفتی telegram.bot رو دانلود کنید، بعدش دیگه مبهم شد و گنگ، البته من هم زیاد مسلط نیستم.
الان من یه کد C# دارم که برای ارتباطش با تلگرام و مدیریت بات، باید برنامه رو توی VS اجرا کنم.
خب دیگه باید چکار کنم و چطور فایلها رو توی هاست بریزم که بات رو سرور اجرا بشه؟
البته سرور هاست من هم لینوکسه! و نمیدونم چکار کنم. سرور VSP هم گرونه داداش.
سلام ممنون از نظرتون حتما به زودی سورس کد قرار میدهم
با سلام
مطالب نسبتا خوب هست ولی متاسفانه خیلی کلی گفته شده و نمیتوان با این مقدار کد چیزی را پیاده سازی کرد. اگه لطف کنید و عمیق تر توضیخ بدهید ممنون میشم
سلام برای ساخت ربات چقدر دانش برنامه نویسی نیاز هست ؟
بیشتر بر پایه دانش شی گرا خودتون هستش هرچی بهتر بدونید بهتر میتونید کار کنید اما از همه مهم تر باید بدونید چگونه از APi استفاده کنید و چگونه request بفرستید
با سلام و عرض احترام
بنده توی یه کد دیگه یکی از خط های کد شما رو دیدم با یه تغییر :
این کد شما TelegramBotClient api= new TelegramBotClient(“Token_Bot”);
به جای کلاس TelegramBotClient کلاس Api نوشته شده بود ، یعنی به این صورت :
Public Static Readonly Api Api= new Api(“Token_Bot”)
میخواستم ببینم فرقش چیه ..???
اگر لطف کنید جواب رو به ایمل بفرستید ممنون میشم
این کد دقیقا همین کار رو میکنه فقط من یک متد نوشته بودم که دیگه هر سری آبجکت رو نسازم و از اون مد استفاده کنم بیشتر برای تمیز بودن کد استفاده کردم از این روش
ممکنه قسمت کنترلر و اکشنی ک ساختیدو هم توضیح بدید؟
ممنون از اموزش خوبت.
لطفا بعدا یه مقاله بزن بگو چجوری سورس رو بریزیم تو هاست
چجوری شکلک ها و لگوها تو یه سورس رو عوض کنیم.
تشکر.
سلام یک مشکل کوچیک داره سایتتون اگر اصلاح کنید خیلی خوبه
وقتی رو دکمه ی Day and Night Toggle کلیک می کنیم خیلی خوب و قشنگ رنگ background رو با foreground عوض می کنه ولی در مورد نظرات نه
و نظرات چونکه color شون سفیده و background شون هم سفید ….
میشه لطفا یه بک آپ از دیتابیبس SQL پروژه بدید
سلام.ببخشید من اصلا متوجه این بخش WebHook نمیشم.الان که اون سایتی که معرفی کردی بهتون آدرس ssl میده خب از اون آدرس چه ربطی به آدس سایت ما داره که وقتی تلگرامی requesti به آدرس هیتوس بفرسته خب چجوری کنترلر ما کار خواهد کرد؟
سلام
شما که زحمت کشیدید و خوب توضیح داد اگه امکان داره آموزش ویدویی هم بزارید البته اگه شد با جاوا
بسیار سپاس گذارم
من همه کارها رو انجام دادم ولی ربات هیچ کاری نمیکنه وقتی مثلا /help میزنم
لطفا کسی یه من کمک کنه حق الزحمه هم بچشم ۰۹۳۳۳۷۷۴۴۳۲