اگر مايليد نوتيفيكيشن هاي تلگرام را از برنامه خود ارسال كنيد ، به مكان مناسبي آمده ايد و من اين ويژگي را به برنامه خود اضافه كردم و آن را دوست دارم.
يك يادداشت سريع در اين مقاله نمونه هايي از كد را در پايتون ارائه مي كنم، اما ايده ها مختص پايتون نيستند و بدون هيچ عجله اي مي توانند به زبان ديگري نيز ترجمه شوند.
بنابراين بدون آزار و اذيت بيشتر ، نحوه ارسال نوتيفيكيشن در ربات تلگرام را توضيح خواهيم داد.
يكي ديگر از اطلاعاتي كه به دست مي آوريم نام كاربري است، اين بسيار مفيد است زيرا بين همه كاربران تلگرام بي نظير است، اما به احتمال زياد آن را در برنامه هاي خود نداريد، بنابراين ما بايد از يك كاربر بخواهيم نام كاربري خود را در جايي از برنامه وارد كند. اين كار خيلي زياد است كه من مطمئن نيستم كسي انجام دهد.
گزينه ديگر براي همراهي كاربر اين است كه از آنها بخواهيد ايميلي را كه در برنامه شما استفاده كرده اند به ربات ارائه دهند، اما اين داراي نقص هاي بسيار زيادي است: كاربر مي تواند ضمن وارد كردن ايميل تايپي را ايجاد كند ، كاربر مي تواند ايميل كاربر ديگري را وارد كرده و از سيستم سوءاستفاده كند. اين خيلي بد است
آيا مي توانيم بهتر عمل كنيم؟
با استفاده از يك كاربر
البته كه ميتونيم. براي ارتباط كاربر ، از تكنيكي به نام پيوند عميق استفاده خواهيم كرد.
ابتدا بايد يك علامت تصادفي منحصر به فرد براي هر كاربر ايجاد كنيد، من از كد زير براي توليد توكن با استفاده از پايتون استفاده كرده ام:
from secrets import token_urlsafetoken = token_urlsafe(٨)token# => 'uEDbtJFHxKc'
يك ربات تلگرام ايجاد كنيد
اول از همه ، شما نياز به ايجاد يك ربات تلگرام داريد، براي اين كار بايد از يك ربات تلگرام استفاده كنيد، ميتوانيد از BotFather استفاده كنيد.
تبليغات در كانال هاي پربازديد تلگرام
اكنون مي بينيد كه چه كاري مي تواند انجام دهد. اما آنچه مورد علاقه ماست ايجاد يك چيز جديد نيست ، بنابراين اين چيزي است كه ما مي خواهيم انتخاب كنيم (/newbot).
تبليغات در كانال هاي پربازديد تلگرام
شما به سرعت مي فهميد كه نام ربات بايد به "bot" ختم شود. و از آنجا كه شما مثل من هستيد و خيلي دير به بازي مي آييد ، بيشتر نامهاي ربات قبلاً گرفته شده است.
تبليغات در كانال هاي پربازديد تلگرام
اما در نهايت ، شما مي خواهيد يك نام براي ربات خود پيدا كنيد و يك نشانه دسترسي را كه ما به آن نياز داريم دريافت كنيد.
اكنون كه يك ربات داريد ، كاربران تلگرام مي توانند آن را پيدا كرده و از آن استفاده كنند. اما يك مشكل وجود دارد، شما نمي توانيد كاربراني را كه از تلگرام به كاربران برنامه شما وارد مي شوند مرتبط كنيد. بگذاريد به شما نشان دهيم چرا؟
هنگامي كه دكمه "شروع" را روي ربات خود فشار داد ، "بروزرساني" دريافت خواهيد كرد، با مراجعه به لينك زير مي توانيد تمام به روزرساني هاي bot را حتي در مرورگر خود بررسي كنيد.
URL https://api.telegram.org/bot{bot_token}/getUpdates
(فراموش نكنيد كه از نشانه دسترسي خود در URL استفاده كنيد)
نمي توانيد چيزي بخوانيد؟ نگران نباش با نصب برخي از پسوند پيشراننده JSON در مرورگر خود مي توانيد آن را تعمير كنيد، من از JSON Formatter براي كروم استفاده مي كنم، به نظر خيلي بهتر مياد.
تبليغات در كانال هاي پربازديد تلگرام
بنابراين همانطور كه مي بينيد ما اطلاعات زيادي در مورد شخص دريافت نمي كنيم. از اين اطلاعات مي توانيم نام كامل آنها را بدست آوريم. اما خوشبختانه اگر كاربر نام كامل خود را در برنامه شما ارائه دهد ، و منحصر به فرد بودن آن را تضمين نمي كند. بنابراين ما نمي توانيم از آن استفاده كنيم تا كاربر را در برنامه هاي شما پيدا كنيم.
صفحه https://api.telegram.org/bot{bot_token}/getUpdates ما يك نظرسنجي انجام داديم، نظرسنجي به طور مرتب ، به عنوان مثال هر ٢ ثانيه به روزرساني ها را بررسي مي كند. از اين طريق هميشه مي توانيم بدانيم چه كسي با ربات تعامل داشته است.
صفحات وب اندكي از روش ديگر استفاده مي كنند، به جاي بررسي هر ٢ ثانيه براي به روزرساني ها ، فقط منتظر مي مانيم يك بروزرساني اتفاق بيفتد، و هنگامي كه اتفاق مي افتد تلگرام با داده هاي به روزرساني درخواستي را به URL اي كه مشخص كرده ايم ارسال مي كند، به اين ترتيب مي توانيم به سرورهاي خودمان و تلگرام كمي استراحت بدهيم و فقط منتظر بمانيم تا بروزرساني به دست بيايد
اگر ترافيك بالايي داشته باشيد ، نظرسنجي مي تواند بهتر باشد ، اما متأسفانه ، اين يك استثناء است ، بنابراين تصميم گرفته ام تا با صفحات وب برويم.
صفحات وب
تنظيم يك صفحه وب در تلگرام بسيار آسان است، شما فقط نياز به ارسال درخواست داريد.
به https://api.telegram.org/bot{bot_token}/setWebhook؟url={your_server_url. باز كردن اين پيوند در مرورگر شما نيز كار مي كند. your_server_url URL است كه تلگرام به روزرساني ها را براي آنها ارسال مي كند. در اينجا آنچه بايد در پاسخ دريافت كنيد:
{ "ok": true, "result": true, "description": "Webhook was set"}
اگر به خودتان اعتماد نكنيد مي توانيد:
فقط براي ترديد در اين مورد به https://api.telegram.org/bot{bot_token}/getWebhookInfo مراجعه كنيد تا همه چيز خوب باشد، شما بايد چيزي شبيه به اين را ببينيد:
{ "ok": true, "result": { "url": "https://example.com/your_server_endpoint", "has_custom_certificate": false, "pending_update_count": ۰, "max_connections": ۴۰ }}
اكنون. اگر چيزي درستي نبود (مانند URL خطايي تنظيم كرده ايد) ، مي توانيد با مراجعه به https://api.telegram.org/bot{bot_token}/deleteWebhook ، وب سايت را حذف كنيد و دوباره تنظيم كنيد.
توسعه محلي
قبل از ادامه مي خواهم چند كلمه در مورد توسعه محلي بگويم، وب سايت ها براي آن بسيار مناسب نيستند و صفحات وب به URL ارسال مي شوند و به احتمال زياد URL اينترنتي رايانه خود را نمي شناسيد. همچنين ، يك وب سايت Telegram به مجوز HTTPSنياز دارد.
اما يك راه حل براي اين مشكل وجود دارد، ngrok ابزاري است كه محيط محلي شما را در معرض ديد جهانيان قرار مي دهد، ngrok را بارگيري كنيد ، آن را نصب كنيد و آن را با درگاهي كه سرور شما در آن كار مي كند شروع كنيد. سرور من روي درگاه ٨۰۰۰ كار مي كند ، بنابراين نياز به اجراي آن در يك كنسول دارم.
/path/to/ngrok http ٨۰۰۰
سپس ngrok بايد URL به شما بدهد كه مي توانيد براي تنظيم يك وب سايت استفاده كنيد.
استقبال كاربر
اكنون كه شما آماده توسعه هستيد ، به جمع كاربران ما خوش آمديد، چيزي كه آنه منتظر آن هستند.
پس از كليك كاربر روي "شروع" ، تلگرام شما به روزرساني را به آدرس URL سرور شما ارسال مي كند، قسمت هاي جالب بروزرساني بايد به صورت زير باشد:
{ "message": { "********": { "id": ۴۵٧ }, "text": "/start uEDbtJFHxKc", }}
اين زمان مناسب براي ارتباط كاربر با استفاده از متن پيام است، همچنين يك بخش جالب از اطلاعات ، ID ******** وجود دارد، شناسه ******** همان چيزي است كه ما براي ارسال پيام به آن كاربر نياز داريم. تلگرام داراي API انتهايي براي ارسال پيام است.
https://api.telegram.org/bot{bot_token}/sendMessage؟********_id={********_id}&text={text
سپس بايد آن توكن را ذخيره كنيد تا بعداً بتوانيد كاربر را با آن پيدا كنيد، مي توانيد آن را در پايگاه داده خود ذخيره كنيد يا به عنوان مثال از مكاني ديگر استفاده كنيد، من يك مدل نوتيفيكيشن دارم ، بنابراين فيلدي را به جدول مدل اضافه كردم.
class Notification(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) # ... connect_token = models.CharField(max_length=۶۴, null=True)
بنابراين ما توكن uEDbtJFHxKc ايجاد كرده و آن را ذخيره كرده ايم، اكنون ما بايد از اين توكن در URL به ربات تلگرام استفاده كنيم كه كاربر براي كليك بر روي آن بايد كليك كند تا همه كار انجام شود:
telegram_url = 'https://www.telegram.me'bot_name = 'music_notification_bot'token = 'uEDbtJFHxKc'url = f'{telegram_url}/{bot_name}?start={token}'
حالا كه ما داريم
URL, 'https://telegram.me/music_notification_bot?start=uEDbtJFHxKc'
وقت آن است كه آن را به كاربر نشان دهيم، فقط آن را در هر مكاني از برنامه خود نمايش داده و منتظر بمانيد تا كاربر روي آن كليك كند.
هنگامي كه كاربر روي "شروع" كليك كرد ، بايد يك بروزرساني ديگر را دريافت كنيد:
{ "ok": true, "result": [ // ... // previous updates // ... { "update_id": ۵٩٩١۶٢٣۶۵, "message": { "message_id": ١٧۴, "from": { ... }, "********": { ... }, "date": ١۵۴٩٧٨٨٣۵٧, "text": "/start uEDbtJFHxKc", "entities": [ ... ] } } ]}
در نهايت مي توانيم كاربر خود را شناسايي كنيم. اكنون قسمت متن حاوي نشان كاربر است. بياييد جلو برويم و آن را از اين زمينه خارج كنيم:۰
bot_token = 'your_bot_token'updates_url = f'https://api.telegram.org/bot{bot_token}/getUpdates'import requestsresponse = requests.get(updates_url).json()text = response['result'][۰]['message']['text']text# => '/start uEDbtJFHxKc'splitted_text = text.split(' ')# => ['/start', 'uEDbtJFHxKc']token = splitted_text[-١]# => 'uEDbtJFHxKc'
از اين توكن مي توان براي يافتن كاربر استفاده كرد، اجراي شما بستگي به نحوه ذخيره توكن در وهله اول دارد، اما نحوه انجام اين كار به شرح زير است:
notification = Notification.objects.get(channel='telegram', connect_token=token)user = notification.user
بنابراين كاربر دكمه "شروع" را كليك كرده بود، اما آنها مي بينند كه هيچ اتفاقي نيفتاده است، بياييد حداقل از آنها استقبال كنيم.
براي استقبال از كاربر ، بايد بدانيم كه كاربر مكالمه اي را با ربات ما آغاز كرده است، دو روش براي چگونگي انجام اين كار وجود دارد: نظرسنجي و صفهات وب.
شما در حال حاضر مي دانيد كه نظرسنجي چيست، شما قبلاً اين كار را كرده ايد يا حداقل ديده ام كه اين كار را انجام دهم.
چهارشنبه ۲۶ آذر ۹۹ | ۰۸:۵۱ ۲۹ بازديد
تا كنون نظري ثبت نشده است