فول کده
ورود عضویت
تبلیغات

برنامه نویسی ربات تلگرام – آشنایی با API ربات تلگرام به صورت کلیشه ای

برنامه نویسی ربات تلگرام - آشنایی با API ربات تلگرام به صورت کلیشه ای
هادی اکبرزاده
نوشته شده توسط هادی اکبرزاده

آشنایی با API ربات تلگرام

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

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

فرقی ندارد که چه PHP باشد و چه دیگر زبان هایی که با آن ها آشنایی دارید، در هرصورت مسیر یکی است و فقط شکل و ظاهر کدها هستند که با هم فرق دارند. همچنین ما قبلا مقاله ای تحت عنوان برنامه نویسی ربات تلگرام – آنچه قبل از شروع باید بدانیم را منتشر کرده ایم که بهتر است قبل از هرچیزی ابتدا آن را بخوانید تا مسئله ی ربات های تلگرام بهتر برایتان هضم شود.

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

اجازه دهید از صفر بحث را جلو ببریم. smile

ربات ها در حقیقت چیستند و چه کاری انجام میدهند؟!
شاید بخندید و با خود بگویید: “ای بابا، اینو که دیگه هممون میدونیم”! ولی باور کنید شما همه نیستید bigsmile و همچنین در اینجا قصد دارم مواردی را بیان کنم که شاید به آن ها دقت نکرده باشید.

زمانی که شما یک حساب کاربری در یک پیام رسان ایجاد میکنید و وارد آن میشوید، سپس یکی از دوستانتان برایتان پیامی ارسال میکند و شما آن را خوانده و پاسخی را برای دوستتان تایپ کرده و ارسال میکنید. در تمامی این مراحل، عملیاتی که در اکانت شما صورت میگیرد توسط خود شما صورت میگیرد! یعنی شما فکر میکنید، سپس پاسخ میدهید. شما فکر میکنید، چیزی را مینویسید.
آن کدی که در نرم افزار پیام رسان وجود دارد برای شما رابطی را ایجاد کرده است که خودتان وظایف را به عهده بگیرید.

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

اما ربات چیست؟!
شما فرض کنید همان نرم افزاری که با آن چت میکنید، به جای این که منتظر شما باشد تا فکر کنید و چیزی را تایپ کرده و به دوستتان ارسال کنید، خودش (نرم افزار) تصمیم میگیرد که چه چیزی به دوستتان ارسال کند و البته این تصمیمی که نرم افزار خودش میگیرد، خود به خود اتفاق نمیفتد و چیزی است که ما قبلا برای آن تعریف کرده ایم و نرم افزار آن ها را اتوماتیک انجام میدهد.
مثلا:
همان جارو برقی را دوباره تصور کنید ولی این بار دسته ی آن را برای جارو کردن نگرفته ایم و خودش در حال جارو کردن خانه است!

پس تعریف ربات، چیزی است که اتوماتیک کارهایی را انجام میدهد. البته مراحلی از این ربات میتواند اتوماتیک نباشد!
برای مثال همان جارو برقی زمانی که میخواهد آشغال داخل خود را خالی کند، از ما اجازه بگیرد!
این اجازه گرفتن اتوماتیک صورت میگرید ولی برای انجام بقیه کارها ما باید دوباره وارد ماجرا شویم و با این حال فراموش نکنیم که قسمتی از آن یک ربات است و اتوماتیک انجام شده است.

ربات به چیزی گفته میشود که اتوماتیک کاری را انجام دهد! البته الگوریتمی که برای برنامه ی خود مینویسید یک ربات نیست و با آن فرق میکند bigsmile
چرا که ربات چیزی است که به جای انسان با این الگوریتم کارمیکند.
مثل همان اتوماتیک جواب دادن به پیام ها یا اتوماتیک جارو کردن که توسط خود سیستم انجام میشود و انسان انجام دهنده ی آن نیست!

ربات ها در پیام رسان ها
دانستیم که ربات ها، برنامه ای هستند که وظیفه فکر کردن و انجام کارها را خودشان بر عهده میگیرند و همچنین در پیام رسان ها ربات ها معمولا به جسم و فیزیک نیازی ندارند! یعنی برای مثال مثل جارو برقی یا آدم آهنی نیستند که به صورت فیزیکی با ما در ارتباط باشند!

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

