برنامه نویسی ربات تلگرام
آشنایی با API ربات تلگرام به صورت کلیشهای
خیلی از شما عزیزانی که حتی با PHP، Python و دیگر زبان های برنامه نویسی آشنایی دارید، زمانی که حرف از ساخت یک ربات تلگرامی زده میشود، نا خودآگاه دست و پای خود را گم کرده و دقیقا نمیدانید که چطور میشود چنین کاری را انجام داد! سپس شروع به جستجو میکنید و این سایت و آن سایت را زیر و رو میکنید ولی هرچه جلو تر میروید، یا گیج میشوید یا واقعا و به طور واضح و اصولی نمیدانید که چه چیزی در حال اتفاق افتادن است! دلیلش ساده است، چرا که در هیچ جایی از صفر این موضوع توضیح داده نشده است. اما در فول کده چرا! 😀
مقدمهای بر برنامه نویسی ربات تلگرام
فرقی ندارد که چه PHP باشد و چه دیگر زبان هایی که با آنها آشنایی دارید؛ چراکه در هرصورت مسیر یکی است و فقط شکل و ظاهر کدها هستند که با هم فرق دارند. همچنین ما قبلا مقالهای تحت عنوان “برنامه نویسی ربات تلگرام – آنچه قبل از شروع باید بدانیم” را منتشر کردهایم که بهتر است قبل از هرچیزی ابتدا آن را بخوانید تا مسئلهی ربات های تلگرام بهتر برایتان هضم شود.
همانطور که در مقالهی آنچه قبل از شروع باید بدانیم گفته شد، تلگرام برای ساخت رباتها در نرم افزار خود مسیر تازه ای را پیمود، مسیری که تا آن لحظه هیچ پیامرسانی آن را پیاده سازی نکرده بود. در تلگرام برخلاف سایر مسنجرهایی که وجود داشت، امکان ساخت ربات بسیار ساده تر و بسیار قدرتمندتر شد و تلگرام این را با پیاده کردن یک سکو یا پلت فرم جدید برای رباتها به دست آورد.
اجازه دهید از صفر بحث را جلو ببریم. 🙂
ربات ها در حقیقت چیستند و چه کاری انجام میدهند؟!
شاید بخندید و با خود بگویید: “ای بابا، اینو که دیگه هممون میدونیم”! ولی باور کنید شما همه نیستید 😀 و همچنین در اینجا قصد دارم مواردی را بیان کنم که شاید به آنها دقت نکرده باشید.
زمانی که شما یک حساب کاربری در یک پیام رسان ایجاد میکنید و وارد آن میشوید، سپس یکی از دوستانتان برایتان پیامی ارسال میکند و شما آن را خوانده و پاسخی را برای دوستتان تایپ کرده و ارسال میکنید؛ در تمامی این مراحل، عملیاتی که در اکانت شما صورت میگیرد، توسط خود شما انجام میشود! یعنی شما فکر میکنید، سپس پاسخ میدهید. شما فکر میکنید،سپس چیزی را مینویسید.
و در نتیجه، آن کدی که در نرم افزار پیام رسان وجود دارد، برای شما رابطی را ایجاد کرده است که خودتان وظایف را به عهده بگیرید.
مثلا:
یک جارو برقی را تصویر کنید که باید دستهی آن را گرفته و سپس خانه را با آن جارو کنید. در واقع کار اصلی توسط جارو برقی صورت میگیرد؛ ولی آن منطق و فکری که این کار را انجام میدهد، توسط مغز شما و اندام شما صورت میگیرد.
اما ربات چیست؟!
شما فرض کنید همان نرم افزاری که با آن چت میکنید، به جای این که منتظر شما باشد تا فکر کنید و چیزی را تایپ کرده و به دوستتان ارسال کنید، خودش (نرم افزار) تصمیم میگیرد که چه چیزی به دوستتان ارسال کند و البته این تصمیمی که نرم افزار خودش میگیرد، خود به خود اتفاق نمیفتد و چیزی است که ما قبلا برای آن تعریف کردهایم و نرم افزار طبق آن تعاریف است که اینکارها را انجام میدهد.
مثلا:
همان جارو برقی را دوباره تصور کنید؛ ولی این بار دستهی آن را برای جارو کردن نگرفتهایم و خودش در حال جارو کردن خانه است!
پس تعریف ربات، چیزی است که اتوماتیک کارهایی را انجام میدهد که البته مراحلی از این ربات هم میتواند اتوماتیک نباشد!
برای مثال همان جارو برقی زمانی که میخواهد آشغال داخل خود را خالی کند، از ما اجازه بگیرد!
این اجازه گرفتن اتوماتیک صورت میگرید، ولی برای انجام بقیهی کارها ما باید دوباره وارد ماجرا شویم و با این حال فراموش نکنیم که قسمتی از آن یک ربات است و اتوماتیک انجام شده است.
ربات به چیزی گفته میشود که اتوماتیک کاری را انجام دهد! البته الگوریتمی که برای برنامهی خود مینویسید یک ربات نیست و با آن فرق میکند 😀
چرا که ربات چیزی است که به جای انسان با این الگوریتم کارمیکند.
مثل همان اتوماتیک جواب دادن به پیامها یا اتوماتیک جارو کردن که توسط خود سیستم انجام میشود و انسان انجام دهندهی آن نیست!
ربات ها در پیام رسانها
دانستیم که رباتها، برنامهای هستند که وظیفهی فکر کردن و انجام کارها را خودشان بر عهده میگیرند و همچنین، در پیام رسانها رباتها معمولا به جسم و فیزیک نیازی ندارند! یعنی برای مثال، مثل جارو برقی یا آدم آهنی نیستند که به صورت فیزیکی با ما در ارتباط باشند!
البته ما گفتیم معمولا این گونه نیستند؛ ولی کسی راه را نبسته است که امکان انجام چنین کاری وجود نداشته باشد! برای مثال همان جارو برقی که در بالا مثالش را زدیم، فرض کنید در سیستم نرم افزاری خود به تلگرام متصل شده و زمانی که پیام مشخص شدهای از یک شخص مشخص شدهای دریافت شود، شروع به کار کردن میکند!
اما در 99.99 درصد از رباتهایی که برای پیامرسانها نوشته میشوند، چنین چیزی وجود ندارد و آنها تنها یک نرم افزار هستند که درون سیستم کامپیوتری (اعم از سرور و …) با یک منطق مشخص اجرا شدهاند و روی فیزیک تاثیری ندارند!
قبلا به موضوعی اشاره کردیم و آن این است که در پیامرسانها، برنامه نویسان میآیند و رباتها روی حسابهای کاربری واقعی سوار میکنند! یعنی شما (مثلا شمای برنامه نویس) که با یک حساب کاربری و یک شماره وارد تلگرام شدهاید، ربات را روی حساب کاربری خود پیاده میکنید و این چند مشکل عمده دارد و مهم ترین آن موارد زیر هستند:
- تفاوتی بین اکانت کاربر عادی و ربات وجود ندارد و هردو به یک میزان به امکانات تلگرام دسترسی دارند.
- ساخت ربات مشکل میشود و برای ساخت هر ربات نیاز به یک حساب ثبت شدهی رسمی در تلگرام وجود دارد.
ربات ها در تلگرام
در بالا دو مورد را ذکر کردیم که پیاده کردن ربات در اکانت رسمی را بد جلوه میدهند!
تلگرام نیز از این قاعده مستثنی نبود تا زمانی که آمد و پلتفرم جدیدی برای رباتها توسعه داد و در اختیار برنامه نویسان گذاشت!
در این پلت فرم، هر شخص که با حساب رسمی خود وارد تلگرام میشود، میتواند وارد یک ربات رسمی به نام بات فادر شده و از طریق آن، یک اکانت ربات ایجاد کند!
اکانتهای ربات نیز همانند اکانتهای عادی، نامکاربری (معروف به آیدی)، نام و عکس پروفایل و … را دارند؛ اما کاربر با ورود به پی وی این اکانتها در پیام رسان تلگرام، میتواند تشخیص دهد که این یک اکانت برای ربات بوده و اکانت عادی نیست!
حالا که اکانت رباتها از اکانتهای عادی جدا شدهاند، فایده اش چیست؟! مگر باز نمیتوان روی اکانت واقعی ربات ساخت؟!
اگر شماهم جزء کسانی باشید که این سوال را میپرسد، خیلی صادقانه بگویم که باز هم هنوز درمورد ماهیت ربات گیج هستید 😀 و بهتر است کمی موضوع را شفافتر کنم.
این که چنین کاری انجام شده است، ربطی به این ندارد که نتوان با اکانت رسمی ربات ساخت!
چرا که در تعریف ربات گفتیم، ربات کارها را اتوماتیک انجام میدهد و تا زمانی که ما میتوانیم وارد اکانت رسمی خود شویم و چت کنیم، دلیلی وجود ندارد که بتوان جلوی این کار را گرفت! و البته هدف تلگرام هم این نیست!
کاربرد اکانت ربات چیست و چرا یک پلت فرم جدا برای آن در نظر گرفته شده است؟!
سوال خوبی است! به دو دلیل مهمی که در بالا گفته شد!
در تلگرام، اکانت رباتها خیلی از قابلیتهای اکانت رسمی را ندارند و برعکس برای رباتها هم همینطور است! برای مثال رباتها نمیتوانند به گروهی جوین شوند و باید کسی آنها را به داخل گروه اضافه کند! همچنان که کسی نمیتواند همانند اکانت رباتها در تلگرام، پیامی به همراه کیبورد و دکمه ارسال کند!
و دلیل بعدی، سخت بودن ساخت ربات با اکانت رسمی میباشد که در این جا این مشکل به طور خیلی خاصی برطرف شده است.
دلیل دیگر نیز این بود که اگر قرار باشد یک ربات بسازیم، باید یک اکانت رسمی بسازیم و یقینن برای همه مشکل است که اگر بخواهند چندین ربات بسازند، چندین شماره تهیه کنند و البته نگه داشتن این همه شماره نیز کار چندان سادهای نیست و مشکلی برای خود است.
فرآیند اصلی ساخت ربات تلگرام
همانطور که در مقالهی “برنامه نویسی ربات تلگرام – آنچه قبل از شروع باید بدانیم“ گفتیم، ساخت ربات در تلگرام دو روش دارد.
- Webhook
- GetUpdates
و هردو روش در جهت اهداف خود استفاده میشوند؛ ولی عموما مردم اهدافی دارند که روش اول برای آنها بهتر است.
در روش Webhook همانطور که در مقاله هم گفته شد، ما یک آدرس اینترنتی را به همراه اکانت رباتی که ساختهایم، به سرور تلگرام معرفی میکنیم، سپس سرور تلگرام زمانی که یک اتفاق جدید در تلگرام برای این اکانت روی میدهد، آن را به این آدرس ارسال میکند و ما باید آن را بررسی و کارهایی که میخواهیم را انجام دهیم.
در مورد روش GetUpdates هم گفته شد به جای این که تلگرام رویدادها را به ما ارسال کند، ما به طور دستی (برای مثال هر ثانیه) یک درخواست به سرور تلگرام ارسال میکنیم و رویدادهایی که تا آن لجظه وجود دارند را میگیرم و البته ممکن است رویدادها خیلی زیاد باشند که میتوانیم به سرور تلگرام بگوییم مثلا ده تا بدهد و بعد از بررسی آنها، دهتای بعدی را بگیریم.
این مورد بد است و برای ساخت ربات سرعت مناسبی ندارد و بهتر است مورد استفاده قرار نگیرد.
اولین حرکت
مراحلی که در ادامه میخواهم بگویم را به صورت کلیشه ای (همینجوری) انجام دهید تا به طور ناخودآگاه مواردی برایتان هضم شود و بعدا آنها را شفاف سازی خواهم کرد.
البته در برنامه نویسی قرار نیست این گونه عمل کنیم و شاید بپرسید پس به چه دردی میخورد؟!
چون در برنامه نویسی یک بار برای انجام این کارها کدی مینویسیم و دیگر با آن کاری نخواهیم داشت 😀
1- یک اکانت ربات ایجاد کنید. اگر بلد نیستید وارد پست BotFather شده و روش انجام این کار را یاد بگیرید.
شما در نهایت باید برای ربات خود یک عبارتی با نام توکن از بات فادر دریافت کنید.
2- توکنی که دریافت کردهاید را در لینک زیر و به جای عبارت <token> قرار دهید، سپس آن را کپی کنید. (برخی دوستان به اشتباه، توکن خود را به جای عبارت token قرار دادهاند و علامتهای بزرگتر و کوچکتر را از لینک حذف نکردهاند)
1 |
https://api.telegram.org/bot<token>/METHOD_NAME |
3- دوباره در همین لینک، به جای عبارت METHOD_NAME، کلمهی getMe را بنویسید، سپس آن را کپی کنید.
متد getMe، برای گرفتن اطلاعات اکانت ربات خودمان استفاده میشود.
1 |
https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getMe |
4- وارد مرورگر شده و لینک تغییر یافتهی خود را باز کنید.
5- با چیزی مثل عبارت زیر رو به رو خواهید شد:
1 |
{"ok":true,"result":{"id":132279682,"is_bot":true,"first_name":"فول کده","username":"FullKadeBot"}} |
6- البته اگر در فایرفاکس باشید ممکن است با تصویر زیر رو به رو شوید که کافی است روی Raw Data کلیک کنید. (در این تصویر، فایرفاکس اطلاعات را منظم و مرتب کرده است تا برایما نقابل خواندن باشد ولی اصل خروجی در Raw Data قرار دارد.)
چیزی که ما دریافت کردهایم، نوشتهای در ساختار و قالب JSON میباشد.
فعلا تا همین جا را داشته باشید تا به ماهیت JSON بپردازیم. البته شما آن چنان نیازی به دانستن این مورد نخواهید داشت و تنها دانستن ماهیت جیسون برایتان کافی است.
ماهیت جیسون در یک نگاه
جیسون همانند HTML و XML و …، یک ساختار استاندارد در قالب متن (TEXT) برای اسکلتبندی قسمتهای مختلف نوشته میباشد! که عموما برای انتقال یک سری اطلاعات در قالب Text استفاده میشود.
مثال از یک ساختار فرضی برای درک جیسون:
میخواهیم درون نرم افزار خود، کدی بنویسیم که نام، نام خانوادگی، شماره و اطلاعات دیگری را از کاربر بگیرد و سپس آنها را در یک فایل متنی ذخیره کند. اما سوال این است که چگونه ذخیره کنیم تا بعدا که برنامه را باز کردیم، برنامه بتواند تشخیص دهد که نام در کجا قرار دارد، نام خانوادگی در کجا و … سپس آنها را در روی صفحه و در قسمتهای مخصوص خود نمایش دهد.
بدین منظور، شاید بیاییم و هرکدام را در یک خط بنویسیم. برای مثال:
1 2 3 |
هادی اکبرزاده 09141234567 |
پس ساختار ما این شد که هرکدام را در یک خط بنوسیم، سپس در داخل برنامه تعریف کنیم که خط اول نام، خط دوم نام حانوادگی و خط سوم هم شماره میباشد.
در واقع این ساختاری بود که ما تعریف کردیم! جیسون نیز اینگونه است! اما ساختار جیسون به این سادگی نیست و البته جیسون یک ساختار استانداردی است که در دنیا به عنوان یک استاندارد شناخته شده وهمه آن را قبول کردهاند. 🙂
برای مثال در همان چیزی که با اجرای لینک ربات دریافت کردیم، میتوانیم مورد زیر را مشاهده کنیم:
1 |
"first_name":"فول کده" |
همانطور که میبینید، first_name و جلوی آن، نامی که در بات فادر برای رباتمان تنظیم کرده ایم قرار گرفته است. و اگر بیشتر در متن جیسون دقت کنید، خواهید دید که یک ساختار دقیق و منظمی دارد!
نکته: چیزی که در این ساختار وجود دارد این است که باز هم همانند HTML و دیگر زبانهای برنامه نویسی (گرچه جیسون یک زبان برنامه نویسی نیست و ساختاری متنی برای انتقال و نگهداری داده است)، فاصله در قسمتهای خارج از مقدارها و نامها و برخی چیزهای دیگر اهمیتی ندارد! در واقع اگر فاصله نباشد، خواندن آن برای کامپیوتر آسانتر و سریعتر شده و این فاصلهها فقط ممکن است خواندن آن را برای انسان سادهتر کنند.
مثلا همان جیسون بالا را در ساختار منظم شدهی زیر برای انسان در نظر بگیرید.
1 2 3 4 5 6 7 8 9 |
{ "ok":true, "result":{ "id":132279682, "is_bot":true, "first_name":"\u0641\u0648\u0644 \u06a9\u062f\u0647", "username":"FullKadeBot" } } |
این که در اینجا با فاصله همه را جدا کردهایم، برای ما ساده تر شده است؛ اما برای کامپیوتر پیچیدهتر شده و کامپیوتر زمان بیشتری را برای هضم آن متحمل میشود! ولی این زمان آنقدر ناچیز است که به چشم نمیآید! 😀
هدف ما توضیح ساختار جیسون نیست؛ چراکه این را باید خودتان قبلا یاد گرفته باشید و البته در این دورهی آموزشی هم کاربردی ندارد!
ولی تنها این نکته را بدانید که در جیسون، دو {} یک آبجکت میسازد و دو [] یک آرایه میسازد.
اطلاعات ارسالی و دریافتی بین ما و سرور تلگرام
جیسون را کمی توضیح دادیم ولی چیزی که به طور واضح آن را نگفتیم این بود:
در تلگرام اطلاعاتی که ما به سرور ارسال میکنیم و سرور به ما میدهد، در ساختار جیسون میباشند. اما نگران نباشید؛ چون نیازی نیست خودمان را درگیر جیسون کنیم و ما به گونهای دیگر در کدنوییسی مقدارها را با روشهایی خواهیم ساخت و سپس با روشهایی آن را به یک رشتهی جیسون تبدیل خواهیم کرد. همچنین اگر یک جیسون از سرور تلگرام بگیریم، با استفاده از روشهایی در کدنویسی، آن را به به یک محتوای قابل خواندن در زبان مورد استفادهی خود تبدیل خواهیم کرد.
شرح چند نکته
ما تا جایی توضیح دادیم که لینک را اجرا کرده و عبارت جیسون را از تلگرام گرفتیم! اما مواردی که باید بدانید:
- تمام کارهای ما از قبیل ارسال پیام متنی، پیام ویدیویی و … که میخواهیم با ربات در سمت تلگرام صورت گیرند، از طریق این لینکی که ساخته شدهاند انجام خواهند گرفت!
- قسمت METHOD_NAME نام آن عملی (متدی) که میخواهیم صورت گیرد را مینویسیم.
البته نمیتوانیم هرچیزی بنویسیم و باید چیزهای تغریف شده را بنویسیم. - تمامی متدهای تعریف شده در لینک Telegram Bot API قابل دسترسی هستند.
البته ما همهی این متدها را در آینده توضیح خواهیم داد.
گرفتن یک رویداد به صورت دستی و با روش GetUpdates
فعلا با روش Webhook کاری نداریم، چرا که هنوز باید موارد زیادی برایمان شفاف سازی شوند! پس یک تست ساده میخواهیم با روش GetUpdates انجام دهیم!
- وارد پی وی رباتی که ساختهاید شوید.
بهتر است یک ربات از ابتدا بسازید چون نمیخواهیم قبلا هیچ پیامی به ربات ارسال شده باشد و میخواهیم اولین پیامی باشد که برایش ارسال میکنیم. - بعد از ساخت ربات جدید، وارد پی وی آن شده و روی START کلیک کنید.
- در همان لینکی که متد getMe را روی آن قرار دادید، اینبار متد getUpdates را به جایش قرار دهید.
- لینک ساخته شده را اجرا کنید، جیسون زیر برایتان ارسال میشود که البته ممکن است برخی مقدارها با هم فرق داشته باشند.
1 2 |
{"ok":true,"result":[{"update_id":383839448, "message":{"message_id":9488,"from":{"id":96521356,"is_bot":false,"first_name":"\u2653\ufe0f\ud83c\udd70\ufe0f\ud83c\udf1b\ud83c\udf90","username":"nabeqe","language_code":"en-US"},"chat":{"id":96521356,"first_name":"\u2653\ufe0f\ud83c\udd70\ufe0f\ud83c\udf1b\ud83c\udf90","username":"nabeqe","type":"private"},"date":1507333459,"text":"/start","entities":[{"offset":0,"length":6,"type":"bot_command"}]}}]} |
- طبیعتا در اینجا ما چیزی نمیفهمیم ( برامون سخته نه این که نفهم باشیم 😀 ) و بهتر است از فایرفاکس استفاده کنیم و شکل مرتب شدهای از آن را نشان دهیم 😀
همانطور که میبینید، در جلوی فیلد text عبارت /start وجود دارد.
در جلوی first_name، مقداری که من برای نام خود در تلگرام مشخص کردهام وجود دارد.
و چیزهای دیگر که به آنها خواهیم پرداخت.
نکتهی مهم: در ابتدای هر جیسون از سمت تلگرام، یک فیلدی با نام ok وجود دارد و جلوی این مقدار میتواند true و false قرار بگیرد.
- اگر مقدار true باشد، یعنی عملیات به درستی اجرا شده است.
- اگر مقدار false باشد، یعنی عملیات به درستی اجرا نشده است.
در تصویر بالا میبینید که زیر result چیزی به نام 0 وجود دارد.
میخواهم به صورت خلاصه بگویم که نتیجهی اصلی هر متدی بعد از اجرا شدن در result نمایش داده میشود.
نکتهی خیلی مهم: اگر ok برابر false باشد، result وجود نخواهد داشت و به جای آن error_code و description وجود خواهند داشت.
- فیلد error_code، عدد ارور را نمایش میدهد که همان ارورهای استاتوس یا وضعیت HTTP هستند.
- فیلد description، توضیحی دربارهی ارور میدهد.
انواع error_code ها
- 400: درخواست بد، چیزی از قلم انداخته شده است. (مثلا یک مقداری که باید همراه متد به سرور ارسال میشد)
- 401: توکن صحیح نیست.
- 404: متد صحیح نیست.
- و …
برگردیم به همان getUpdates
در جیسون دریافتی و زیر resullt همانطور که در تصویر میبنید، فیلدی به نام 0 وجود دارد! این یعنی چه؟!
اگر برگردید و به عبارت جیسون دقت کنید، result با ] شروع شده است و ما در بالا گفتیم که این در جیسون یک آرایه است. پس در خروجی GetUpdates تمامی رویدادها به صورت آبجکت update هستند که در داخل result قرار میگرند. فعلا چون فقط یک آپدیت داریم تنها عدد 0 وجود دارد و البته شما میدانید که شماره یا index آرایه ها از 0 شروع میشوند. 😀
بیایید یک پیام دیگر به ربات ارسال کنیم
1- یک پیام جدید به ربات ارسال کنید.
مثلا پیامی با متن “Hi FullKade” را به پی وی ربات ارسال کنید.
(البته شما رو مطمئن نیستم Hi FullKade ارسال کرده باشین 😐)
2- دوباره GetUpdates را اجرا کنید. منظور این است که آن لینک را دوباره اجرا کنید تا جیسون جدیدی دریافت شود.
من بعد از اجرا با جیسون زیر رو برو شدم:
1 2 3 |
{"ok":true,"result":[{"update_id":383839448, "message":{"message_id":9488,"from":{"id":96521356,"is_bot":false,"first_name":"\u2653\ufe0f\ud83c\udd70\ufe0f\ud83c\udf1b\ud83c\udf90","username":"nabeqe","language_code":"en-US"},"chat":{"id":96521356,"first_name":"\u2653\ufe0f\ud83c\udd70\ufe0f\ud83c\udf1b\ud83c\udf90","username":"nabeqe","type":"private"},"date":1507333459,"text":"/start","entities":[{"offset":0,"length":6,"type":"bot_command"}]}},{"update_id":383839449, "message":{"message_id":9489,"from":{"id":96521356,"is_bot":false,"first_name":"\u2653\ufe0f\ud83c\udd70\ufe0f\ud83c\udf1b\ud83c\udf90","username":"nabeqe","language_code":"en-US"},"chat":{"id":96521356,"first_name":"\u2653\ufe0f\ud83c\udd70\ufe0f\ud83c\udf1b\ud83c\udf90","username":"nabeqe","type":"private"},"date":1507334671,"text":"Hi FullKade"}}]} |
3- این بار در زیر 0، داخل result ما آبجکت دیگری که شماره آن 1 میباشد را هم مشاهده میکنیم! ( البته در شکل مرتب شدهی آرایه نه در متن بالا 😀 )
اگر به text آن دقت کنید، همان Hi FullKade ای هست که ارسال کردهایم.
سوال این است، ما هربار که بخواهیم آپدیتها را بگیریم، آیا هر آپدیتی که از ابتدای ساخته شدن ربات وجود دارد دریافت میشود؟!
جواب بله است اما نترسید، ما میتوانیم به تلگرام بگوییم که از چه جایی به بعد را برایمان ارسال کند. سپس موارد قبلی از بین خواهند رفت.
درخواست از تلگرام برای اینکه دیگر یک آپدیت را نمایش ندهد!
1- کافی است به جلوی getUpdates در لینک رفته و آن را به صورت زیر تغییر دهیم
1 |
https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getUpdates?offset= |
2- مشاهده میکنید که جلوی offset چیزی ننوشتهایم. اما در این جا چه چیزی باید بنویسیم؟!
نکته: همانطور که برنامه نویسان سمت سرور میدانند، به این روش ارسال اطلاعات به روش GET به سمت سرور میگویند.
3- به جیسونی که دریافت کردهایم برگشته و به دنبال فیلدی با نام update_id در اولین آپدیت (یعنی شماره 0) بگردید.
سپس مقدار آن را جلوی offset در لینک بالا قرار دهید.
4- این لینک را اجرا کنید.
5- اتفاقی نیفتاد؟ 😀
نترسید مشکلی نیست! شما بازهم همان جیسون را دریافت میکنید چرا که باید مقدار update_id را یکی زیاد تر میکردید. برای مثال اگر 383839448 باشد آن را 383839449 مینویسیم.
6- دوباره لینک را با مقدار جدید اجرا کنید.
7- شما دیگر آپدیتی که متن /start را داشت ندارید و تنها یک آرایه داخل result جیسونی که دریافت کرده اید وجود دارد.
8- حالا مقدار offset را دوباره زیاد کنید، یعنی اگر قبلا 383839449 بود، آن را به 383839450 تغییر دهید.
9- دوباره لینک را اجراکنید. این بار کلا هیچ آپدیتی ندارید!
مقدار offset میگوید که از آپدیتهایی که update_id آنها از این (offset) بالاتر هستند را نشان بده!
و همانطور که شاید گرفته باشید، update_id به صورت یک به یک تغییر میکند.
نکته خیلی مهم: اگر offset را از لینک برداشته و آن را ارسال نکنید، با این هدف که آپدیتهای قبلی را باز هم بگیرید، تلگرام آنها را در اختیار شما نخواهد گذاشت! چرا که دیگر آنها در دسترس نیستند! ( حداقل تا این لحظه این جوریه بعدن عوض کنه نیاین بگین اشتباه گفتیا 😐 )
ارسال یک پیام متنی به خودمان
میخواهیم به خودمان یک پیام متنی ارسال کنیم! برای انجام این کار تلگرام متد sendMessage را آماده کرده است.
1- در همان لینکی که در مثالهای قبل گفتیم، متد ‘sendMessage’ را به جای ‘getMe’ بنویسید.
2- اگر این متد را بدون هیچ ورودی (منظور چیزی مثل offset که در getUpdates وجود داشت) اجرا کنیم، با خطا روبهرو میشویم! چرا که این متد نیازمند دو ورودی اجباری میباشد.
3- ورودی اول، ‘chat_id’ میباشد و شما در آن مشخص میکنید که به کجا میخواهید پیام را ارسال کنید.
4- وردی دوم، text میباشد و شما در آن متن پیام ارسالی را باید بنویسید.
برای نوشتن دو ورودی در لینک، طبق دانسته هایی که باید بدانید، از & برای جدا کردن استفاده خواهیم کرد.
به این روش ارسال اطلاعات به سمت سرور، روش GET میگویند که در داخل URL اطلاعات را ارسال میکنیم.
قبل از این که این مورد را تست کنیم، باید بگویم چیزی که در ‘chat_id’ وارد میکنید، نامکاربری نیست! برای اینکه در مورد char_id اطلاعاتی به دست آورید، وارد این پست شوید. و توضیح خلاصه در زیر:
چت آیدی جیست؟!
هر کاربر، گروه و کانالی در تلگرام، دارای یک چت آیدی میباشد. چت آیدی یا آیدی عددی همانند کد ملی بوده و تکراری نیست اما باید بدانید که این چت آیدی به صورت عدد بوده و با نام کاربری که به اشتباه به آن آیدی هم میگویند، یکی نیست!
شما در جیسونی که با getUpdates دریافت میکنید، میتوانید چت آیدی خود را مشاهده کنید. یا میتوانید از ربات ShowChatIdBot برای گرفتن چت آیدی خود استفاده کنید.
5- چت آیدی خود را کپی کرده و سپس لینک را به صورت زیر کامل کنید.
1 |
https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/sendMessage?chat_id=96521356&text=Welcome to FullKade |
6- لینک را اجرا کنید، با جیسونی شبیه به جیسون زیر رو به رو میشوید.
1 |
{"ok":true,"result":{"message_id":9490,"from":{"id":132279682,"is_bot":true,"first_name":"\u0641\u0648\u0644 \u06a9\u062f\u0647","username":"FullKadeBot"},"chat":{"id":96521356,"first_name":"\u2653\ufe0f\ud83c\udd70\ufe0f\ud83c\udf1b\ud83c\udf90","username":"nabeqe","type":"private"},"date":1507337047,"text":"Welcome to FullKade"}} |
فعلا کاری نداریم، همین را بدانید که این جیسون، اطلاعات همان پیامی است که ارسال کردهایم.
نکتهی مهم: برای ارسال پیام به کانال، نام کاربری کانال را به همراه @ در chat_id وارد میکنیم.
نکتهی مهم: در تلگرام نمیتوان به کسی که ربات را START نکرده است، چیزی ارسال کرد.
سلام
خوب بود اصطلاحات رو توضیح بدید. مثلا چون من جیسون رو اصلا نمی دونستم یعنی چی تو سطرهایی که جیسون نوشتی چیزی نفهمیدم و..
سلام؛ ماهیت جیسون در حد نیاز داخل پست توضیح داده شده!
در ادامه هم باید گفت همه چیز رو که نمیشه توضیح داد! برای مثال توی همین پست اگه بخوایم دیگه مبتدی رفتار کنیم بایستی 10 ها واژه رو توضیح بدیم!
پس خب واضحه که قبلا باید یه زبان برنامه نویسی بلد باشین و همینطور واژهای اگه براتون نا آشنا بود یه سرچ کنین!
سلام چطوی میشه در کد نویسی اندروید یک شماره موبایل بگیریم و سپس آی دی تلگرام آن را برای ما بدست بیاورد
سلام؛ سوال شما خارج از بحث پسته!
همچنین رباتها به چنین چیزی دسترسی ندارن و تنها میتونن آیدی شمارههایی که از داخل تلگرام به صورت اشتراک گزاری براشون ارسال میشن رو به دست بیارن!
با سلام. مرسی از اطلاعات خوبتون. ببخشید برای من فقط کد getMe اجرا شد بقیه کدها خطای 409 رومیده. ممنون میشم راهنمایی کنید
ورودی متدها باید درست تنظیم بشه!
سلام ببخشید من می خوام یک بخش نظرات در نرم افزار اندرویدم درست کنم که نظر کاربر به ربات تلگرامم ارسال بشه میشه در این مورد راهنمایی ام کنید
سلام
بسیار بسیار از مطالب مفید و جالب و به درد بخورتون متشکرم.
موفق باشین.
سلام ممنون از سایت خوبتون
من توی لینک عبارت توکن ربات خودمو جایگذاریکردم و مند getMeرو هم جایگذاریکردم.ولی خطای۴۰۴رو میده.نمیدونم چیکار کنم.getMeرو درست جایگذاری کردم
موردی رو اشتباه وارد کردین. لینک رو بدین چک کنم
سلام خسته نباشید
من همین مشکل رو دارم
کجا لینک رو بدم شما چک کنین؟
سلام؛ از همینجا ارسال بفرمایین لینکو حذف میکنیم تا دیده نشه
You can use this token to access HTTP API:
*****
For a description of the Bot API, see this page: https://core.telegram.org/bots/api
اینم از توکن من
https://api.telegram.org/bot%3C%20*****%20%3E/getme
اینم از اون چیزی که اون بالا نوشتید باید انجام بدهم
وقتی گفته شده که توکن خودتون رو به جای عبارت <token> قرار بدین، فراموش کردین علامت بزرگتر و کوچکتر رو پاک کنین و توکنتون رو فقط به جای عبارت token قرار دادین و علامتها رو حذف نکردین!!!!!
ببخشید فکر کنم پیامم فرستاده نشد
میخواستم بگم که راط ارتباطی سریع دارید که در ارتباط باشیم
چون هر دفه به یک مشکل بر میخورم
اگه شما اینجوری راحترین که هیچ
مشکلم این بود که اون قستمی که گفتین هنوز هیچ پیامی برای ربات ارسال کردین استات رو بزنین
و در جیسون رو به روی text استارت رو نون میده
اینجوری که من الان میبینم فقط وفقط id – is-bot – فرست نام و یوزر نیم میبینم
اصلا بااون عکس مطابقت ندارد
فرستاده شده اما بایستی صبر میکردین تا بخونیم و تایید کنیم.
اما در مورد مشکلتون بهتره دقت کنین! گفته شده از متد getUpdates استفاده کنید نه از متد getMe
سلام. خسته نباشید. من تا حالا تو هیچ وبسایتی کامنت نذاشته بودم. اما آموزش این کانال اونقدر فوق العاده بود که خواستم تشکر کنم. من نزدیک 20 روزه که دارم روی نوشتن برنامه بات تلگرام با php کار میکنم و سایت های زیادی نگاه کردم اما متاسفانه بیشتر مطالبشون کپی از همدیگه بود. واقعا شما خیلی روان و مرحله به مرحله شرح دادین که برای کسایی که رشتشون برنامه نویسی نباشه هم قابل درکه. لطفا در مورد API های تلگرام و روش استفاده ازشون برای ساخت بات های پیشرفته هم آموزش بزارین. با سپاس
سلام دوست عزیز. سپاس فراوان از توجه و لطف شما.
منم به خاطر نبود کامنت و پیشنهاد خاصی، آموزشای قبلی رو اصلاح نکردم و از ادامهی آموزشا هم فعلا منصرف شدم
ولی در صورت دلگرمی دوستان عزیزی مثل شما، احتمالا ادامهی آموزشارو هم به صورت ویدیویی منتشر کنم
موفق و پیروز باشید
ایا میشه با اکانت واقعی خودم بتونم ربات بسازم یا تلگرام دیگه این اجازرو نمیده و حتما باید اکانت ربات باشه؟
بدیهیه که میشه ولی روش ساختش متفاوته.
سلام آیا میشه ارسال عکس از سیستم خودمون به ربات به صورت لینک در اورد
سلام. متوجه منظورتون نشدم!
سلام خسته نباشید
من روی همون لینک اول که میخوام توکن رو بزارم هرکار میکنم نمیشه اون عبارتو انتخاب میکنم ولی گزینه های حذف یا کپی و پیست بالاش نشون داده نمیشه
سلام. متوجه منظور شما نشدم!