کسب و کار

کسب و کار,بازاریابی

ساخت ربات تلگرام: ۳ روش رایگان و آسان ساخت ربات تلگرام

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

ساخت ربات تلگرام

۳ روش ساخت ربات تلگرام که بسیار ساده هستند در ذیل آمده‌اند:

روش اول ساخت ربات تلگرام:

چگونه یک ربات تلگرام بسازیم و گسترش دهیم؟

در این مطلب آموزشی،‌ قصد داریم ساخت ربات تلگرام را با استفاده از زبان برنامه‌نویسیPython  به شما آموزش دهیم و در سرور هروکو گسترش دهیم.

در ظاهر، تلگرام نیز فقط یک برنامه‌ی‌ پیام‌رسان است مانند سایر این قبیل برنامه‌ها. این برنامه خود را به عنوان برنامه‌ای امن، سریع، بدون تبلیغات، و غیره و غیره در میان عموم جا داده است. با وجود این، تلگرام دارای یک ویژگی است که مطمئنا این برنامه را از سایر برنامه‌های مشابه‌اش متمایز می‌کند. و آن ربات‌ها هستند!

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

انجام این کار بدون ربات:

الف. یوتیوب را در مرورگرتان باز می‌کنید.
ب. به دنبال ویدیویی می‌گردید که می‌خواهید به اشتراک بگذارید.
پ. گزینه‌ی اشتراک توسط … (share via…) را انتخاب می‌کنید (البته باید امیدوار باشید برنامه‌تان در فهرست به اشتراک‌گذاری‌ّهای یوتیوب (YouTube sharing list) وجود داشته باشد.
ت. از کاربرد گزینه‌ی share via…منصرف می‌شوید و روش سنتی کپی پیست را انتخاب می‌کنید.
ث. بعد از کپی کردن آدرس لینک، به برنامه‌ی پیام‌رسان‌تان بر می‌گردید، و در نهایت لینک ویدئو را به اشتراک می‌گذارید.
ج. هوووررراااا … بالاخره موفق شدید

مطلب مرتبط: بهترین کانال های تلگرام خارجی

انجام این کار با کمک ربات:

الف. شما در حال معاشرت و برقراری ارتباط با دیگران در برنامه‌ی پیام‌رسان‌تان هستید.
ب. @vid را به همراه کلید واژه‌ی ویدئویی که دنبال‌اش هستید و می‌خواهید به اشتراک بگذارید، تایپ می‌کنید.
پ. دکمه‌ی بازگشت را می‌زنید.
ت. همین!

این روش نسبت به روش قبل بسیار بهتر، کاربر پسند‌تر، و کم‌تر وقت‌گیر است. این تنها یکی از نمونه‌های فراوان از قابلیت‌های ربات‌ها است.

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

برای ساخت اولین ربات باید چه کارهایی انجام دهید؟

اول از همه ( که خیلی هم واضح است) این‌که باید در تلگرام ثبت نام کنید. پیشنهاد می‌کنیم برای آزمودن مفاهیم اصلی و اولیه‌ی این کار از طریق سایت تلگرام اقدام کنید (البته اگر به اندازه‌ی کافی انگلیسی بلد باشید).

بعد از همه‌ی کارهای اولیه و باز کردن حساب و وارد کردن آن در برنامه‌ی تلگرام،@BotFather   را در برنامه جستجو  و سپس آن را انتخاب کنید و واردش شوید. در پایین صفحه روی گزینه‌ی start کلیک کنید. سپس صفحه‌ای باز می‌شود که در آن باید دستور /newbot  را وارد کنید و طبق دستورالعمل، اول نام، و سپس یک نام کاربری انحصاری را که پایان آن کلمه‌ی bot داشته باشد، انتخاب کنید . پس از انجام مراحل اولیه، شما دارای:

الف. یک رمز (توکن/token) مخصوص به خود
ب. یک آدرس وب (url) رابطه برنامه‌نویسی کاربردی (api) تلگرام – https://api.telegram.org/bot
پ. و یک پیوند (لینک) برای ثبت اسناد و تصاویر و غیره هستید.

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

مطلب مرتبط:‌ چگونه بفهمیم چه کسانی دسترسی به تلگرام ما دارند؟

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

اگر این اولین تجربه‌تان در ساخت APIها است، به آسانی می‌توانید با استفاده از مرورگر وب‌تان به خوبی این مطلب را درک کنید. یک تب جدید در مرورگرتان باز کنید و URL api تلگرام زیر را استفاده نمایید –

https://api.telegram.org/bot<token>/getUpdates

وقتی این URL را در مرورگرتان باز می‌کنید، به سرور تلگرام درخواست می‌فرستید، و پاسخ این درخواست توسط JSON داده می‌شود. این پاسخ شبیه دیکشنری Python است. در این صورت، باید چیزی شبیه این را مشاهده کنید:

{"ok":true,"result":[{"update_id":523349956,
"message":{"message_id":51,"from":
{"id":303262877,"first_name":"YourName"},"chat":
{"id":303262877,"first_name":"YourName","type":"private"},"date":148
۶۸۲۹۳۶۰,"text":"Hello"}}]}

اگر صفحه‌ی ربات را باز کنید و بخش روش /sendMessage  را بررسی کنید، مشاهده خواهید کرد این روش نیازمند دو پارامتر اضافی chat_id  و text است. در بخش سرچ مرورگرتان می‌توانید با استفاده از ? برای اولین مورد، و با استفاده از & برای موارد بعدی پارامترها را به هم متصل کنید. ارسال پیام ممکن است به این شکل باشد –

/sendMessage?chat_id=303262877&text=test

با جا به جاییchat_id  با آن‌چه توسط /getUpdates به دست آوردید، سعی کنید از طرف ربات‌تان پاسخی دریافت کنید. در این مثال، کد مورد نظر ۳۰۳۲۶۲۸۷۷ است. انتخاب پارامتر متنی هم به خودتان بستگی دارد. این درخواست شاید شبیه این باشد –

https://api.telegram.org/bot/sendMessage?chat_id=303262877&text=Hello

بخش برنامه‌نویسی (تقریبا!)

اگر از ویندوز استفاده می‌کنید و Python را نصب ندارید، می‌توانید از این‌جا دریافت کنید.

مهم نیست نسخه‌ی ۲٫x را داشته باشید یا ۳٫x، ولی در این مقاله قصد داریم به عنوان مثال از ۳٫x استفاده کنیم.

اگر از لینوکس یا مک استفاده می‌کنید به احتمال فراوان هر دو نسخه یا حداقل نسخه‌ی ۲٫x را نصب شده دارید.

مرحله‌ی بعد نصب پیپ است. Python 2.7.9 به بالا، و Python 3.4   به بالا نیز به طور پیش فرض دارای پیپ هستند.

هم‌چنین در مک یا لینوکس نیز ممکن است این برنامه به صورت نصب شده وجود داشته باشد. می‌توانید با استفاده از دستور pip — version در ترمینال این مسئله را بررسی کنید.

اگر به هر دلیل پیپ را ندارید، می‌توانید آن را با استفاده از دستور زیر در لینوکس دبیان نصب کنید:

$ sudo apt-get install python-pip

بخش بد این ماجرا این است که نسخه‌های متفاوت Python هر کدام پیپ مخصوص به خودشان را استفاده می‌کنند.

در سیستم عامل مک می‌توانید این دستورالعمل را از این‌جا امتحان کنید

در ویندوز، get-pip.py را دانلود کنید، cmd را باز کنید، به دایرکتوری‌ای بروید که فایل را در آن ذخیره کرده‌اید و دستور زیر را اجرا کنید –

$ python get-pip.py

این سخت‌ترین قسمت این کار بود.

سپس باید با استفاده از پیپ، بسته‌ی درخواست‌ها (requests package) را نصب کنید. از دستور زیر پیروی کنید –

$ pip install requests

مرحله‌ی بعد اختیاری است ولی کمک بزرگی خواهد بود. PyCharm را دانلود کنید، عالی است.

ساخت ربات تلگرام: بخش برنامه‌نویسی

اگر مفهوم API برای‌تان واضح است و تمام ابزارهای لازم را در اختیار دارید، پس وارد عمل شوید و اجازه دهید اول، اسکریپت Python را به منظور بررسی به روز رسانی‌ها و فرستادن پاسخ با متن دلخواه‌مان تهیه کنیم.

اول از همه، ربات‌مان باید دنبال به روز رسانی باشد. پیام‌مان ممکن است به عنوان آخرین به روز رسانی تلقی شود. با وجود این getUpdates همه‌ی به روز رسانی‌های ۲۴ ساعت گذشته را بر می‌گرداند. پس باید اسکریپت کوتاهی برای رسیدن به آخرین به روز رسانی ایجاد کنیم.

import requests
url = "https://api.telegram.org/bot/"
def get_updates_json(request):  
    response = requests.get(request + 'getUpdates')
    return response.json()
def last_update(data):  
    results = data['result']
    total_updates = len(results) - 1
    return results[total_updates]

دیکشنری به روز رسانی شامل دو عنصر “ok” و “results” (نتایج) است. شخصا به بخش “results” علاقه‌مند هستیم زیرا فهرستی از همه‌ی به روز رسانی‌هایی است که ربات‌مان در ۲۴ ساعت گذشته دریافت کرده است.

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

مرحله‌ی بعدی اضافه کردن ۲ تابع بیش‌تر است. مورد اول chat_id  را از به روز رسانی دریافت می‌کند و مورد دوم پیام ارسال می‌نماید.

def get_chat_id(update):  
    chat_id = update['message']['chat']['id']
    return chat_id
def send_mess(chat, text):  
    params = {'chat_id': chat, 'text': text}
    response = requests.post(url + 'sendMessage', data=params)
    return response
chat_id = get_chat_id(last_update(get_updates_json(url)))
send_mess(chat_id, 'Your message goes here')

یادتان می‌آید پارامترها را به کمک “?” و “&” به هم متصل می‌کردید؟ همین کار را می‌توانید با افزودن dict به عنوان پارامتر اختیاری دوم برای درخواست‌های دریافت/ ارسال تابع انجام دهید.

اسکریپت آماده است. با وجود این، تا کامل شدن خیلی راه دارد. یکی از اشکالات اصلی این است که شما هر وقت می‌خواهید با ربات پیام ارسال کنید باید اسکریپت را اجرا کنید. پس بیایید این مشکل را حل کنیم. برای آن‌که کاری کنیم ربات‌مان برای به روز شدن به حرف سرور گوش کند، باید یک حلقه‌ی رویداد ایجاد کنیم. دقیقا یک خط پایین‌تر از import requests روی یک خط جدید from time import sleep را اضافه کنید.

def main():  
    update_id = last_update(get_updates_json(url))['update_id']
    while True:
        if update_id == last_update(get_updates_json(url))['update_id']:
           send_mess(get_chat_id(last_update(get_updates_json(url))), 'test')
           update_id += 1
    sleep(1)
if __name__ == '__main__':  
    main()

با این‌که در این مثال ما “timeout”  (مهلت) ۱ ثانیه‌ای اضافه کرده‌ایم، ولی مثال بالا فقط برای امتحان به کار می‌رود زیرا از یک پولینگ (polling) کوتاه استفاده کرده است. این مسئله برای سرورهای تلگرام خوب نیست و باید از آن اجتناب کرد. دو راه برای به روز رسانی با api ربات‌تان وجود دارد – پولینگ دراز مدت یا وب هوک. با وجود این، اگر با استفاده از روش getUpdates بدون هیچ پارامتری به دنبال به روز رسانی بگردیم، باید از پولینگ کوتاه مدت استفاده کنیم.

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

برای این‌که کاری کنیم اسکریپت از پولینگ دراز مدت استفاده کند، باید با افزودن پارامتر “‌ timeout‌”‌ (مهلت)، اولین تابع را اصلاح کنیم.

“‌ timeout‌” به خودی خود اسکریپت را به بررسی کم‌ترِ به روز رسانی‌ها وا نمی‌دارد. “‌ timeout‌” فقط وقتی کار می‌کند که هیچ به روز رسانی جدیدی وجود نداشته باشد. اگر می‌خواهید نشان دهید به روز رسانی خاصی از قبل مشاهده شده است، باید پارامتر “offset”  را اضافه کنید.

def get_updates_json(request):  
    params = {'timeout': 100, 'offset': None}
    response = requests.get(request + 'getUpdates', data=params)
    return response.json()

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

import requests  
import datetime
class BotHandler:
def __init__(self, token):
        self.token = token
        self.api_url = "https://api.telegram.org/bot{}/".format(token)
def get_updates(self, offset=None, timeout=30):
        method = 'getUpdates'
        params = {'timeout': timeout, 'offset': offset}
        resp = requests.get(self.api_url + method, params)
        result_json = resp.json()['result']
        return result_json
def send_message(self, chat_id, text):
        params = {'chat_id': chat_id, 'text': text}
        method = 'sendMessage'
        resp = requests.post(self.api_url + method, params)
        return resp
def get_last_update(self):
        get_result = self.get_updates()
if len(get_result) > 0:
            last_update = get_result[-1]
        else:
            last_update = get_result[len(get_result)]
return last_update

اکنون دیگر باید کمی دست به سر و روی ربات‌تان بکشید، به تعیین برخی متغیرها بپردازید و اندکی ادب یادش بدهید. می‌خواهیم رباتی درست کنیم که روزی یک بار جواب سلام و احوال‌پرسی‌مان را بدهد. و البته، پاسخ‌ها هم بسته به زمان روز متفاوت باشند. اگر می‌خواهید این اسکریپت را امتحان کنید، باید import datetime را به خط بعد از درخواست‌های ورود (import) و کدهای زیر را به اسکریپت‌تان اضافه کنید.

greet_bot = BotHandler(token)  
greetings = ('hello', 'hi', 'greetings', 'sup')  
now = datetime.datetime.now()
def main():  
    new_offset = None
    today = now.day
    hour = now.hour
while True:
        greet_bot.get_updates(new_offset)
last_update = greet_bot.get_last_update()
last_update_id = last_update['update_id']
        last_chat_text = last_update['message']['text']
        last_chat_id = last_update['message']['chat']['id']
        last_chat_name = last_update['message']['chat']['first_name']
if last_chat_text.lower() in greetings and today == now.day and 6 <= hour < 12:
            greet_bot.send_message(last_chat_id, 'Good Morning  {}'.format(last_chat_name))
            today += 1
elif last_chat_text.lower() in greetings and today == now.day and 12 <= hour < 17:
            greet_bot.send_message(last_chat_id, 'Good Afternoon {}'.format(last_chat_name))
            today += 1
elif last_chat_text.lower() in greetings and today == now.day and 17 <= hour < 23:
            greet_bot.send_message(last_chat_id, 'Good Evening  {}'.format(last_chat_name))
            today += 1
new_offset = last_update_id + 1
if __name__ == '__main__':  
    try:
        main()
    except KeyboardInterrupt:
        exit()

از این جا به بعد عینا هزاران راه برای شخصی‌سازی ربات‌تان وجود دارد. پیشنهاد می‌کنیم ارسال برخی روش‌های رسانه‌ای یا افزودن دکمه‌های “custom”  را امتحان کنید.

ساخت ربات تلگرام: گسترش ربات‌تان به سوی طبیعت وحشی!

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

اول از همه، باید یک حساب GitHub  داشته باشید.  دست به کار شوید و ثبت نام کنید؛ اگر به طور کلی به برنامه‌نویسی علاقه دارید، انجام این کار واقعا الزامی است. علاوه بر داشتن حساب GitHub، باید نرم‌افزار گیت را نیز نصب کنید.

دستور زیر را در لینوکس دبیان اجرا کنید –

$ sudo apt-get install git-all

گیت را برای مکینتاش یا ویندوز دانلود کنید.

در هروکو ثبت نام کنید

با استفاده از دستور زیر virtualenv  را نصب کنید –

$ pip install virtualenv

اکنون باید کمی فایل‌های‌تان را سامان‌دهی کنید. یک فولدر جدید باز کنید، ترمینال/cmd را باز کنید و به فولدر جدید بروید.

virtualenv را در فولدر جدید راه‌اندازی کنید – تایپ کنید

$ virtualenv my_env

نحوه‌ی انتخاب نام واقعا مهم نیست، با وجود این بهتر است به اندازه‌ی کافی با مسما باشد.

به فولدر my_env بروید.

مرحله‌ی بعد – فضای ذخیره‌سازی gitتان را کلون (clone) کنید. دستور زیر را تایپ کنید:

$ git clone https://github.com/yourprofilename/yourreponame

اسکریپت‌تان را در فولدر git clone قرار دهید.

به فولدر my_env باز گردید، و با استفاده از دستور زیر virtualenv را راه‌اندازی کنید –

ویندوز:

$ scripts\activate.bat

لینوکس/مک:

$ source bin/activate

اگر virtualenv را با موفقیت فعال کنید، کنسول‌تان به سرعت باید با my_env آغاز به کار کند.

مرحله‌ی بعد – به فضای ذخیره‌سازی کلون شده بروید و یک بار دیگر با تایپ کردن دستور زیر ماژول درخواست‌های Python را نصب کنید –

$ pip install requests

مرحله‌ی بعدی ساخت ربات تلگرام فهرستی از وابستگی‌ها (دیپندنسی) برای هروکو است. کار راحتی است، فقط چیزهای زیر را تایپ کنید –

$ pip freeze > requirements.txt

یک Procfile بسازید. در این فایل، راجع به این‌که باید با اسکریپت‌تان چه کار بکنید باید دستورالعمل‌هایی را فراهم کنید. نام آن باید دقیقا Procfile باشد؛ و برای ویندوز نیز باید Procfile.windows  باشد. نباید به .txt یا .py یا هر پسوند دیگری ختم شود. محتویات این فایل باید از قرار زیر باشد (my_bot را با نام اسکریپت خود تغییر دهید)

web: python my_bot.py

فایل __init__.py  را به فولدرتان اضافه کنید. این فایل می‌تواند خالی باشد، ولی به حال باید در آن‌جا قرار بگیرد.

برای اعمال و تسریع تغییرات، مجموعه‌ی دستورات زیر را تایپ کنید.

$ git init
$ git add .
$ git commit -m ‘short message that describe changes to commit’
$ git push -u https://github.com/yourusername/nameofrepo

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

در این جا فقط مراحل مختلفی را ارائه خواهیم کرد که برای گسترش یک نرم‌افزار کافی باشند. اگر از مک یا ویندوز استفاده می‌کنید می‌توانید از این مرحله CLI را دانلود کنید.

اگر مانند من از سیستم عامل اوبونتو استفاده می‌کنید، این دستورات را به کار ببرید –

$ sudo add-apt-repository "deb https://cliassets.heroku.com/branches/stable/apt ./"
$ curl -L https://cli-assets.heroku.com/apt/release.key |
$ sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install heroku

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

این مجموعه دستورات را دنبال کنید –

$ heroku login
$ heroku create
$ git push heroku master
$ heroku ps:scale web=1
$ heroku open

از این لحظه به بعد برنامه‌تان بر روی سرور هروکو کار می‌کند. اگر به برخی دلایل کار نکرد، با استفاده از دستورات زیر logها را بررسی کنید –

$ heroku logs --trail

از این‌جا کدهای خطا را بیابید

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

روش دوم ساخت ربات تلگرام:

ساخت ربات تلگرام با استفاده از PythonAnywhere

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

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

ساخت ربات تلگرامی

 

برای این کار از PythonAnywhere استفاده می‌کنیم. شما با استفاده از حساب کاربری رایگان PythonAnywhere می‌توانید رباتی بسازید که بتواند برای‌تان کاملا کاربردی باشد. فقط اگر کاربرهای ربات‌های‌تان بسیار زیاد شوند – به اندازه‌ی هزاران پیام در روز – باید در قبال حساب کاربری‌تان پول پرداخت کنید.

 

بنابراین، بدون گرفتاری‌های اضافه، اجازه دهید کار را شروع کنیم!

ساخت ربات تلگرام

اولین کاری که لازم است انجام دهید این است که به تلگرام بگویید می‌خواهید یک ربات درست کنید. برای این کار، به یک حساب تلگرام نیاز دارید – برنامه‌ی تلگرام را روی گوشی‌تان نصب کنید و کارهای لازم را انجام دهید.

سپس، با “BotFather” شروع به مکالمه کنید. این رباتی است که خودِ تلگرام آن را اجرا می‌کند، و ساخت و ثبت ربات‌ّها را در این برنامه کنترل می‌نماید. اگر گوشی‌تان اندروید است، باید کارهای زیر را انجام دهید (سایر سیستم عامل‌ها نیز تقریبا به همین شکل هستند):

الف. روی دکمه‌ی start در پایین صفحه کلیک و مکالمه‌ای جدید را آغاز کنید.
ب. روی علامت ذره‌بین (search) بالای صفحه کلیک کنید.
پ. “botfather” را تایپ کنید.
ت. روی “botfather” کلیک کنید. البته مطمئن شوید علامت تیک آبی رنگ در کنار آن وجود داشته باشد.
ث. پیام خوشامد گویی برای‌تان ظاهر خواهد شد.
ج. روی دکمه‌ی “Start” کلیک کنید.
چ. “/newbot” را در صفحه انتخاب/تایپ کنید و ارسال نمایید.
ح. در این مرحله، تلگرام از شما می‌خواهد برای ربات‌تان نام تعیین کنید. برای ربات‌تان می‌توانید هر نامی انتخاب کنید.
خ. اکنون تلگرام از شما یک نام کاربری می‌خواهد؛ نام کاربری باید به همراه کلمه‌ی bot و منحصر به فرد باشد.

د. اگر همه‌ی این کارها را به درستی انجام دهید، پیامی دریافت خواهد کرد مبنی بر این‌که ربات شما ساخته شده است. همراه این پیام، اطلاعات مهمی ارسال شده است که برای مراحل بعدی به آن نیاز دارید: رمزی (توکن) که برای دسترسی به HTTP API به آن احتیاج خواهید داشت. این رمز (توکن) شامل مجموعه‌ای طولانی از اعداد و حروف است، که شاید بین آن‌ها علامت دو نقطه “‌:‌”‌ هم وجود داشته باشد. برای حفظ این اطلاعات برای مراحل بعد، بهتر است آن را در گوشی‌تان ذخیره کنید و یک نسخه از آن را نیز به خودتان ایمیل نمایید – میزان امنیت آن، آن‌چنان فوق‌العاده نیست، ولی تا وقتی مسائل شخصی و محرمانه‌تان را در ربات خود قرار ندهید، می‌توان ادعا کرد که به اندازه‌ی کافی امنیت دارد.

بسیار خوب؛ بنابراین وضعیت ساخته شدن ربات‌تان را بررسی کنید؛ البته در این مرحله ربات‌تان هنوز آن‌چنان به حرف زدن نیفتاده است. با همان روشی که در مورد BotFather  به کار گرفتید، با ربات‌تان شروع به مکالمه کنید. اکنون با امیدواری تمام شروع به چت کردن می‌کنید، ولی وقتی روی دکمه‌ی start کلیک می‌کنید، اتفاقی نمی‌افتد.

ساخت ربات تلگرامی

تعجب نکنید. باید یک سری کارهای دیگر نیز انجام دهید.

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

در رایانه‌تان:

الف. توصیه می‌کنیم برای این مقاله‌ی آموزشی یک حساب جدید PythonAnywhere بسازید – در آینده یک وب‌سایت خواهیم ساخت، و چنان‌چه از قبل وب‌سایت داشته باشید، نمی‌خواهیم میان این دو دچار اشتباه شوید. شما می‌توانید حتی با یک آدرس ایمیل حساب‌های رایگان متعددی داشته باشید، بنابراین ساختن یک حساب کاربری جدید ضرری برای‌تان نخواهد داشت. فقط بهتر است یک حساب رایگان ” مبتدی‌”‌ بسازید.
ب. بعد از ساختن حساب کاربری و تایید ایمیل‌تان از جانب PythonAnywhere، کنسول بش (Bash) را اجرا کنید.
پ. در این کنسول متن زیر را کپی پیست کنید و دکمه‌ی Enter را بزنید:

pip3.5 install --user telepot

با این کار، کتابخانه‌ی عالیPython  telepot  برای حساب کاربری  PythonAnywhere شما نصب می‌شود؛ این کتابخانه برخی مشکلات و پیچیدگی‌های برقراری ارتباط را با API تلگرام پنهان می‌کند. منتظر بمانید تا این فرایند به طور کامل انجام شود.

ت. سپس بر روی لوگوی PythonAnywhere در گوشه، بالا، سمت چپ صفحه کلیک کنید تا به داشبورد PythonAnywhere بازگردید.
ث. در بالای صفحه روی Files کلیک کنید.
ج. در کادر “Enter new file name” (به معنی ورود نام فایل جدید) برای کد ربات‌تان، نامی وارد کنید که با “.py” پایان یابد – مثلا firstsimplebot.py  – و سپس، روی دکمه‌ی “New file” کلیک کنید.
چ. بعد از زدن دکمه‌ی “New file”، صفحه‌ی جدیدی برای‌تان باز می‌شود؛ اکنون، تمام کدهای زیر را کپی و در آن صفحه پیست کنید؛ سپس، تنها کافی است رمزی (توکنی) را که پیش‌تر از BotFather گرفته بودید،‌ به جای “YOUR_AUTHORIZATION_TOKEN” درج کنید.

import telepot
import time
import urllib3

# You can leave this bit out if you're using a paid PythonAnywhere account
proxy_url = "http://proxy.server:3128"
telepot.api._pools = {
    'default': urllib3.ProxyManager(proxy_url=proxy_url, num_pools=3, maxsize=10, retries=False, timeout=30),
}
telepot.api._onetime_pool_spec = (urllib3.ProxyManager, dict(proxy_url=proxy_url, num_pools=1, maxsize=1, retries=False, timeout=30))
# end of the stuff that's only needed for free accounts

bot = telepot.Bot('YOUR_AUTHORIZATION_TOKEN')

def handle(msg):
    content_type, chat_type, chat_id = telepot.glance(msg)
    print(content_type, chat_type, chat_id)

    if content_type == 'text':
        bot.sendMessage(chat_id, "You said '{}'".format(msg["text"]))

bot.message_loop(handle)

print ('Listening ...')

# Keep the program running.
while 1:
    time.sleep(10)

ح. سپس، دکمه‌ی “>>> Run this file” (به معنی اجرای این فایل) را در پایین صفحه کلیک کنید.
خ. کنسولی در پایین صفحه ظاهر خواهد شد. بعد از چند لحظه، در بالا، سمت چپ کنسول “‌Listening …‌”‌ را مشاهده خواهید کرد.

حال به گوشی (یا به برنامه‌ی تلگرام‌تان) باز گردید. صفحه‌ی چت با ربات‌تان را باز کنید و چیزی در آن تایپ نمایید، مثلا”Hello”. اگر همه‌ی مراحل را به درستی طی کرده باشید، ربات به سرعت به شما پاسخ می‌دهد: “You said ‘Hello'”.

ساخت ربات تلگرامی

چنان‌چه به کنسول موجود در پایین صفحه‌ی PythonAnywhere نگاهی بیندازید، مشاهده خواهید کرد در آن‌جا اطلاعاتی درباره‌ی پیام ارسالی‌تان درج شده است – شاید چیزی شبیه این:

text private 321518746

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

اکنون اجازه دهید بیت به بیت پیش برویم.

    import telepot
    import time
    import urllib3

این بیت فقط ماژول‌های پیتونی را وارد می‌کند که می‌خواهیم از آن استفاده کنیم.

    # You can leave this bit out if you're using a paid PythonAnywhere account
    proxy_url = "http://proxy.server:3128"
    telepot.api._pools = {
        'default': urllib3.ProxyManager(proxy_url=proxy_url, num_pools=3, maxsize=10, retries=False, timeout=30),
    }
    telepot.api._onetime_pool_spec = (urllib3.ProxyManager, dict(proxy_url=proxy_url, num_pools=1, maxsize=1, retries=False, timeout=30))
    # end of the stuff that's only needed for free accounts

همان‌طور که این جمله بیان می‌کند، تا هنگامی به این کار نیاز دارید که از حساب “‌مبتدی‌” PythonAnywhere استفاده می‌کنید – البته ما نیز برای این مطلب آموزشی از همین حساب استفاده می‌کنیم، ولی اگر شما بعدها مایل به استفاده‌ی مجدد از این کد در حساب غیر رایگان هستید، می‌توانید آن را حذف نمایید. دلیل وجود آن،‌ این است که حساب‌های رایگان فقط می‌توانند به برخی وب‌سایت‌های خارجی خاص متصل شوند، و این اتصال‌ها باید از طریق سرور پروکسی صورت گیرند. بسیاری از APIها هنگام اجرا به صورت خودکار جزییات سرور پروکسی را از محیط سامانه‌شان جمع‌آوری می‌کنند، ولی telepot این کار را انجام نمی‌دهد. این یک مشکل تلقی نمی‌شود، و فقط به این معنی است که باید کمی دقیق‌تر و صریح‌تر باشیم و خودمان از آن بخواهیم ‌”‌در این‌جا از این پروکسی استفاده کند‌”‌ (use this proxy over here).

    bot = telepot.Bot('YOUR_AUTHORIZATION_TOKEN')

اکنون به هسته‌ی مرکزی این برنامه رسیده‌ایم. این خط از telepot برای اتصال به سرور تلگرام استفاده می‌کند.

در ادامه، تابعی را تعریف می‌کنیم که می‌داند چگونه پیام‌ها را از telepot مدیریت کند.

    def handle(msg):
        content_type, chat_type, chat_id = telepot.glance(msg)

اولین کاری که انجام می‌دهیم این است که اطلاعات مفید را با استفاده از تابع مطلوبیت glance  telepot از پیام بیرون بکشیم.

        print(content_type, chat_type, chat_id)

برخی اطلاعات را فقط با اهداف اشکال‌زدایی چاپ می‌کنیم.

        if content_type == 'text':
            bot.sendMessage(chat_id, "You said '{}'".format(msg["text"]))

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

بنابراین، این تمام تابع مدیریت پیام است. به کد اصلی باز می‌گردیم:

    bot.message_loop(handle)

این کد به telepot می‌گوید حلقه‌ی رویداد را شروع به اجرا کند. این یک موضوع پس زمینه‌ای است که تا وقتی از برنامه خارج شوید در حال اجرا باقی می‌ماند؛ این کد به اتصالاتی گوش می‌دهد که برای تلگرام باز شده‌اند و منتظر پیام‌های ورود هستند. وقتی آن‌ها وارد می‌شوند، تابع handle را با جزییات فرا می‌خوانند.

    print ('Listening ...')

بنابراین، ما این پیام را در کنسول‌مان چاپ می‌کنیم که نشان دهیم در حال کار هستیم …

    # Keep the program running.
    while 1:
        time.sleep(10)

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

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

ساخت ربات تلگرام: انتقال به وب هوک

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

در این‌جا از API وب هوک تلگرام استفاده خواهیم کرد. وب هوک‌ها راه متفاوتی برای اتصال به تلگرام هستند. کد قبلی‌مان از PythonAnywhere به تلگرام یک اتصال خارجی ایجاد کرد، سپس با تکیه بر پیام‌های ارسالی تلگرام، آن اتصال را پردازش کرد. همه چیزها با وب هوک معکوس می‌شوند. ما اساسا به تلگرام می‌گوییم، “‌وقتی ربات من یک پیام دریافت می‌کند، به PythonAnywhere متصل شو، و پیام را انتقال بده.‌” و بیتِ “‌اتصال به PythonAnywhere‌” با ایجاد یک برنامه‌ی وب برای اجرا درونِ حساب PythonAnywhere شما انجام می‌شود و این حساب به عنوان API واقعا ساده‌ای عمل می‌کند.

اگر هر یک از این مطالب گیج کننده و ترسناک به نظر می‌رسند، نگران نباشید. این کار واقعا ساده است، و این دستورالعمل‌ها با جزییات بیان می‌شوند.

الف. روی لوگوی PythonAnywhere کلیک کنید تا به داشبورد PythonAnywhere بازگردید.
ب. روی تب “Consoles”  روی “X”  کوچکی که کنار “firstsimplebot.py”  قرار دارد، کلیک کنید. این کار بسیار مهم است – این کار ربات در حال اجرایی را که از قبل ساخته‌ایم متوقف می‌کند تا با ربات جدید که در حال ساخت آن هستیم، تداخل ایجاد نکند.
پ. به تب “Web”  بروید.
ت. روی دکمه‌ی “Add a new web app”  کلیک کنید.
ث. اولین صفحه فقط به شما می‌گوید این برنامه‌ی وب در نام کاربری PythonAnywhere شما .pythonanywhere.com میزبانی می‌شود. روی next کلیک کنید.

ج. در صفحه‌ی بعد، چارچوب وب”Flask”  را انتخاب کنید.  Flaskبرای وب‌سایت‌های ساده‌ای که برای API ها طراحی شده‌اند گزینه‌ای بسیار عالی است.
چ. در مرحله‌ی بعد، “Python 3.5” را انتخاب کنید. این همان نسخه‌ای است که telepot را برای‌اش نصب کردیم.
ح. در صفحه‌ی بعدی، فقط باید موقعیت پیش‌فرض برنامه‌ی Flask‌تان را بپذیرید. این چیزی شبیه /home/your-pythonanywhere-username/mysite/flask_app.py خواهد شد.
خ. بعد از انتظار کوتاهی، پیام “All done!”  (همه‌ چیز انجام شده است) را مشاهده خواهید کرد، و وب‌سایت‌تان ایجاد خواهد شد. لینکی (پیوندی) به آن وجود خواهد داشت – این لینک را دنبال کنید و  متعاقب آن باید پیامی را مشاهده کنید که می‌گوید “Hello from Flask!”.

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

الف. روی دکمه‌ی “Back”  مرورگرتان کلیک کنید تا به تب “Web”  برگردید.
ب. کمی به پایین صفحه نگاهی بیندازید، بخش “Code”  را مشاهده خواهید کرد.
پ. در آن بخش، لینک “Go to directory” را برای “Source code” در تب جدیدی در مرورگر باز کنید. ( بهتر است برای کارهای بعدی تب “Web”  را باز نگه دارید.)
ت. در تب جدید، صفحه‌ی “Files”  را مشاهده خواهید کرد. یکی از فایل‌ها “flask_app.py” نام دارد؛ روی آن کلیک کنید و به ویرایشگر editor بروید.

کد زیر را وارد کنید.

نگران نباشید که این کد چه کار می‌کند، تا چند لحظه دیگر از آن عبور می‌کنیم.

ولی فراموش نکنید YOUR_AUTHORIZATION_TOKEN   را با رمز (توکن) HTTP API تلگرام‌تان جایگزین کنید، و هم‌چنین YOUR_PYTHONANYWHERE_USERNAME  را نیز با نام کاربری PythonAnywhereتان. به علاوه، A_SECRET_NUMBER  را نیز با عددی جایگزین کنید که فقط خودتان می‌دانید؛

راه خوبی برای به دست آوردن یک رمز عددی و حروفی رندوم وجود دارد؛ برای انجام آن باید به این سایت ایجاد کننده‌ی شناسه‌ی منحصر به فرد آنلاین مراجعه کنید؛ این سایت رمز عددی و حروفی منحصر به شما را برای‌تان درست می‌کند؛ این رمز چیزی شبیه “c04a4995-a7e2-4bf5-b8ab-d7599105d1d1” می‌شود.

from flask import Flask, request
import telepot
import urllib3

proxy_url = "http://proxy.server:3128"
telepot.api._pools = {
    'default': urllib3.ProxyManager(proxy_url=proxy_url, num_pools=3, maxsize=10, retries=False, timeout=30),
}
telepot.api._onetime_pool_spec = (urllib3.ProxyManager, dict(proxy_url=proxy_url, num_pools=1, maxsize=1, retries=False, timeout=30))

secret = "A_SECRET_NUMBER"
bot = telepot.Bot('YOUR_AUTHORIZATION_TOKEN')
bot.setWebhook("https://YOUR_PYTHONANYWHERE_USERNAME.pythonanywhere.com/{}".format(secret), max_connections=1)

app = Flask(__name__)

@app.route('/{}'.format(secret), methods=["POST"])
def telegram_webhook():
    update = request.get_json()
    if "message" in update:
        text = update["message"]["text"]
        chat_id = update["message"]["chat"]["id"]
        bot.sendMessage(chat_id, "From the web: you said '{}'".format(text))
    return "OK"

وقتی کد را وارد و از انجام هر سه مورد جایگزینی اطمینان حاصل کردید، کارهای زیر را انجام دهید:

الف. فایل را ذخیره (Save) کنید
ب. به آن تب مرورگرتان بروید که برنامه‌ی وب در آن راه‌اندازی شده است
پ. دکمه‌ی سبز رنگ “Reload” را که تقریبا بالای صفحه قرار دارد، کلیک کنید.
ت. منتظر بمانید گردش دایره‌ی چرخان (spinner) به پایان برسد.

به گوشی‌ یا برنامه‌ی تلگرام‌تان باز گردید، و پیام دیگری را ارسال کنید. این دفعه باید در پاسخ، پیامی دریافت کنید که به وضوح می‌گوید از سمت وب آمده است. بنابراین، اکنون رباتی داریم که از وب هوک استفاده می‌کند!

اکنون اجازه دهید روی این کد کار کنیم:

from flask import Flask, request
import telepot
import urllib3

بنابراین، یک بار دیگر، برخی ماژول‌های پیتون را وارد (import) می‌کنیم. این دفعه علاوه بر telepot و چیزهای مربوط به urllib3 که برای صحبت با تلگرام به آن‌ها نیاز داریم، از برخی چیزهای مربوط Flask نیز استفاده می‌کنیم.

proxy_url = "http://proxy.server:3128"
telepot.api._pools = {
    'default': urllib3.ProxyManager(proxy_url=proxy_url, num_pools=3, maxsize=10, retries=False, timeout=30),
}
telepot.api._onetime_pool_spec = (urllib3.ProxyManager, dict(proxy_url=proxy_url, num_pools=1, maxsize=1, retries=False, timeout=30))

یک بار دیگر، ما با یک حساب رایگان PythonAnywhere به این چیزها نیاز داریم.

secret = "A_SECRET_NUMBER"

اکنون، این بخشی از بهترین تمرین برای ربات‌های تلگرامی است که از وب هوک استفاده می‌کنند. ربات شما به عنوان وبسایتی عمل می‌کند که به صورت عمومی قابل دسترس است. هر کسی در دنیا می‌تواند به آن متصل شود. و البته ما واقعا نمی‌خواهیم آدم‌ها به طور رندوم و اتفاقی قادر باشند به آن متصل شوند، وانمود کنند تلگرام هستند، و چیزهای نامناسب و ناشایسته عنوان کنند … بنابراین، قصد داریم کاری کنیم وبسایت فقط در یک صفحه عمل کند، و url آن برای این صفحه غیر قابل حدس زدن باشد. این کار می‌تواند به اندازه‌ی قابل قبولی چیزها را امن‌تر کند. این کد را تا چند لحظه دیگر مشاهده خواهید کرد.

bot = telepot.Bot('YOUR_AUTHORIZATION_TOKEN')

با استفاده از telepot به تلگرام متصل می‌شویم، درست مانند همان کاری که قبلا انجام دادیم.

bot.setWebhook("https://YOUR_PYTHONANYWHERE_USERNAME.pythonanywhere.com/{}".format(secret), max_connections=1)

با استفاده از telepot  پیامی به تلگرام ارسال می‌کنیم مبنی بر این‌که “‌هنگامی که ربات من پیامی دریافت کرد، همه‌ی چیزها را به این url بفرست.‌” این البته نه تنها حاوی نام میزبان (host) سایت با نام کاربری PythonAnywhere شما است، بلکه هم‌چنین شامل رمز غیر قابل حدسی است (البته امیدواریم) که پیش‌تر تعریف کردیم. هم‌چنین لازم به ذکر است این به جای HTTP از HTTPS امن استفاده می‌کند – همه‌ی وبسایت‌ها در PythonAnywhere، حتی رایگان‌ها، به طور پیش فرض از HTTPS استفاده می‌کنند، و تلگرام (کاملا معقولانه) وب هوک‌ها را فقط در HTTPS ارسال می‌کند.

app = Flask(__name__)

اکنون برای مدیریت درخواست‌ها برنامه‌ی Flask را می‌سازیم.
@app.route(‘/{}’.format(secret), methods=[“POST”])
def telegram_webhook():
این تعدادی کد Flask است که می‌گوید “هنگام دریافت درخواست یک POST‌ در url محرمانه، تابع ذیل را به حالت اجرا درآور.‌”

    update = request.get_json()

تلگرام با استفاده از رمزگذاری JSON چیزهایی را به ربات ارسال می‌کند، بنابراین برای دریافت یک دیکشنری پیتون آن را رمزگشایی می‌کنیم.

    if "message" in update:

اگر چیزهایی که از جانب تلگرام دریافت کردیم، چنین پیامی بود…

                text = update["message"]["text"]
        chat_id = update["message"]["chat"]["id"]

… متن پیام و ID صفحه‌ی چتی را که بخشی از مورد زیر را تشکیل داده است، استخراج کنید …

        bot.sendMessage(chat_id, "From the web: you said '{}'".format(text))

… با استفاده از telepot عین پیام را پاسخ دهید …

    return "OK"

… و پاسخی به تلگرام بدهید که بگوید همه‌ چیز OK شده است.

بنابراین اکنون یک ربات تلگرام ساده (که امیدوار هستیم مراحل‌ ساخت‌اش را متوجه شده باشید) در اختیار داریم که برای همیشه به خوبی کار می‌کند! وبسایت‌های حساب‌های رایگان PythonAnywhere تا سه ماه دوام دارند، و سپس می‌توانید آن‌ها را برای سه ماه دیگر تمدید کنید – و سه ماه دیگر نیز دوباره می‌توانید آن را تمدید کنید؛ و برای همیشه، تا هر زمان مایل باشید آن را ادامه دهید. بنابراین،‌ تا زمانی که سالی چهار مرتبه به PythonAnywhere وارد شوید، همه چیز به خوبی پیش خواهد رفت.

ولی این ربات در حال حاضر خیلی خسته کننده است. بیایید آن را کمی جالب و جذاب‌تر کنیم.

ساخت ربات تلگرام: معرفی الیزا

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

راحت‌تر این‌که، مجموعه‌ی پیتون nltk پیاده‌سازی الیزا را نیز فراهم کرده است، بنابراین حتی دیگر به کد نویسی نیز نیاز نداریم.

بیایید نحوه‌ی کار را بررسی کنیم. به داشبورد PythonAnywhere بروید، و یک کنسول بش جدید راه‌اندازی کنید. در آن، مطابق زیر الیزا را در تحلیلگر Python 3.5 امتحان کنید (پاسخ‌ها ممکن است برای شما متفاوت باشند):

بسیار خوب، شکل بالا حتما کمک‌تان کرده است نحوه‌ی کار را متوجه شوید. بیایید آن را انجام دهیم.

۱۹:۲۰ ~ $ python3.5
Python 3.5.2 (default, Jul 17 2016, 00:00:00) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from nltk.chat.eliza import eliza_chatbot
>>> eliza_chatbot.respond("Hello")
'Hi there... how are you today?'
>>> eliza_chatbot.respond("I'm well")
"Why do you think you're well?"
>>> eliza_chatbot.respond("I'm not sure")
'How does being not sure make you feel?'
>>> eliza_chatbot.respond("A little confused, to be honest")
'Very interesting.'
>>> eliza_chatbot.respond("Is it?")
'Why do you ask that?'

الف. به داشبورد برگردید، سپس به تب “Files” ، و بعد به کد برنامه‌ی Flask‌تان بروید (احتمالا داخل mysite/flask_app.py باشد).

ب. یک import جدید به بالا اضافه کنید:

from nltk.chat.eliza import eliza_chatbot

داخلtelegram_webhook ، خط زیر را

bot.sendMessage(chat_id, "From the web: you said '{}'".format(text))

با این خط جایگزین کنید:

if text == "/start":
    bot.sendMessage(chat_id, "Hello, I'm the therapist.  How can I help?")
else:
    bot.sendMessage(chat_id, eliza_chatbot.respond(text))

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

ت. به تب “Web” بروید و دکمه‌ی سبز رنگ “Reload” را کلیک کنید.

به گوشی‌تان برگردید، یک صفحه‌ی جدید باز کنید تا بتوانید از نو با الیزا چت کنید.

ث. در صفحه‌ی قبل، روی علامت ‌”‌سه خط‌”‌ در بالا، سمت راست کلیک کنید و “Delete chat” را انتخاب نمایید.

ج. روی دکمه کلیک کنید تا دوباره یک چت را شروع نمایید، سپس دوباره ربات‌تان را سرچ، و روی آن کلیک کنید.

چ. با کلیک بر روی دکمه‌ی “Start” چت را شروع کنید.

و اکنون باید قادر باشید با رباتِ‌ چت کننده‌تان، صحبت کنید!

ساخت ربات تلگرامی

روش سوم ساخت ربات تلگرام:

نحوه‌ ایجاد ربات تلگرام با استفاده از PHP

اگر به خواندن این مقاله علاقه‌مند شده‌اید، حتما می‌دانید ربات‌های چت به یکی از بزرگ‌ترین جنبش‌های فناوری ۲۰۱۶ تبدیل شده‌اند.

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

و تلگرام بزرگ‌ترین برنامه‌ی پیام‌رسانی است که دارای API رباتِ باز است.

در ادامه‌ی این مقاله قصد داریم یک ربات تلگرام کرنومتر بسازیم. به همین خاطر در ادامه نحوه‌ی ساخت ربات تلگرام ، اتصال به آنالیتیکس،  مقداری برنامه‌نویسی، و در آخر افزودن ربات‌تان به فروشگاه ربات را برای‌تان توضیح خواهیم داد.

در ضمن، یک دمو (نسخه‌ی نمایشی) نیز تهیه کرده‌ایم،‌ که فقط با افزودن @stopwatchbot به فهرست مخاطبین تلگرام‌تان می‌توانید آن را امتحان کنید.

پیش از هر کار،‌ باید با استفاده از BotFather یک ربات بسازید؛ البته در بخش‌های بالا نحوه‌ی انجام این کار را دو بار توضیح داده‌ایم.

ساخت ربات تلگرام: اتصال به بوتان آنالیتیکس

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

ابزار ساده‌ای برای اتصال ربات‌تان به آنالیتیکس وجود دارد که به آن بوتان (Botan) می‌گویند. این ابزار بر اساس اپ متریک یاندکس کار می‌کند و کاملا نیز رایگان است. با استفاده از بوتان می‌توانید مخاطبین‌تان را گروه‌بندی کنید، در مورد پروفایل‌های کاربران اطلاعات کسب نمایید، به پر کاربردترین دستورات دسترسی پیدا کنید، و نمودارهای زیبایی، درست مثل نمودار زیر، را در پیام‌رسان خود داشته باشید:

ساخت ربات تلگرامی

برای شروع، باید ربات‌تان را در بوتان ثبت کنید و یک رمز (توکن) بگیرید. و این کار را نیز می‌توانید با یک ربات انجام دهید، @BotanioBot:

ساخت ربات تلگرامی

فقط روی گزینه‌ی “Add bot”  در کیبوردتان کلیک کنید، نام ربات‌تان را تایپ کنید، و رمز (توکن) پیگیری آن را دریافت نمایید. اکنون Botanio آماده‌ی پیگیری رویدادهای راجع به ربات‌تان است، و شما می‌توانید آمار کاربران، جلسات مکالمه‌، میزان حفظ کاربران و رویدادها را درست در پیام‌رسان‌تان داشته باشید.

ساخت ربات تلگرام: ساخت و ثبت یک اس‌اس‌ال وب هوک (SSL Webhook)

در تلگرام دو راه برای دریافت پیام از کاربران‌تان وجود دارد: پولینگ دراز مدت و وب هوک‌ها.

ساخت ربات تلگرامی

اساسا، با پولینگ دراز مدت، شما به درخواست پیام‌های جدید از API نیاز دارید، و با وب هوک، سیستم پاسخ به تماسی تنظیم می‌کنید که اگر پیام جدیدی از یک کاربرد دریافت کردید، API تلگرام خبر خواهد داد. ما وب هوک را ترجیح می‌دهیم، زیرا شبیه برقراری ارتباط واقعی است، بنابراین در این مقاله باز هم از این روش استفاده می‌کنیم. اکنون، باید برای وب هوک‌مان یک url کال بک (call back) انتخاب کنیم که لازم است تحت پروتکل HTTPS قرار بگیرد؛ آن را واقعا باید با امنیت بالا تنظیم کنیم، بنابراین باید مانند دستورالعمل زیر، اسکریپت‌تان را در یک مسیر محرمانه پنهان نمایید:

“‌اگر می‌خواهید مطمئن شوید درخواست وب هوک از طرف تلگرام می‌آید، توصیه می‌کنیم در url از یک مسیر محرمانه استفاده کنید؛ مانند https://www.example.com/<token> . از آن‌جا که هیچ کس دیگر از رمز (توکن) ربات‌تان خبر ندارد، می‌توانید کاملا مطمئن باشید این درخواست از سمت تلگرام است.‌”

چنان‌چه مجوز SSLتان پذیرفته شود، فقط کافی است این url را در مرورگرتان باز نمایید:

https://api.telegram.org:443/bot[token]/setwebhook?url=[webhook]

در غیر این صورت باید خودتان یک مجوز بسازید. برای این منظور، نمونه‌ای از این دستور را روی لینوکس نشان داده‌ایم:

openssl req -newkey rsa:2048 -sha256 -nodes -keyout /path/to/certificate.key -x509 -days 365  -out /path/to/certificate.crt -subj "/C=IT/ST=state/L=location/O=description/CN=yourdomain.com"

و فراموش نکنید که پورت SSL را باز نمایید:

sudo ufw allow 443/tcp

برای آن‌که مجوزتان بررسی و دامنه‌ی وب هوک‌تان پذیرفته شود، ‌باید مجوز کلید عمومی (گواهی دیجیتال) خود را آپلود نمایید:

curl \
  -F "url=https://yourdomain.com/path/to/script.php" \
  -F "certificate=/path/to/certificate.key" \
  "https://api.telegram.org/bot[token]/setwebhook"

در نهایت، پاسخی از JSON، به این شکل دریافت خواهید کرد:

{"ok":true,"result":true,"description":"Webhook was set"}

معنی‌اش این است که وب هوک تنظیم شده است،‌ و آماده‌ی شروع موتور ربات هستیم.

ساخت ربات تلگرام: ایجاد (پایگاه داده) دیتا بیس

اکنون لازم است برای تایمرهای‌مان (زمان سنج) پایگاه داده (دیتا بیس) ایجاد کنیم. لازم است چه چیزهایی را در آن ذخیره کنید؟ وقتی یک کاربرد به کرنومتر دستور شروع می‌دهد، ID آن چت را بر می‌داریم و آن ID چت را با زمان کنونی یونیکس در یک ردیف ذخیره می‌کنیم؛ ساعت یونیکس تعداد ثانیه‌های میان زمان حاضر و زمان شروع ساعت هماهنگ جهانی را، در اول ژانویه‌ی ۱۹۷۰ نشان می‌دهد. در نتیجه، ردیفی را با آن ID چت و عدد صحیحی از زمان کنونی یونیکس ذخیره خواهیم نمود.

برای نشان دادن زمان کنونی کرنومتر، زمان ذخیره شده را با زمان کنونی مقایسه می‌کنیم. تفاوت آن‌ها همان زمان کنونی بر حسب ثانیه را نشان می‌دهد. اگر کاربرد تایمر را متوقف کند، آن‌ گاه به راحتی ردیف آن ID چت را حذف خواهیم کرد.

بنابراین بیایید یک پایگاه داده و جدولی برای ذخیره‌ی اطلاعات کرنومتر بسازیم:

CREATE TABLE IF NOT EXISTS `stopwatch` (
  `chat_id` int(10) unsigned NOT NULL,
  `timestamp` int(10) unsigned NOT NULL,
  PRIMARY KEY (`chat_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ساخت ربات تلگرام: ساخت یک کلاس کرنومتر

سرانجام برای شروع برنامه‌نویسی آماده‌ شده‌ایم. بیایید برای کار با دیتا بیس در فایلی به نام stopwatch.php  یک کلاس بسازیم و کار را با سازنده‌ای شروع می‌کنیم که دو متغیر خصوصی را در جایی تنظیم می‌کند که قرار است ID چت و اتصال کنونی MySQL را ذخیره کنیم.

class Stopwatch
{
    /** @var mysqli */
    private $mysqli;
    /** @var int */
    private $stopwatch_id;
    /**
     * Stopwatch constructor
     * @param mysqli $mysqli
     * @param $stopwatch_id
     */
    public function __construct(\mysqli $mysqli, $stopwatch_id)
    {
        $this->mysqli = $mysqli;
        $this->stopwatch_id = intval($stopwatch_id);
    }
}

وقتی کاربر تایمر را شروع می‌کند، زمان کنونی یونیکس را معین و آن را با ID چت در یک ردیف ذخیره می‌کنیم؛ بنابراین روش کار start()  به این صورت است:

public function start()
{
    $timestamp = time();
    $query = "
        INSERT INTO  `stopwatch` (`chat_id`, `timestamp`)
        VALUES ('$this->stopwatch_id', '$timestamp')
        ON DUPLICATE KEY UPDATE timestamp = '$timestamp'       
    ";
    return $this->mysqli->query($query);
}

اگر تایمر متوقف شود، لازم است ردیف را از دیتا بیس حذف نماییم:

/**
 * Delete row with stopwatch id
 * @return bool|mysqli_result
 */
public function stop()
{
$query = "
    DELETE FROM `stopwatch`
    WHERE `chat_id` = $this->stopwatch_id
    ";
    return $this->mysqli->query($query);
}

و اکنون به بخش اصلی کلاس می‌پردازیم. وقتی کاربر اطلاعاتی را درباره‌ی وضعیت تایمر درخواست می‌کند، باید ردیف مربوط به کرنومتر را از مکالمه‌ی کنونی پیدا کنیم و تفاوت زمانی را میان زمان یونیکس ذخیره شده و زمان کنونی بر حسب ثانیه محاسبه نماییم. خوشبختانه، زمان یونکیس یک عدد صحیح است، بنابراین فقط کافی است یک عدد را از عددی دیگر تفریق کنیم. برای نشان دادن عدد حاصله در چارچوب (با فرمت) زمان،  از تابع gmdate استفاده خواهیم کرد.

/**
 * Find row with stopwatch id and return difference in seconds from saved Unix time and current time
 * @return string
 */
public function status()
{
    $query = "
        SELECT `timestamp` FROM  `stopwatch`
        WHERE `chat_id` = $this->stopwatch_id        
    ";
    $timestamp = $this->mysqli->query($query)->fetch_row();
    if (!empty($timestamp)) {
        return gmdate("H:i:s", time() - reset($timestamp));
    }
}

همان‌طور که می‌بینید، اگر هیچ عددی در دیتا بیس نباشد، روش status() هیچ پاسخی در بر نخواهد داشت، و به پردازش مقدار تهی (null) خواهیم پرداخت (درست مانند یک تایمر متوقف شده).

انتخاب یک کتابخانه‌ی پی اچ پی (PHP)

کتابخانه‌های پی اچ پی (PHP) زیادی وجود دارند که با API تلگرام کار می‌کنند، ولی حداقل تا زمان نگارش این مقاله، فقط یک مورد وجود دارد که هم از بسته‌ی API ربات تلگرام و هم از ردیابی بوتان (Botan) پشتیبانی می‌کند؛ که با آن API ربات تلگرام PHP می‌گویند.

برای نصب این کتابخانه (library) از کامپوزر (Composer) استفاده کنید:

composer require telegram-bot/api

اگر به استفاده از آنالیتیکس علاقه ندارید، ربات تلگرام API PHP SDK با ادغام با چارچپب لاراول یا ربات تلگرام PHP را امتحان کنید.

ساخت ربات تلگرام: ایجاد اسکریپت وب هوک

و اکنون بخش اصلی کار شروع می‌شود – برای پردازش کال بک‌ها (callbacks) از API ربات تلگرام، یک اسکریپت خواهیم ساخت. فایلی به نام index.php ایجاد کنید و کامپوزری با امکان بارگذاری خودکار و یک کلاس کرنومتر جدید در آن قرار دهید. اتصال MySQL را باز کنید، یک کلاینت (کارخواه) جدید API تلگرام بسازید، و آن را اجرا نمایید:

require_once 'vendor/autoload.php';
require_once 'stopwatch.php';
 
// connect to database
$mysqli = new mysqli('database_host', 'database_user', 'database_password', 'database_name');
if (!empty($mysqli->connect_errno)) {
    throw new \Exception($mysqli->connect_error, $mysqli->connect_errno);
}
 
// create a bot
$bot = new \TelegramBot\Api\Client('bot_token', 'botanio_token');
// run, bot, run!
$bot->run();

ساخت ربات تلگرام: ایجاد دستورات

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

$bot->command('start', function ($message) use ($bot) {
    $answer = 'Howdy! Welcome to the stopwatch. Use bot commands or keyboard to control your time.';
    $bot->sendMessage($message->getChat()->getId(), $answer);
});

این‌جا در روش command()  برای دریافت یک دستور، یک بستار (closure) را تعریف می‌کنیم. این بستار یا کلوژر ID چت موجود را دریافت و یک پیام خوشامدگویی ارسال می‌کند. هم‌چنین، همه‌ی دستورات ثبت شده به طور خودکار به عنوان دستور ردیابی می‌شوند.
برای شروع کرنومتر، دستور /go  را تعریف می‌کنیم:

$bot->command('go', function ($message) use ($bot, $mysqli) {
    $stopwatch = new Stopwatch($mysqli, $message->getChat()->getId());
    $stopwatch->start();
    $bot->sendMessage($message->getChat()->getId(), 'Stopwatch started. Go!');
});

این کار نمونه‌ای از کلاس کرنومتر را ایجاد می‌کند و با فراخوانی روش start()  که آن را قبلا تعریف کرده‌ایم، تایمر را شروع می‌نماید.
برای تعریف دستور /status  باید همان کار بالا را بار دیگر انجام دهیم. فقط کافی است روش status()  را فرا بخوانید و نتیجه را دریافت کنید. اگر نتیجه‌ی این روش پوچ بود، به کاربر بگویید تایمر شروع به کار نکرده‌ است.

$bot->command('status', function ($message) use ($bot, $mysqli) {
    $stopwatch = new Stopwatch($mysqli, $message->getChat()->getId());
    $answer = $stopwatch->status();
    if (empty($answer)) {
        $answer = 'Timer is not started.';
    }
    $bot->sendMessage($message->getChat()->getId(), $answer);
});

و اگر کاربر تایمر را متوقف کند، ابتدا باید با status() شرح وضعیت را دریافت کنیم، سپس زمان نتیجه را نشان دهیم، و با استفاده از روش stop() تایمر را متوقف نماییم.

$bot->command('stop', function ($message) use ($bot, $mysqli) {
    $stopwatch = new Stopwatch($mysqli, $message->getChat()->getId());
    $answer = $stopwatch->status();
    if (!empty($answer)) {
        $answer = 'Your time is ' . $answer . PHP_EOL;
    }
    $stopwatch->stop();
    $bot->sendMessage($message->getChat()->getId(), $answer . 'Stopwatch stopped. Enjoy your time!');
});

همین! حالا می‌توانید همه‌ی فایل‌ها را در دایرکتوری وب هوک آپلود کنید و ربات‌تان را امتحان نمایید.

افزودن یک کیبورد

برای این‌که به کاربر پیشنهاد بدهیم کدام دستورات را می‌تواند اجرا کند، باید یک کیبورد به پیام‌مان اضافه کنیم. کرنومترمان می‌تواند در حال کار یا متوقف باشد، و برای هر وضعیت دو کیبورد وجود دارد. برای نشان دادن یک کیبورد به کاربر فقط کافی است روش sendMessage()  را پیش بگیریم:

$keyboard = new \TelegramBot\Api\Types\ReplyKeyboardMarkup([['/go', '/status']], null, true);
 
$bot->sendMessage($message->getChat()->getId(), $answer, false, null, null, $keyboards);
});

اکنون می‌توانید به هر دستور مربوط به ربات‌تان، کیبورد اضافه کنید. ‌

ساخت ربات تلگرام : افزودن ربات به فروشگاه

بسیار خوب! اکنون یک ربات فعال داریم، و می‌خواهیم آن را به تمام دنیا نشان دهیم. بهترین راه این است که ربات‌تان را در کاتالوگ ربات ثبت کنید. تلگرام برای این کاتالوگ رسمی ندارد، ولی تعدادی کاتالوگ غیر رسمی وجود دارد که بزرگ‌ترین‌شانStorebot.me  است که هزاران ربات تاکنون در آن ثبت شده‌اند.

اکنون بیایید ربات‌مان را در یک فروشگاه ربات ثبت کنیم! @storebot را به فهرست مخاطبین‌تان اضافه کنید، دستور /add را تایپ کنید، و به دستورالعمل‌های آن عمل نمایید. در این دستورالعمل‌ها از شما خواسته می‌شود نام کاربری ربات، نام و شرح حال ربات‌تان را وارد کنید؛ یکی از مقوله‌های استاندارد را انتخاب نمایید، و با ارسال رمز (توکن) ربات، مالکیت‌تان را بر آن اثبات کنید.

ساخت ربات تلگرامی

پس از چند لحظه، ربات‌تان از فرایند پذیرش عبور می‌کند و در نمودارهای Storebot قرار می‌گیرد. اکنون شما و کاربران‌تان می‌توانید ربات خود را در فروشگاه ربات پیدا کنید و به آن راي دهید و تلاش کنید تا در نمودار به صدر بیاید.

نتیجه‌گیری

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

نتیجه‌ی تاش‌های‌ةان را برای ساخت ربات تلگرام از طریق بخش نظرات با ما در میان بگذارید.


ترجمه: تحریریه سایت کسب و کار بازده – امیررضا مصطفایی

منابع:  hackernoon، blog.pythonanywhere.com ،  code.tutsplus.com

نویسندگان: آنتون باگایف و رومن گاپونوف

ساخت ربات تلگرام: ۳ روش رایگان و آسان ساخت ربات تلگرام

ساخت ربات تلگرام


مطالب مرتبط
۶ دلیل که چرا نباید پوست هندوانه را دور بیندازید
درمان ریزش مو با آب پیاز
خواص فلفل سیاه و کاربرد آن در مکمل های غذایی
۲۲ مواد غذایی حاوی ید که نمی‌شناختید
۷ بهترین درمان خانگی افتادگی پلک چشم
اختلال نعوظ : ۵۲ بهترین خوراکی برای نعوظ بهتر و قوی در مردان
۱۱ بهترین درمان خانگی جای جوش
۱۰ درمان خانگی رفع چروک پیشانی که واقعا موثر است
مضرات نوشابه: ۱۰ عارضه‌ جانبی نوشابه که واقعا خطرناک است
۱۰ بهترین خوراکی برای جوان تر دیده شدن
۶۲ بهترین روش حفظ حریم شخصی تان که همین حالا به کار ببرید
بیت کوین ، اتریوم و لایت کوین: آن چه باید برای ۲۰۱۸ بدانید

برچسب ها

*
هرگونه نشر ، بازتولید یا بازنشر تمام یا بخشی از محتوای سایت بازده بدون کسب مجوز، غیرقانونی است و تحت پیگرد قانونی قرار خواهد گرفت.

  1. health گفت:

    Hi Dear, are you genuinely visiting this web page regularly, if so afterward you will definitely get fastidious
    knowledge.

پاسخ دهید

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

کسب و کار

کسب و کار,بازاریابی