اما در 99.99 درصد از ربات هایی که برای پیام رسان ها نوشته میشوند، چنین چیزی وجود ندارد و آن ها تنها یک نرم افزار هستند که درون سیستم کامپیوتری (اعم از موبایل و …) با یک منطق مشخص اجرا شده اند و روی فیزیک تاثیری ندارند!

چیزی که میخواهم در این جا به آن بپردازم، این است که در پیام رسان ها، برنامه نویسان می آیند و  ربات ها روی حساب های کاربری واقعی سوار میکنند! یعنی شما (مثلا شمای برنامه نویس) که با یک حساب کاربری و یک شماره وارد تلگرام شده اید، ربات را بر روی حساب کاربری خود پیاده میکنید و این چند مشکل عمده دارد و مهم ترین آن موارد زیر هستند:

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

ربات ها در تلگرام
در بالا دو مورد را ذکر کردیم که پیاده کردن ربات در اکانت رسمی را بد جلوه میدهند!
تلگرام نیز از این قاعده مستثنی نبود تا زمانی که آمد و  چارچوب جدیدی برای ربات ها توسعه داد و در اختیار برنامه نویسان گذاشت!

در این چارجوب، هر شخص که با حساب رسمی خود وارد تلگرام میشود، میتواند وارد یک ربات رسمی به نام بات فادر که توسط خود تلگرام ساخته شده بشود و از طریق آن، یک اکانت ربات ایجاد کند!
اکانت های ربات نیز همانند اکانت های عادی، شناسه کاربری (معروف به آیدی)، نام و عکس پروفایل و … را دارند اما کاربر با ورود به این اکانت ها در نرم افزار، میتواند تشخیص دهد که این یک اکانت برای ربات ها میباشد.

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

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

کاربرد اکانت ربات چیست و چرا یک چارچوب جدا برای آن در نظر گرفته شده است؟
سوال خوبی است! به دو دلیل مهمی که در بالا گفته شد!

در تلگرام اکانت های ربات ها خیلی از قابلیت های اکانت رسمی را ندارند و برعکس! برای مثال ربات ها نمیتوانند به گروهی جوین شوند و باید کسی آن ها را به داخل گروه اضافه کند! همچنان که کسی نمیتواند همانند اکانت ربات ها در تلگرام، پیامی به همراه کیبورد و دکمه ارسال کند!

و دلیل بعدی سخت بودن ساخت ربات با اکانت رسمی بود که در این جا این مشکل به طور خیلی خاصی برطرف شده است.

دلیل دیگر نیز این بود که اگر قرار باشد یک ربات بسازیم باید یک اکانت رسمی بسازیم و یقینن برای همه مشکل است که اگر بخواهند چندین ربات بسازند، چندین شماره تهیه کنند و البته نگه داشتن این همه شماره نیز کار چندان ساده ای نیست و مشکلی برای خود است.

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

پس جدا شدن اکانت ربات و کاربر، نه به این ربط دارد که نتوان با اکانت رسمی ربات ساخت و نه به این ربط دارد که با اکانت ربات نتوان به صورت دستی کارها را انجام داد!

فرآیند اصلی ساخت ربات تلگرام

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

  • Webhook
  • GetUpdates

و هردو روش در جهت اهداف خود استفاده میشوند ولی عموما مردم اهدافی دارند که روش اول برای آن ها بهتر است.

در روش Webhook همانطور که در مقاله هم گفته شد، ما یک آدرس اینترنتی را به همراه اکانت رباتی که ساخته ایم، به سرور تلگرام معرفی میکنیم، سپس سرور تلگرام زمانی که یک اتفاق جدید در تلگرام برای این اکانت روی میدهد، آن را به این آدرس ارسال میکند و ما باید آن را بررسی و کارهایی که میخواهیم را انجام دهیم.

در مورد روش GetUpdates هم گفته شد به جای این که تلگرام رویداد ها را به ما ارسال کند، ما به طور دستی (برای مثال هر ثانیه) یک درخواست به سرور تلگرام ارسال میکنیم و رویدادهایی که تا آن لجظه وجود دارند را میگیرم و البته ممکن است رویدادها خیلی زیاد باشند که میتوانیم به سرور تلگرام بگوییم مثلا ده تا بدهد و بعد از بررسی آن ها، ده تای بعدی را بگیریم.

اولین حرکت

