بات telegram/bot
ساختن بات با Bot API: پیام، دکمه، وبهوک و حلقهی دریافت.
واردسازی تلگرام.بات
برای ساختن بات، از BotFather توکن بگیرید و بات جدید را با آن بسازید. بات دو راه برای گرفتن پیامها دارد: حلقه دریافت که خودش از تلگرام میپرسد و برای آزمودن و سرورهای ساده بهتر است، یا وبهوک که تلگرام پیامها را با POST به سرور شما میفرستد.
در وبهوک میتوانید جواب را مستقیم در بدنهی پاسخ HTTP بفرستید؛ تابعهای پاسخ ... همان متن جیسون را میسازند. با تنظیم وب هوک با رمز رمزی بگذارید و در هر درخواست سرآیندش را بررسی کنید.
چند نکته که معمولاً غافلگیر میکند:
- هر فراخوانی API یک درخواست HTTP از نوع
GETاست که پارامترهایش در نشانی میآیند. برای همین رسانهها باfile_idیا با نشانی عمومیای که تلگرام خودش دانلود میکند فرستاده میشوند؛ پروندهای را که روی دیسک شماست نمیشود با این بسته بارگذاری کرد. توکن هم در همین نشانی است؛ پس نشانی درخواستها را در گزارشها ننویسید. حلقه دریافتهرگز برنمیگردد و تابع شما را هر بار برای یک بروزرسانی اجرا میکند. گردانندهی کند همهی گفتگوها را معطل میکند. اگرgetUpdatesشکست بخورد، دلیلش را در خروجی خطا مینویسد و یک ثانیه بعد دوباره امتحان میکند.- جوابی که در پاسخ وبهوک فرستاده میشود بیبازگشت است: نمیفهمید موفق بوده یا نه و شناسهی پیام تازه را هم نمیگیرید. اگر یکی از اینها را لازم دارید، تابع «ارسال ...» متناظر را صدا بزنید.
پاسخ دادن به دستورها
منطق بات را در تابعی بگذارید که یک بروزرسانی میگیرد و پاسخ را برمیگرداند. آن وقت همان تابع هم به کار وبهوک میآید که پاسخ را در بدنهی پاسخ HTTP پس میفرستد، هم به کار آزمونی مثل این که بروزرسانیهای دستنوشته به آن میدهد و نه شبکه میخواهد نه توکن. دستور است و نام دستور و آرگومان های دستور متن /add 2 3 را به بخشهایش میشکنند، و نام دستور پسوند @my_bot را که تلگرام در گروهها میافزاید کنار میگذارد.
واردسازی تلگرام.بات
واردسازی رشته
تابع پاسخ(ب: بات.بروزرسانی): رشته:
اگر وارونه ب.پیام دارد:
برگشت ""
پایان
پ := ب.پیام
اگر وارونه بات.دستور است(پ.متن):
برگشت بات.پاسخ پیام(پ.گفتگو.شناسه، "گفتی: " + پ.متن)
پایان
ترابرد بات.نام دستور(پ.متن):
"start":
برگشت بات.پاسخ پیام(پ.گفتگو.شناسه، "سلام " + پ.فرستنده.نام + "! بنویس /add 2 3")
پایان
"add":
تکه ها := رشته.تفکیک کردن(بات.آرگومان های دستور(پ.متن)، " ")
اگر تکه ها.طول() != ۲:
برگشت بات.پاسخ پیام(پ.گفتگو.شناسه، "شکل درست: /add A B")
پایان
جمع := رشته.تبدیل به عدد(تکه ها.بگیر(۰)) + رشته.تبدیل به عدد(تکه ها.بگیر(۱))
برگشت بات.پاسخ پیام(پ.گفتگو.شناسه، رشته.از عدد(جمع))
پایان
پایان
برگشت بات.پاسخ پیام(پ.گفتگو.شناسه، "این دستور را نمیشناسم")
پایان
تابع ریشه:
صندوق := [`{"update_id":1,"message":{"message_id":1,"text":"/start","chat":{"id":42,"type":"private"},"from":{"id":42,"first_name":"سارا"}}}`،
`{"update_id":2,"message":{"message_id":2,"text":"/add 2 3","chat":{"id":42,"type":"private"}}}`،
`{"update_id":3,"message":{"message_id":3,"text":"/add 2","chat":{"id":42,"type":"private"}}}`،
`{"update_id":4,"message":{"message_id":4,"text":"/weather@my_bot","chat":{"id":42,"type":"private"}}}`،
`{"update_id":5,"message":{"message_id":5,"text":"صبح بخیر","chat":{"id":42,"type":"private"}}}`]
هر خام در صندوق:
سرچاپ پاسخ(بات.تجزیه بروزرسانی(خام))
پایان
پایانترابرد شاخهی وگرنه ندارد، پس دستوری که در آن نیامده از آن بیرون میافتد و به خط بعد میرسد که میگوید دستور ناشناخته است. همیشه پاسخی بدهید: باتی که ساکت میماند به چشم کاربر خراب است.
دکمههای درون خطی
صفحه کلید درون خطی فهرستی از ردیفهاست و هر ردیف فهرستی از دکمهها. دکمه درون خطی رشتهی callback_data تا ۶۴ بایت را با خود دارد که وقتی کاربر دکمه را میزند برمیگردد؛ دکمه درون خطی با پیوند به جای آن پیوندی را باز میکند. هر زدن دکمه به شکل بروزرسانیای میرسد که has_callback_query آن درست است. با پاسخ فوری پرسمان بازخوان جوابش را بدهید، وگرنه دکمه همچنان در حال چرخیدن میماند، و معمولا پیام اصلی را هم ویرایش کنید تا گفتگو نشان دهد چه انتخاب شده.
واردسازی تلگرام.بات
تابع فهرست(): رشته:
ناپایا اول := وکتور {} برگردان وکتور<رشته>
اول.بیفزا(بات.دکمه درون خطی("چای"، "order:tea"))
اول.بیفزا(بات.دکمه درون خطی("قهوه"، "order:coffee"))
ناپایا دوم := وکتور {} برگردان وکتور<رشته>
دوم.بیفزا(بات.دکمه درون خطی با پیوند("ساعت کاری"، "https://example.com/hours"))
ناپایا ردیف ها := وکتور {} برگردان وکتور<رشته>
ردیف ها.بیفزا(بات.ردیف(اول))
ردیف ها.بیفزا(بات.ردیف(دوم))
برگشت بات.صفحه کلید درون خطی(ردیف ها)
پایان
تابع ریشه:
ناپایا گزینه ها := بات.گزینه های ارسال {}
گزینه ها.صفحهکلید = فهرست()
سرچاپ بات.پاسخ پیام با گزینه ها(۴۲، "چه میل دارید؟"، گزینه ها)
کلیک := بات.تجزیه بروزرسانی(`{"update_id":7,"callback_query":{"id":"cq7","data":"order:tea","from":{"id":42,"first_name":"سارا"},"message":{"message_id":31,"chat":{"id":42,"type":"private"}}}}`)
اگر کلیک.فشردن دکمه دارد:
پرسش := کلیک.فشردن دکمه
سرچاپ بات.پاسخ فوری پرسمان بازخوان(پرسش.شناسه، "ثبت شد"، نادرست)
اگر پرسش.پیام دارد:
سرچاپ بات.پاسخ ویرایش متن پیام(پرسش.پیام.گفتگو.شناسه، پرسش.پیام.شناسه پیام، "یک چای برای " + پرسش.کاربر.نام، "")
پایان
پایان
پایانبرای callback_data قالب کوچکی از خودتان بگذارید، مثل order:tea، و وقتی رسید با رشته آن را بشکنید. هرگز به آن اعتماد نکنید: هر کسی میتواند هر دادهای به بات شما بفرستد، پس پیش از هر کاری بسنجید که آن سفارش وجود دارد.
باتی که با دریافت طولانی کار میکند
دریافت طولانی (long polling) نشانی عمومی لازم ندارد، پس سادهترین راه اجرای بات از روی رایانهی خودتان است. حلقه دریافت از تلگرام بروزرسانیهای تازه را میخواهد، اگر چیزی نباشد تا چند ثانیهی داده شده منتظر میماند، تابع شما را برای هر کدام صدا میزند و جای خواندن را به خاطر میسپارد تا هر بروزرسانی فقط یک بار پردازش شود. بات یا با دریافت طولانی کار میکند یا با وبهوک، نه هر دو؛ برای همین برنامه اول هر وبهوکی را حذف میکند. تنظیم دستورات بات فهرست دستورهایی را پر میکند که تلگرام کنار جعبهی متن نشان میدهد.
واردسازی تلگرام.بات
واردسازی محیط
تابع ریشه:
توکن := محیط.دریافت("TELEGRAM_TOKEN")
اگر توکن.طول() == ۰:
سرچاپ "TELEGRAM_TOKEN را برابر توکنی بگذارید که BotFather داده است"
برگشت ۱
پایان
ربات := بات.بات جدید(توکن)
من := بات.دریافت من(ربات)
اگر وارونه بات.موفق(من):
سرچاپ "توکن پذیرفته نشد:"، من.کد خطا، من.توضیح، من.خطای شبکه
برگشت ۱
پایان
_ := بات.حذف وب هوک(ربات)
ناپایا دستورها := وکتور {} برگردان وکتور<رشته>
دستورها.بیفزا(بات.دستور بات("start"، "سلام کردن"))
دستورها.بیفزا(بات.دستور بات("echo"، "تکرار متن شما"))
_ := بات.تنظیم دستورات بات(ربات، دستورها)
سرچاپ "در حال دریافت پیامها، برای توقف Ctrl+C را بزنید"
بات.حلقه دریافت(ربات، ۳۰، (ب: بات.بروزرسانی):
اگر وارونه ب.پیام دارد:
برگشت
پایان
پ := ب.پیام
_ := بات.ارسال کنش گفتگو(ربات، پ.گفتگو.شناسه، "typing")
اگر بات.نام دستور(پ.متن) == "echo":
_ := بات.ارسال پیام(ربات، پ.گفتگو.شناسه، بات.آرگومان های دستور(پ.متن))
وگرنه:
_ := بات.ارسال پیام(ربات، پ.گفتگو.شناسه، "سلام " + پ.فرستنده.نام + "، بنویس /echo و یک متن")
پایان
پایان)
پایانآن را با توکن BotFather در متغیر محیطی اجرا کنید:
TELEGRAM_TOKEN=123456:ABC... salam run telegram-bot-guide-poll.salam
هر فراخوانی «ارسال ...» یک پاسخ ای پی آی برمیگرداند. آن را با موفق بسنجید: وقتی شکست میخورد، error_code و description دلیل تلگرام را دارند (۴۲۹ یعنی زیادی تند میفرستید) و اگر اصلا به تلگرام نرسیده باشید http_err پر میشود.
یک سرور وبهوک
در محیط واقعی معمولاً وبهوک را انتخاب میکنند: تلگرام هر بروزرسانی را همان لحظه به نشانی HTTPS شما میفرستد و لازم نیست کسی مدام بپرسد. تنظیم وب هوک با رمز نشانی و یک رمز را ثبت میکند و از آن به بعد تلگرام آن رمز را در سرآیند X-Telegram-Bot-Api-Secret-Token (ثابت سرآیند راز) هر درخواست میگذارد. هر درخواستی که این سرآیند را نداشته باشد از تلگرام نیامده و پاسخش ۴۰۱ است.
واردسازی تلگرام.بات
واردسازی شبکه.اچ تی تی پی
واردسازی شبکه.مسیریاب
واردسازی محیط
ناپایا راز := ""
تابع قلاب(ز: صحیح۶۴):
اگر اچ تی تی پی.سرصفحه(ز، بات.سرآیند راز) != راز:
اچ تی تی پی.تنظیم وضعیت(ز، ۴۰۱)
اچ تی تی پی.متن(ز، "")
برگشت
پایان
ب := بات.تجزیه بروزرسانی(اچ تی تی پی.بدنه(ز))
اگر وارونه ب.پیام دارد:
اچ تی تی پی.متن(ز، "")
برگشت
پایان
پ := ب.پیام
اچ تی تی پی.تنظیم سرصفحه(ز، "Content-Type"، "application/json")
اچ تی تی پی.متن(ز، بات.پاسخ پیام(پ.گفتگو.شناسه، "رسید: " + پ.متن))
پایان
تابع ریشه:
توکن := محیط.دریافت("TELEGRAM_TOKEN")
نشانی عمومی := محیط.دریافت("PUBLIC_URL")
راز = محیط.دریافت("WEBHOOK_SECRET")
اگر توکن.طول() == ۰ یا نشانی عمومی.طول() == ۰ یا راز.طول() == ۰:
سرچاپ "TELEGRAM_TOKEN و PUBLIC_URL و WEBHOOK_SECRET را تنظیم کنید"
برگشت ۱
پایان
ربات := بات.بات جدید(توکن)
تنظیم := بات.تنظیم وب هوک با رمز(ربات، نشانی عمومی + "/telegram"، راز)
اگر وارونه بات.موفق(تنظیم):
سرچاپ "تنظیم وب هوک شکست خورد:"، تنظیم.کد خطا، تنظیم.توضیح
برگشت ۱
پایان
ناپایا م := مسیریاب.مسیریاب جدید()
مسیریاب.ارسال(م، "/telegram"، قلاب)
ناپایا س := اچ تی تی پی.سرور جدید(۸۴۴۳)
اچ تی تی پی.استفاده(س، م)
سرچاپ "وب هوک روی درگاه ۸۴۴۳"
اچ تی تی پی.اجرا(س)
پایانجواب در بدنهی پاسخ برمیگردد: پاسخ پیام جیسون یک فراخوانی sendMessage را میسازد و تلگرام اجرایش میکند. وقتی حرفی برای گفتن نیست بدنه را خالی بگذارید، و زود جواب بدهید، چون تلگرام تا پاسخ نرسد بروزرسانی بعدی همان گفتگو را نمیفرستد. تلگرام فقط نشانیهای HTTPS روی درگاههای ۴۴۳، ۸۰، ۸۸ یا ۸۴۴۳ را صدا میزند؛ پس برنامه را پشت پراکسیای با گواهی، یا هنگام توسعه پشت یک تونل، اجرا کنید. تنظیم وب هوک با رمز بروزرسانیهای در انتظار را هم دور میریزد تا راهاندازی دوباره پیامهای کهنه را تکرار نکند.
گونهها
کاربر User
ساختار کاربر| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| شناسه | id | صحیح۶۴ = 0 | شناسه. |
| بات است | is_bot | منطقی = نادرست | بات است. |
| نام | first_name | رشته = "" | نام. |
| نام خانوادگی | last_name | رشته = "" | نام خانوادگی. |
| نام کاربری | username | رشته = "" | نام کاربری. |
| کد زبان | language_code | رشته = "" | زبان کاربر، مثل fa. |
واردسازی تلگرام.بات
تابع ریشه:
متن := `{"update_id":10,"message":{"message_id":5,"date":1700000000,"text":"/start hello","chat":{"id":42,"type":"private","first_name":"مریم","username":"maryam"},"from":{"id":42,"is_bot":false,"first_name":"مریم","language_code":"fa"},"reply_to_message":{"message_id":4,"from":{"id":7,"first_name":"علی"}}}}`
ب := بات.تجزیه بروزرسانی(متن)
سرچاپ ب.شناسه، ب.پیام دارد، ب.فشردن دکمه دارد
پ := ب.پیام
سرچاپ پ.شناسه پیام، پ.زمان، پ.متن، پ.گفتگو.شناسه، پ.گفتگو.نوع، پ.گفتگو.نام، پ.گفتگو.نام کاربری
سرچاپ پ.فرستنده.شناسه، پ.فرستنده.بات است، پ.فرستنده.کد زبان، پ.پیام پاسخدادهشده.شناسه پیام، پ.پیام پاسخدادهشده.شناسه کاربر، پ.پیام پاسخدادهشده.نام کاربر
سرچاپ بات.دستور است(پ.متن)، بات.نام دستور(پ.متن)، بات.آرگومان های دستور(پ.متن)
سرچاپ بات.دستور است("سلام")، بات.نام دستور("/help@my_bot")
همه := بات.تجزیه بروزرسانی ها(`{"ok":true,"result":[{"update_id":11,"callback_query":{"id":"cq1","data":"yes","from":{"id":42,"first_name":"مریم"},"message":{"message_id":9,"chat":{"id":42,"type":"private"}}}},{"update_id":12,"inline_query":{"id":"iq1","query":"کتاب","offset":"","from":{"id":42,"first_name":"مریم"}}}]}`)
سرچاپ همه.طول()
ق := همه[۰].فشردن دکمه
سرچاپ همه[۰].فشردن دکمه دارد، ق.شناسه، ق.داده، ق.کاربر.نام، ق.پیام دارد، ق.پیام.شناسه پیام
د := همه[۱].پرسمان درونخطی
سرچاپ همه[۱].پرسمان درونخطی دارد، د.شناسه، د.متن، د.جابجایی.طول()
سرچاپ بات.تجزیه کاربر(`{"id":1,"first_name":"x","last_name":"y","is_bot":true}`).نام خانوادگی
سرچاپ بات.تجزیه گفتگو(`{"id":-100,"type":"supergroup","title":"گروه"}`).عنوان
سرچاپ بات.تجزیه پیام(`{"message_id":1,"caption":"عکس","chat":{"id":1}}`).زیرنویس
سرچاپ بات.تجزیه پرسمان بازخوان(`{"id":"q","data":"d"}`).داده، بات.تجزیه پرسمان درون خطی(`{"id":"i","query":"q"}`).متن
سرچاپ بات.تجزیه بروزرسانی(`{"update_id":13,"channel_post":{"message_id":1,"text":"خبر","chat":{"id":-5}}}`).پست کانال.متن
ناپایا ردیف۱ := وکتور {} برگردان وکتور<رشته>
ردیف۱.افزودن(بات.دکمه درون خطی("بله"، "yes"))
ردیف۱.افزودن(بات.دکمه درون خطی("خیر"، "no"))
ناپایا ردیف۲ := وکتور {} برگردان وکتور<رشته>
ردیف۲.افزودن(بات.دکمه درون خطی با پیوند("سایت"، "https://salamlang.ir"))
ناپایا ردیفها := وکتور {} برگردان وکتور<رشته>
ردیفها.افزودن(بات.ردیف(ردیف۱))
ردیفها.افزودن(بات.ردیف(ردیف۲))
سرچاپ بات.صفحه کلید درون خطی(ردیفها)
ناپایا ساده := وکتور {} برگردان وکتور<رشته>
ساده.افزودن(بات.دکمه صفحه کلید("منو"))
ناپایا ردیفهای ساده := وکتور {} برگردان وکتور<رشته>
ردیفهای ساده.افزودن(بات.ردیف(ساده))
سرچاپ بات.صفحه کلید پاسخ(ردیفهای ساده)
سرچاپ بات.حذف صفحه کلید()، بات.پاسخ اجباری()
سرچاپ بات.دستور بات("start"، "شروع")
ربات := بات.بات جدید("123:ABC")
سرچاپ بات.پیوند فایل(ربات، "photos/file_1.jpg")
سرچاپ بات.پاسخ پیام(۴۲، "سلام")
ناپایا گ := بات.گزینه های ارسال {}
گ.قالب متن = "HTML"
گ.شناسه پیام پاسخ = ۵
گ.بیصدا = درست
سرچاپ بات.پاسخ پیام با گزینه ها(۴۲، "<b>سلام</b>"، گ)
سرچاپ بات.پاسخ فوری پرسمان بازخوان("cq1"، "ثبت شد"، نادرست)
سرچاپ بات.پاسخ کنش گفتگو(۴۲، "typing")
سرچاپ بات.پاسخ ویرایش متن پیام(۴۲، ۹، "بهروز شد"، بات.حذف صفحه کلید())
سرچاپ بات.سرآیند راز
پایانگفتگو Chat
ساختار گفتگو| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| شناسه | id | صحیح۶۴ = 0 | شناسه؛ برای گروهها منفی. |
| نوع | chat_type | رشته = "" | نوع: private، group، supergroup یا channel. |
| عنوان | title | رشته = "" | عنوان گروه یا کانال. |
| نام کاربری | username | رشته = "" | نام کاربری. |
| نام | first_name | رشته = "" | نام. |
| نام خانوادگی | last_name | رشته = "" | نام خانوادگی. |
نمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
پاسخ به ReplyTo
ساختار پاسخ به| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| شناسه پیام | message_id | صحیح۶۴ = 0 | شناسهی آن پیام. |
| شناسه کاربر | user_id | صحیح۶۴ = 0 | شناسهی فرستندهاش. |
| نام کاربر | user_name | رشته = "" | نام فرستندهاش. |
واردسازی تلگرام.بات
واردسازی محیط
تابع رسیدگی(ب: بات.بروزرسانی):
اگر وارونه ب.پیام دارد:
برگشت
پایان
سرچاپ ب.پیام.فرستنده.نام، ب.پیام.متن
پایان
تابع ریشه:
ربات := بات.بات جدید(محیط.دریافت("TELEGRAM_TOKEN"))
من := بات.دریافت من(ربات)
اگر وارونه بات.موفق(من):
سرچاپ من.کد خطا، من.توضیح، من.وضعیت اچ تی تی پی، من.خطای شبکه
برگشت
پایان
سرچاپ من.موفق، من.نتیجه
گفتگو := ۴۲ برگردان صحیح۶۴
_ := بات.ارسال پیام(ربات، گفتگو، "سلام")
_ := بات.ارسال پیام(ربات، "@my_channel"، "خبر تازه")
ناپایا گ := بات.گزینه های ارسال {}
گ.قالب متن = "Markdown"
گ.صفحهکلید = بات.حذف صفحه کلید()
_ := بات.ارسال پیام با گزینه ها(ربات، گفتگو، "*مهم*"، گ)
_ := بات.ارسال عکس(ربات، گفتگو، "https://example.com/a.jpg"، "عکس")
_ := بات.ارسال سند(ربات، گفتگو، "BQACAgQAAx"، "")
_ := بات.ارسال ویدیو(ربات، گفتگو، "https://example.com/v.mp4"، "")
_ := بات.ارسال صدا(ربات، گفتگو، "https://example.com/a.mp3"، "")
_ := بات.ارسال پیام صوتی(ربات، گفتگو، "AwACAgQ"، "")
_ := بات.ارسال استیکر(ربات، گفتگو، "CAACAgI")
_ := بات.ارسال موقعیت(ربات، گفتگو، ۳۵.۶۹۹۷، ۵۱.۳۳۸)
_ := بات.ارسال مخاطب(ربات، گفتگو، "+989120000000"، "علی")
_ := بات.ارسال کنش گفتگو(ربات، گفتگو، "typing")
_ := بات.ویرایش متن پیام(ربات، گفتگو، ۱۰، "ویرایش شد")
_ := بات.ارسال دوباره پیام(ربات، گفتگو، ۴۳، ۱۱)
_ := بات.سنجاق کردن پیام(ربات، گفتگو، ۱۰)
_ := بات.برداشتن سنجاق پیام(ربات، گفتگو، ۱۰)
_ := بات.حذف پیام(ربات، گفتگو، ۱۰)
_ := بات.پاسخ به پرسمان بازخوان(ربات، "cq1"، "ثبت شد")
_ := بات.پاسخ به پرسمان درون خطی(ربات، "iq1"، "[]")
پرونده := بات.دریافت فایل(ربات، "AgACAgQ")
سرچاپ پرونده.نتیجه.طول() > ۰
_ := بات.دریافت گفتگو(ربات، گفتگو)
_ := بات.تعداد اعضای گفتگو(ربات، گفتگو)
_ := بات.عضو گفتگو(ربات، گفتگو، ۷)
_ := بات.مسدود کردن عضو(ربات، گفتگو، ۷)
_ := بات.رفع مسدودیت عضو(ربات، گفتگو، ۷)
_ := بات.ترک گفتگو(ربات، -۱۰۰)
ناپایا دستورها := وکتور {} برگردان وکتور<رشته>
دستورها.افزودن(بات.دستور بات("start"، "شروع"))
_ := بات.تنظیم دستورات بات(ربات، دستورها)
_ := بات.تنظیم وب هوک(ربات، "https://example.com/hook")
_ := بات.تنظیم وب هوک با رمز(ربات، "https://example.com/hook"، "راز-من")
_ := بات.دریافت اطلاعات وب هوک(ربات)
_ := بات.حذف وب هوک(ربات)
ناپایا پارامتر := نگاشت {} برگردان نگاشت<رشته، رشته>
پارامتر.درج("chat_id"، "42")
_ := بات.فراخوان(ربات، "getChatAdministrators"، پارامتر)
ب := بات.دریافت بروزرسانی ها(ربات، ۰، ۱۰، ۳۰)
سرچاپ بات.تجزیه بروزرسانی ها(ب.نتیجه).طول()، ربات.توکن.طول() > ۰
بات.حلقه دریافت(ربات، ۳۰، (ب: بات.بروزرسانی):
رسیدگی(ب)
پایان)
پایانپیام Message
ساختار پیام| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| شناسه پیام | message_id | صحیح۶۴ = 0 | شناسه. |
| زمان | date | صحیح۶۴ = 0 | زمان بر حسب ثانیهی یونیکس. |
| گفتگو | chat | گفتگو | گفتگو. |
| فرستنده | from_user | کاربر | فرستنده. |
| متن | text | رشته = "" | متن. |
| زیرنویس | caption | رشته = "" | زیرنویس عکس یا پرونده. |
| پیام پاسخدادهشده | reply_to | پاسخ به | پیام پاسخدادهشده. |
نمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
پرسمان بازخوان CallbackQuery
ساختار پرسمان بازخوان| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| شناسه | id | رشته = "" | شناسه؛ با آن پاسخ دهید. |
| کاربر | from_user | کاربر | کاربر. |
| پیام | message | پیام | پیامی که دکمه در آن بود. |
| پیام دارد | has_message | منطقی = نادرست | پیام دارد. |
| داده | data | رشته = "" | دادهی دکمه. |
نمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
پرسمان درون خطی InlineQuery
ساختار پرسمان درون خطی@bot مینویسد.| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| شناسه | id | رشته = "" | شناسه. |
| کاربر | from_user | کاربر | کاربر. |
| متن | query | رشته = "" | متن. |
| جابجایی | offset | رشته = "" | جای صفحهبندی. |
نمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
بروزرسانی Update
ساختار بروزرسانی| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| شناسه | update_id | صحیح۶۴ = 0 | شناسه؛ برای دریافت بروزرسانی ها بعدی یکی بیشتر بدهید. |
| پیام | message | پیام | پیام. |
| پیام دارد | has_message | منطقی = نادرست | پیام دارد. |
| پست کانال | channel_post | پیام | پست کانال. |
| پست کانال دارد | has_channel_post | منطقی = نادرست | پست کانال دارد. |
| فشردن دکمه | callback_query | پرسمان بازخوان | فشردن دکمه. |
| فشردن دکمه دارد | has_callback_query | منطقی = نادرست | دکمه دارد. |
| پرسمان درونخطی | inline_query | پرسمان درون خطی | پرسمان درونخطی. |
| پرسمان درونخطی دارد | has_inline_query | منطقی = نادرست | پرسمان درونخطی دارد. |
نمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
پاسخ ای پی آی ApiResponse
ساختار پاسخ ای پی آی| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| موفق | ok | منطقی = نادرست | موفق بود. |
| نتیجه | result | رشته = "" | نتیجه به شکل جیسون. |
| توضیح | description | رشته = "" | توضیح خطا. |
| کد خطا | error_code | صحیح۶۴ = 0 | کد خطای تلگرام. |
| وضعیت اچ تی تی پی | http_status | صحیح = 0 | کد وضعیت HTTP. |
| خطای شبکه | http_err | رشته = "" | خطای شبکه. |
نمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
گزینه های ارسال SendOptions
ساختار گزینه های ارسال| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| قالب متن | parse_mode | رشته = "" | قالب متن: HTML یا MarkdownV2. |
| بیصدا | disable_notification | منطقی = نادرست | بی صدا فرستاده شود. |
| شناسه پیام پاسخ | reply_to_message_id | صحیح۶۴ = 0 | پاسخ به این پیام. |
| صفحهکلید | reply_markup | رشته = "" | صفحهکلید به شکل جیسون. |
نمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
بات Bot
ساختار بات| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| توکن | token | رشته = "" | توکن از BotFather؛ آن را پنهان نگه دارید. |
نمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
پایاها و متغیرها
سرآیند راز SECRET_HEADER
پایا سرآیند راز: رشته = "X-Telegram-بات-Api-Secret-Token"واردسازی تلگرام.بات
واردسازی شبکه.اچ تی تی پی
واردسازی شبکه.مسیریاب
تابع وبهوک(ز: صحیح۶۴):
اگر اچ تی تی پی.سرصفحه(ز، بات.سرآیند راز) != "راز-من":
اچ تی تی پی.تنظیم وضعیت(ز، ۴۰۳)
اچ تی تی پی.متن(ز، "forbidden")
برگشت
پایان
ب := بات.تجزیه بروزرسانی(اچ تی تی پی.بدنه(ز))
اگر ب.پیام دارد و بات.دستور است(ب.پیام.متن):
پاسخ := "دستور " + بات.نام دستور(ب.پیام.متن) + " رسید"
اچ تی تی پی.جیسون(ز، بات.پاسخ پیام(ب.پیام.گفتگو.شناسه، پاسخ))
وگرنه ب.فشردن دکمه دارد:
اچ تی تی پی.جیسون(ز، بات.پاسخ فوری پرسمان بازخوان(ب.فشردن دکمه.شناسه، "باشه"، درست))
وگرنه:
اچ تی تی پی.متن(ز، "ok")
پایان
پایان
تابع ریشه:
ناپایا م := مسیریاب.مسیریاب جدید()
مسیریاب.ارسال(م، "/hook"، وبهوک)
ناپایا س := اچ تی تی پی.سرور جدید(۱۹۶۱۲)
اچ تی تی پی.استفاده(س، م)
_ := اچ تی تی پی.اجرا در پس زمینه(س)
ناپایا سر := اچ تی تی پی.سرصفحه جدید()
سر.درج(بات.سرآیند راز، "راز-من")
سر.درج("Content-Type"، "application/json")
پ := اچ تی تی پی.ارسال با("http://127.0.0.1:19612/hook"، `{"update_id":1,"message":{"message_id":2,"text":"/start","chat":{"id":42,"type":"private"}}}`، سر)
سرچاپ اچ تی تی پی.وضعیت(پ)، اچ تی تی پی.بدنه(پ)
پ۲ := اچ تی تی پی.ارسال با("http://127.0.0.1:19612/hook"، `{"update_id":2,"callback_query":{"id":"cq9","data":"x","from":{"id":42}}}`، سر)
سرچاپ اچ تی تی پی.بدنه(پ۲)
پ۳ := اچ تی تی پی.ارسال("http://127.0.0.1:19612/hook"، "{}")
سرچاپ اچ تی تی پی.وضعیت(پ۳)
پایانتابعها
تنظیم وب هوک با رمز SetWebhookSecret
تابع تنظیم وب هوک با رمز(bot: بات، url: رشته، secret_token: رشته): پاسخ ای پی آیسرآیند راز میفرستد؛ با آن درخواستهای جعلی را رد کنید.نمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
پاسخ پیام ReplyMessage
تابع پاسخ پیام(chat_id: صحیح۶۴، text: رشته): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Webhook.salam
پاسخ پیام با گزینه ها ReplyMessageOptions
تابع پاسخ پیام با گزینه ها(chat_id: صحیح۶۴، text: رشته، opts: گزینه های ارسال): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
پاسخ ویرایش متن پیام ReplyEditMessageText
تابع پاسخ ویرایش متن پیام(chat_id: صحیح۶۴، message_id: صحیح۶۴، text: رشته، reply_markup: رشته): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
پاسخ فوری پرسمان بازخوان ReplyAnswerCallbackQuery
تابع پاسخ فوری پرسمان بازخوان(callback_query_id: رشته، text: رشته، show_alert: منطقی): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Webhook.salam
پاسخ کنش گفتگو ReplyChatAction
تابع پاسخ کنش گفتگو(chat_id: صحیح۶۴، action: رشته): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
تجزیه کاربر ParseUser
تابع تجزیه کاربر(raw: رشته): کاربرنمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
تجزیه گفتگو ParseChat
تابع تجزیه گفتگو(raw: رشته): گفتگونمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
تجزیه پیام ParseMessage
تابع تجزیه پیام(raw: رشته): پیامنمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
تجزیه پرسمان بازخوان ParseCallbackQuery
تابع تجزیه پرسمان بازخوان(raw: رشته): پرسمان بازخواننمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
تجزیه پرسمان درون خطی ParseInlineQuery
تابع تجزیه پرسمان درون خطی(raw: رشته): پرسمان درون خطینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
تجزیه بروزرسانی ParseUpdate
تابع تجزیه بروزرسانی(raw: رشته): بروزرسانینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
تجزیه بروزرسانی ها ParseUpdates
تابع تجزیه بروزرسانی ها(raw: رشته): وکتور<بروزرسانی>getUpdates را به فهرست بروزرسانیها تبدیل میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
بات جدید NewBot
تابع بات جدید(token: رشته): باتنمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
موفق Ok
تابع موفق(resp: پاسخ ای پی آی): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
فراخوان Call
تابع فراخوان(bot: بات، method: رشته، params: نگاشت<رشته، رشته>): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
دریافت من GetMe
تابع دریافت من(bot: بات): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
دریافت بروزرسانی ها GetUpdates
تابع دریافت بروزرسانی ها(bot: بات، offset: صحیح۶۴، limit: صحیح۶۴، timeout: صحیح۶۴): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
ارسال پیام SendMessage
تابع ارسال پیام(bot: بات، chat_id: صحیح۶۴، text: رشته): پاسخ ای پی آی@channel.نمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
ارسال پیام SendMessage
تابع ارسال پیام(bot: بات، chat_id: رشته، text: رشته): پاسخ ای پی آی@channel.نمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
ارسال پیام با گزینه ها SendMessageOptions
تابع ارسال پیام با گزینه ها(bot: بات، chat_id: صحیح۶۴، text: رشته، opts: گزینه های ارسال): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
ارسال عکس SendPhoto
تابع ارسال عکس(bot: بات، chat_id: صحیح۶۴، photo: رشته، caption: رشته): پاسخ ای پی آیfile_id عکسی که تلگرام از قبل دارد، همراه زیرنویس، میفرستد. بارگذاری پروندهی محلی پشتیبانی نمیشود.نمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
ارسال سند SendDocument
تابع ارسال سند(bot: بات، chat_id: صحیح۶۴، document: رشته، caption: رشته): پاسخ ای پی آیfile_id، همراه زیرنویس، میفرستد. بارگذاری پروندهی محلی پشتیبانی نمیشود.نمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
ارسال ویدیو SendVideo
تابع ارسال ویدیو(bot: بات، chat_id: صحیح۶۴، video: رشته، caption: رشته): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
ارسال صدا SendAudio
تابع ارسال صدا(bot: بات، chat_id: صحیح۶۴، audio: رشته، caption: رشته): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
ارسال پیام صوتی SendVoice
تابع ارسال پیام صوتی(bot: بات، chat_id: صحیح۶۴، voice: رشته، caption: رشته): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
ارسال استیکر SendSticker
تابع ارسال استیکر(bot: بات، chat_id: صحیح۶۴، sticker: رشته): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
ارسال موقعیت SendLocation
تابع ارسال موقعیت(bot: بات، chat_id: صحیح۶۴، latitude: اعشار۶۴، longitude: اعشار۶۴): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
ارسال مخاطب SendContact
تابع ارسال مخاطب(bot: بات، chat_id: صحیح۶۴، phone_number: رشته، first_name: رشته): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
ارسال کنش گفتگو SendChatAction
تابع ارسال کنش گفتگو(bot: بات، chat_id: صحیح۶۴، action: رشته): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
ویرایش متن پیام EditMessageText
تابع ویرایش متن پیام(bot: بات، chat_id: صحیح۶۴، message_id: صحیح۶۴، text: رشته): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
حذف پیام DeleteMessage
تابع حذف پیام(bot: بات، chat_id: صحیح۶۴، message_id: صحیح۶۴): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
ارسال دوباره پیام ForwardMessage
تابع ارسال دوباره پیام(bot: بات، chat_id: صحیح۶۴، from_chat_id: صحیح۶۴، message_id: صحیح۶۴): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
سنجاق کردن پیام PinChatMessage
تابع سنجاق کردن پیام(bot: بات، chat_id: صحیح۶۴، message_id: صحیح۶۴): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
برداشتن سنجاق پیام UnpinChatMessage
تابع برداشتن سنجاق پیام(bot: بات، chat_id: صحیح۶۴، message_id: صحیح۶۴): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
پاسخ به پرسمان بازخوان AnswerCallbackQuery
تابع پاسخ به پرسمان بازخوان(bot: بات، callback_query_id: رشته، text: رشته): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
پاسخ به پرسمان درون خطی AnswerInlineQuery
تابع پاسخ به پرسمان درون خطی(bot: بات، inline_query_id: رشته، results: رشته): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
دریافت فایل GetFile
تابع دریافت فایل(bot: بات، file_id: رشته): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
پیوند فایل FileURL
تابع پیوند فایل(bot: بات، file_path: رشته): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
دریافت گفتگو GetChat
تابع دریافت گفتگو(bot: بات، chat_id: صحیح۶۴): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
تعداد اعضای گفتگو GetChatMemberCount
تابع تعداد اعضای گفتگو(bot: بات، chat_id: صحیح۶۴): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
عضو گفتگو GetChatMember
تابع عضو گفتگو(bot: بات، chat_id: صحیح۶۴، user_id: صحیح۶۴): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
ترک گفتگو LeaveChat
تابع ترک گفتگو(bot: بات، chat_id: صحیح۶۴): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
مسدود کردن عضو BanChatMember
تابع مسدود کردن عضو(bot: بات، chat_id: صحیح۶۴، user_id: صحیح۶۴): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
رفع مسدودیت عضو UnbanChatMember
تابع رفع مسدودیت عضو(bot: بات، chat_id: صحیح۶۴، user_id: صحیح۶۴): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
تنظیم وب هوک SetWebhook
تابع تنظیم وب هوک(bot: بات، url: رشته): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
حذف وب هوک DeleteWebhook
تابع حذف وب هوک(bot: بات): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
دریافت اطلاعات وب هوک GetWebhookInfo
تابع دریافت اطلاعات وب هوک(bot: بات): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
دستور بات BotCommand
تابع دستور بات(command: رشته، description: رشته): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
تنظیم دستورات بات SetMyCommands
تابع تنظیم دستورات بات(bot: بات، commands: وکتور<رشته>): پاسخ ای پی آینمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam
دکمه درون خطی InlineButton
تابع دکمه درون خطی(text: رشته، callback_data: رشته): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
دکمه درون خطی با پیوند InlineButtonURL
تابع دکمه درون خطی با پیوند(text: رشته، url: رشته): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
دکمه صفحه کلید KeyboardButton
تابع دکمه صفحه کلید(text: رشته): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
ردیف Row
تابع ردیف(buttons: وکتور<رشته>): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
صفحه کلید درون خطی InlineKeyboardMarkup
تابع صفحه کلید درون خطی(rows: وکتور<رشته>): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
صفحه کلید پاسخ ReplyKeyboardMarkup
تابع صفحه کلید پاسخ(rows: وکتور<رشته>): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
حذف صفحه کلید RemoveKeyboard
تابع حذف صفحه کلید(): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
پاسخ اجباری ForceReply
تابع پاسخ اجباری(): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
دستور است IsCommand
تابع دستور است(text: رشته): منطقی/ آغاز میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
نام دستور CommandName
تابع نام دستور(text: رشته): رشته/ و بی @bot.نمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
آرگومان های دستور CommandArgs
تابع آرگومان های دستور(text: رشته): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Parse.salam
حلقه دریافت Poll
تابع حلقه دریافت(bot: بات، timeout: صحیح۶۴، handler: تابع(بروزرسانی))نمونهی این مورد همراه با موارد بالاتر آمده است: telegram-bot-Bot.salam