مراحلی که در ادامه میخواهم بگویم را به صورت کلیشه ای (همینجوری) انجام دهید تا به طور ناخودآگاه مواردی برایتان هضم شود و بعدا آن ها را شفاف سازی خواهم کرد.
البته در برنامه نویسی قرار نیست این گونه عمل کنیم و شاید بپرسید پس به چه دردی میخورد؟!
جون در برنامه نویسی یک بار برای انجام این کارها کدی مینویسیم و دیگر با آن کاری نخواهیم داشت bigsmile

  • یک اکانت ربات ایجاد کنید. اگر بلد نیستید وارد پست BotFather شده و روش انجام این کار را یاد بگیرید.
    شما در نهایت باید برای ربات خود یک عبارتی با نام توکن از بات فادر دریافت کرده باشید.
  • توکنی که دریافت کرده اید را در لینک زیر به جای عبارت <token> قرار دهید، سپس آن را کپی کنید.

  • دوباره در همین لینک، به جای عبارت METHOD_NAME کلمه ی getMe را بنویسید، سپس آن را کپی کنید.
    متد getMe، برای گرفتن اطلاعات اکانت ربات خودمان استفاده میشود.
  • وارد مرورگر شده و لینک تغییر یافته ی خود را باز کنید.
  • با چیزی مثل عبارت زیر رو به رو خواهید شد:

  • البته اگر در فایرفاکس باشید ممکن است با تصویر زیر رو به رو شوید که کافی است روی Raw Data کلیک کنید.

  • چیزی که ما دریافت کردیم، نوشته ای در ساختار JSON میباشد.
    فعلا تا همین جا را داشته باشید تا به تعریف و توضیحی درمورد JSON بپردازیم و در جلسات آینده آموزش های تخصصی ای از آن را قرار خواهیم داد. البته شما آن چنان نیازی به دانستن این مورد نخواهید داشت به جز چند مورد که آن ها را هم حل خواهیم کرد.

JSON چیست؟

نمیخواهم از سایت های دیگر یا از ویکی پدیا توضیحی از جیسون چیست را برایتان قرار دهم. چرا که لازم به این کار نیست و همین جا به طور خلاصه و ساده آن را توضیح خواهم داد.

جیسون همانند HTML و XML و …، یک ساختار استاندارد متنی برای اسکلت بندی قسمت های مختلف نوشته میباشد.

مثال:
میخواهیم درون نرم افزار خود، کدی بنویسیم که نام، نام خانوادگی، شماره و اطلاعات دیگری را از کاربر بگیرد و سپس آن را در یک فایل متنی با پسوند شناخته شده ی txt ذخیره کند. سوال این است که چگونه ذخیره کنیم تا بعدا بتوانیم تشخیص دهیم نام در کجا قرار دارد، نام خانوادگی در کجا و …
البته منظور از این که تشخیص دهیم، تشخیص در داخل نرم افزاری است که نوشته ایم و میخواهیم نرم افزار با خواندن آن فایل، اطلاعات را لود یا بارگذاری کند.

بدین منظور شاید بیاییم و هرکدام را در یک خط بنویسیم برای مثال:

پس ساختار ما این شد که هرکدام را در یک خط بنوسیم، سپس در داخل برنامه تعریف میکنیم که خط اول نام، خط دوم نام حانوادگی و خط سوم هم شماره میباشد.

در واقع این ساختاری بود که ما تعریف کردیم! جیسون نیز اینگونه است! اما ساختار جیسون به این سادگی نیست و البته جیسون یک ساختار استانداردی است که دنیا ( منظور جهان هستیه bigsmile ) آن را قبول کرده است. smile
برای مثال در همان چیزی که با اجرای لینک دریافت کردیم، میتوانیم مورد زیر را مشاهده کنیم:

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

  • در این صورت دستمان برای انجام خیلی از کارها بسته میشود. جیسون یک ساختار آبجکتی و آرایه ای میباشد و هر چیزی در آن اسمی دارد!
    در واقع جیسون، مقدارهای یک آرایه یا آبجکت در زبان برنامه نویسی را به صورت متنی در می آورد و بعدا میتوانیم از روی این مقدارها، همان آبجکت را از روی کلاسی که ساخته شده است ایجاد کنیم.
  • جیسون یک ساختار منظم میباشد و چیزی مثل نوشتن هرکدام در یک خط، یک ساختار نامنظم و محدود میباشد ( خرتوخره bigsmile ) !

نکته: چیزی که در این ساختار وجود دارد این است که باز هم همانند HTML و دیگر زبان های برنامه نویسی، فاصله در قسمت های خارج از مقدارها و نام ها و برخی چیزهای دیگر اهمیتی ندارد! در واقع اگر فاصله نباشد خواندن آن برای کامپیوتر آسان تر و سریع تر است و این فاصله ها خواندن آن را برای انسان ساده تر میکنند.
مثلا همان جیسون بالا را در ساختار منظم شده ی زیر برای انسان در نظر بگیرید.

این که در اینجا با فاصله همه را جدا کرده ایم برای ما ساده تر شده است اما برای کامپیوتر پیچیده تر شده است و کامپیوتر زمان بیشتری را برای هضم آن متحمل میشود!

فعلا ساختار جیسون را توضیح نمیدهیم ولی تنها این نکته را بدانید که در جیسون، دو {} و چیزهای بین آن یک آبجکت بوده و دو [] و چیزهای بین آن یک آرایه هستند.

درمورد جیسون و ساختار آن در درس های آینده توضیح خواهیم داد ولی فعلا به آن ها نیازی نداریم چرا که در سمت برنامه نویسی، با استفاده از روش هایی آن را به آبجکت تبدیل خواهیم کرد.

اطلاعات ارسالی و دریافتی بین ما و سرور تلگرام

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

شرح چند نکته

ما تا جایی توضیح دادیم که لینک را اجرا کرده و عبارت جیسون را از تلگرام گرفتیم! اما مواردی که باید بدانید:

  • تمام کارهای ما از قبیل ارسال پیام متنی، پیام ویدیویی و … که میخواهیم با ربات در سمت تلگرام صورت گیرند، از طریق این لینکی که ساخته شده اند انجام خواهند گرفت!
  • قسمت METHOD_NAME نام آن عملی (تابع یا function) که میخواهیم صورت گیرد را مینویسیم.
    البته نمیتوانیم هرچیزی بنویسیم و باید چیزهای تغریف شده را بنویسیم.
  • تمامی متدهای تعریف شده در لینک Telegram Bot API قابل دسترسی هستند.
    البته ما همه ی این متدها را در آینده توضیح خواهیم داد.

گرفتن یک رویداد به صورت دستی و با روش GetUpdates

فعلا با روش Webhook کاری نداریم، چرا که هنوز باید موارد زیادی برایمان شفاف سازی شوند! پس یک تست ساده میخواهیم با روش GetUpdates انجام دهیم!

  • وارد پی وی ربات خود شوید. رباتی که تازه ساخته اید.
    بهتر است یک ربات از ابتدا بسازید چون نمیخواهیم قبلا هیچ پیامی به ربات ارسال شده باشد و میخواهیم اولین پیامی باشد که برایش ارسال میکنیم.
  • بعد از ساخت ربات جدید، وارد پی وی آن شده و روی START کلیک کنید.
  • در همان لینکی که متد getMe را روی آن قرار دادید، اینبار متد getUpdates را به جایش قرار دهید.
  • لینک ساخته شده را اجرا کنید، جیسون زیر برایتان ارسال میشود که البته ممکن است برخی مقدارها با هم فرق داشته باشند.

  • طبیعتا در اینجا ما چیزی نمیفهمیم ( برامون سخته نه این که نفهم باشیم bigsmile ) و بهتر است از فایرفاکس استفاده کنیم و شکل مرتب شده ای از آن را نشان دهیم bigsmile

 

همانطور که میبینید در جلوی فیلد text عبارت /start وجود دارد.
در جلوی first_name، مقداری که من برای نام خود در تلگرام تایین کرده ام وجود دارد.
و چیزهای دیگر که به آن ها خواهیم پرداخت.

نکته ی مهم: در ابتدای هر جیسون از سمت تلگرام، یک فیلدی با نام ok وجود دارد و جلوی این مقدار میتواند true و false قرار بگیرد.

  • اگر مقدار true باشد، یعنی عملیات به درستی اجرا شده است.
  • اگر مقدار false باشد، یعنی عملیات به درستی اجرا نشده است.

در تصویر بالا میبینید که زیر result چیزی به نام 0 وجود دارد. میخواهم به صورت خلاصه بگویم که نتیجه اصلی هر متدی بعد از اجرا شدن در result نمایش داده میشود.

نکته ی خیلی مهم: اگر ok برابر false باشد،  result وجود نخواهد داشت و به جای آن error_code و description وجود خواهند داشت.

  • فیلد error_code، عدد ارور را نمایش میدهد که در ادامه انواع ارور ها را بررسی خواهیم کرد.
  • فیلد description، توضیحی درباره ارور میدهد.

انواع error_code ها

  • 400: درخواست بد، چیزی از قلم انداخته شده است. (مثلا یک مقداری که باید همراه متد به سرور ارسال میشد)
  • 401: توکن صحیح نیست.
  • 404: متد صحیح نیست.

چند ارور دیگر نیز وجود دارند که به زودی خواهم نوشت.

برگردیم به همان getUpdates
در جیسون دریافتی و زیر resullt همانطور که در تصویر میبنید، فیلدی به نام 0 وجود دارد! این یعنی چه؟

اگر برگردید و به عبارت جیسون دقت کنید، result با ] شروع شده است و ما در بالا گفتیم که این در جیسون یک آرایه میباشد.

در GetUpdates تمامی رویدادها که به صورت آبجکت update هستند، در داخل result قرار میگرند. فعلا چون فقط یک آپدیت داریم تنها عدد 0 وجود دارد. البته شما میدانید که شماره یا index آرایه ها از 0 شروع میشوند. bigsmile

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

  • یک پیام جدید به ربات ارسال کنید.
    مثلا قپیامی با متن Hi FullKade را به پی وی ربات ارسال میکنیم.
  • دوباره GetUpdates را اجرا کنید. منظور این است که آن لینک را دوباره اجرا کنید تا جیسون جدیدی دریافت شود.
    من بعد از اجرا با جیسون زیر رو برو شدم.

  • این بار در زیر 0، داخل result ما آبجکت دیگری که شماره آن 1 میباشد را هم مشاهده میکنیم! ( البته در شکل مرتب شده ی آرایه نه در متن بالا bigsmile )
    اگر به text آن دقت کنید همان Hi FullKade ای هست که ارسال کرده ایم.
    ( البته شما رو مطمئن نیستم Hi FullKade ارسال کرده باشین neutral )

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

درخواست از تلگرام برای اینکه دیگر یک آپدیت را نمایش ندهد!

  • کافی است به جلوی getUpdates در لینک رفته و آن را به صورت زیر تغییر دهیم (البته این توکن منه)

  • مشاهده میکنید که جلوی offset چیزی ننوشته ایم. اما در این جا چه چیزی باید بنویسیم؟
    نکته: همانطور که برنامه نویسان سمت سرور میدانند، به این روش ارسال اطلاعات به روش GET به سمت سرور میگویند.
  • به جیسونی که دریافت کرده ایم برگردید و به دنبال فیلدی با نام update_id در اولین آپدیت (یعنی شماره 0) بگردید.
    سپس مقدار آن را جلوی offset در لینک بالا قرار دهید.
  • این لینک را اجرا کنید.
  • اتفاقی نیفتاد؟ bigsmile
    نترسید مشکلی نیست! شما بازهم همان جیسون را دریافت میکنید چرا که باید مقدار update_id را یکی زیاد تر میکردید. باری مثال اگر 383839448 باشد آن را 383839449 میکنیم.
  • دوباره لینک را با مقدار جدید اجرا کنید.
  • شما دیگر آپدیتی که متن /start را داشت ندارید و تنها یک آرایه داخل result جیسونی که دریافت کرده اید وجود دارد.
  • حالا مقدار offset را دوباره زیاد کنید، یعنی اگر قبلا 383839449 بود، آن را به 383839450 تغییر دهید.
  • دوباره لینک را اجراکنید. این بار کلا هیچ آپدیتی ندارید!

نتیجه گیری از offset: مقدار offset میگوید که از آپدیت هایی که update_id آن ها از این (offset) بالاتر هستند را نشان بده!
و همانطور که شاید گرفته باشید، update_id به صورت یک به یک تغییر میکند.

نکته خیلی مهم: اگر offset را از لینک برداشته و آن را ارسال نکنید، با این هدف که آپدیت های قبلی را باز هم بگیرید، تلگرام آن ها را در اختیار شما نخواهد گذاشت! چرا که دیگر آن ها در دسترس نیستند! ( حداقل تا این لحظه این جوریه بعدن عوض کنه نیاین بگین اشتباه گفتیا neutral )

نتیجه کلی: متد getUpdate برای گرفتن دستی آپدیت ها استفاده میشود.

ارسال یک پیام متنی به خودمان

میخواهیم به خودمان یک پیام متنی ارسال کنیم! برای انجام این کار تلگرام متد sendMessage را آماده کرده است.

  • در همان لینکی که در مثالهای قبل گفتیم، متد sendMessage را بنویسید.
  • اگر این متد را بدون هیچ ورودی (منظور چیزی مثل offset که در getUpdates وجود داشت) اجرا کنیم، با ارور رو به رو میشویم! چرا که این متد نیازمند دو ورودی اجباری میباشد.
  • ورودی اول،  chat_id میباشد.
    شما باید مشخص کنید که به کجا میخواهید پیام را ارسال کنید.
  • وردی دوم، text میباشد.
    شما باید مشخص کنید که متن ارسالی چه چیزی است.
  • اما برای این که دو ورودی بنویسیم طبق دانسته هایی که باید بدانید، از & برای جدا کردن استفاده خواهیم کرد. (در روش GET از & استفاده میکنیم!)

قبل از این که این مورد را تست کنیم، باید بگویم چیزی که در chat_id وارد میکنید باید چه باشد! البته شاید بدانید ولی اجباری نیست که حتما باید میدانستید!

چت آیدی جیست؟
هر کاربری در تلگرام، هر گروه و هر کانالی دارای یک چت آیدی میباشد. چت آیدی یا آیدی عددی همانند کد ملی بوده و تکراری نیست اما باید بدانید که این چت آیدی به صورت عدد بوده و با نام کاربری که به اشتباه به آن آیدی هم میگویند، یکی نیست!
شما در جیسونی که با getUpdates دریافت کردید میتوانید چت آیدی خود را مشاهده کنید. یا میتوانید از ربات

  • همانطور که در بالا میبنید، چت آیدی باید در چنین جایی باشد!
  • آن را کپی کنید. سپس لینک را به صورت زیر کامل کنید.
    میخواهیم پیام Welcome to FullKade را به خودمان ارسال کنیم.

  • لینک را اجرا کنید، با جیسونی شبیه به جیسون زیر رو به رو میشوید.

  • و البته تصویر مرتب شده ی آن در فایرفاکس:

فعلا کاری نداریم، همین را بدانید که این جیسون، اطلاعات همان پیامی است که ارسال کرده ایم.

نکته ی مهم: برای ارسال پیام به کانال، نام کاربری کانال با @ را در chat_id وارد میکنیم.

نکته ی مهم: در تلگرام نمیتوان به کسی که ربات را START نکرده است، چیزی ارسال کرد.


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

برای ورود به بخش بعدی اینجا کلیک کنید.

تبلیغات
2 نظر
کانال تلگرام فول کده

درباره نویسنده

هادی اکبرزاده

هادی اکبرزاده

[ مدیر فول کده ]

متولد آبان 74. برنامه نویسی اندروید، ویندوز، وب و …

Instagram

پاسخ دهید

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

قوانین نظرات

  • تعریف قسمت نظرات: سیستم نظرات، محلی است تا شما بتوانید دیدگاه خودتان را نسبت به پست قرار داده شده بنویسید.
  • نظرات شما دوستان عزیز در صورتی که به بهبود پست کمک کند با ذکر نامتان در پست قرار داده میشود.
  • برای سوال کردن نسبت به موضوع قرار داده شده در پست، نیازی به سلام و احوال پرسی نیست و این به خاطر ساده تر شدن نظرات میباشد.
  • دیدگاه شما باید درباره همین پست باشد، نظرات پست های دیگر فول کده را در قسمت نظرات مربوط به خودش بپرسید. در غیر اینصورت تایید یا پاسخ داده نمیشود.
  • اگر چیزی که گفته باشید در پست توضیح داده شده باشد، نظر شما تایید یا پاسخ داده نمیشود.
  • برای پاسخ دادن به نظرات دیگران از گزینه پاسخ کنار هر نظر استفاده کنید و یک نظر جدید ارسال نفرمایید. همانطور که برای نظر جدید، نباید از پاسخ دادن استفاده کنید.
  • نظرات کوتاهی مانند "مرسی"، "عالی بود" تایید نمیشوند و این به خاطر شلوغ نشدن قسمت نظرات میباشد.
  • این مورد ضروری نیست ولی بهتر است در سایت ثبت نام کرده و سپس با اکانت خود وارد شده و نظر خود را ارسال کنید.
  • قوانین نظرات در طول زمان در این قسمت اضافه و تغییر داده میشوند و میتوانید از این قسمت بررسی کنید.
  • این قوانین شامل پست های قدیمی نمیشود ولی نظرات پست های قدیمی نیز در صورت نیاز اصلاح خواهند شد.

نظرات ثبت شده 2 دیدگاه

    1. داود گفت:

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

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