2 مهر 1402
تهران، خیابان آزادی، تقاطع قریب
برنامه نویسی وب

ساخت چت بات واتساپ با پایتون، Flask و Messagebird

ساخت چت بات واتساپ با پایتون، Flask و Messagebird

در این آموزش، من قصد دارم با استفاده از Messagebird API برای واتساپ و فریم‌ویر Flask برای پایتون یک چت بات بسازم.

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

گوشی خود را از داشبورد Messagebird به sandbox متصل کنید و بر روی WhatsApp و سپس sandbox WhatsApp کلیک کنید.

چت بات واتساپ

هنگامی که اولین پیام خود را به آن شماره ارسال می‌کنید، یک channel id منحصر به فرد به شما اختصاص داده می‌شود. اما وقتی که برای استفاده از شماره خود تأیید شدید، channel id خود را نیز دریافت خواهید کرد که ما از آن برای ارتباط با بات خود استفاده خواهیم کرد. اگر قبلاً یک محیط virtual نصب کرده‌اید، مرحله 1 را نادیده بگیرید.

مرحله 1: نصب محیط مجازی (Virtual Environment)

برای نصب بر روی لینوکس

				
					sudo apt install python-virtualenv
				
			

برای نصب بر روی Mac

				
					sudo python2 -m pip install virtualenv
				
			

برای نصب بر روی ویندوز

				
					sudo python2 -m pip install virtualenv
				
			

مرحله 2: ایجاد کردن یک محیط (Environment)

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

ایجاد یک محیط در لینوکس و MacOS

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

				
					python3 -m venv whatsappbot
				
			

ایجاد یک محیط در ویندوز

				
					python3 -m venv whatsappbot
				
			

مرحله 3: فعال کردن محیط

محیط مجازی را در لینوکس و MacOS، با جایگزین کردن whatsappbot با نام محیطی که در مرحله دو ساخته اید، فعال کنید:

				
					. whatsappbot/bin/activate
				
			

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

				
					whatsappbot\Scripts\activate
				
			

مرحله 4: نصب Flask

دستور زیر را وارد کنید:

				
					pip install Flask messagebird requests gunicorn jinja2 werkzeug urllib3
				
			

فولدر خود را با یک ادیتور کد باز کنید. فولدر پروژه شما اکنون باید دارای فولدر venv متعلق به whatsappbot باشد. یک فایل bot.py در فولدر root خارج از فولدر venv ایجاد کنید. فولدر خود را با یک ادیتور کد باز کنید. Vscode فولدر پروژه شما اکنون باید دارای فولدر venv باشد که متعلق به whatsappbot است. یک فایل bot.py در فولدر root خارج از فولدر venv ایجاد کنید.

نصب محیط مجازی (Virtual Environment)

کد زیر را در فایل bot.py اضافه کنید تا برنامه‌ای بسازی که Hello bot را پرینت کند. فایل را ذخیره کرده و ببندید:

				
					from flask import Flask

app = Flask(__name__)

@app.route(‘/bot’, methods=[‘POST’])
def bot():
   #webhook logic

if __name__ == ‘__main__’:
   app.run()

				
			

متغیر محیط FLASK_APP را با دستور زیر در ترمینال تنظیم کنید.

در Mac و لینوکس

				
					export FLASK_APP=bot.py
				
			

در ویندوز

				
					setx FLASK_APP “bot.py”
				
			

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

				
					import jsonfrom flask 
import Flask, jsonify, request
import requests

app = Flask(__name__)

@app.route(“/”)
def hello():
  return “Bot is alive!”

@app.route(‘/webhook’, methods=[‘POST’])
def bot():
   data = request.json
   message = data[“message”][“content”][“text”].lower()   

  if (message == “hello”):
       return conversation_reply(
          data[“conversation”][“id”],”How are you”
       )   if (message == “bye”):
       return conversation_reply(data[“conversation”][“id”],”Good    bye!”)

def conversation_reply(conversation_id, message_text):
   reqUrl = (
      “https://conversations.messagebird.com/v1/conversations/"
      + conversation_id
      + “/messages”
   )

headersList = {
      “Authorization”: “AccessKey MESSAGEBIRD_ACCESS_KEY“,
      “Content-Type”: “application/json”,
   }
   payload = json.dumps({“type”: “text”, “content”: {“text”:  message_text}})   

response = requests.request(“POST”, reqUrl, data=payload,    headers=headersList)   

return jsonify({“status”: “ok”, “response”: response.text})


if __name__ == ‘__main__’:
   app.run()

				
			

request.json حاوی اطلاعاتی از سمت فرستنده است. بنابراین ما به محتوای پیام نیاز داریم  و از آن در دستور if خود استفاده می‌کنیم. من یک تابع دیگر ایجاد کرده‌ام که درخواست‌های ارسال به API مکالمات را با یک پاسخ هندل می‌کند. برای تست کردن بات خود، کلید دسترسی Messagebird خود را از داشبورد اضافه کنید.

برای تست روی Localhost از  Ngrok استفاده کنید

اگر بر روی دستگاهتان ngrok ندارید، آن را از این‌جا نصب کنید. اگر آن را دارید، برنامه flask خود را به این شکل ران کنید:

				
					flask run
				
			

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

				
					ngrok http 5000
				
			

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

				
					import requests

reqUrl = “https://conversations.messagebird.com/v1/webhooks"headersList = {
 “Authorization”: “AccessKey MESSAGEBIRD_ACCESS_KEY”,
 “Content-Type”: “application/json” 
}

payload = json.dumps({
“events”:[“message.created”, “message.updated”],
“channelId”: “YOUR_CHANNEL_ID_FROM_THE_WHATSAPP_SANDBOX”,
“url”:”https://your-domain.ngrok.io/webhook"
})

response = requests.request(“POST”, reqUrl, data=payload, headers=headersList)

print(response.text)

				
			

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

استقرار بات واتساپ در Heroku

فایل های  Procfile، requirements.txt و runtime.txt را به فولدر root خود اضافه کنید.

استقرار بات واتساپ در Heroku

درون Procfile، اضافه کنید:

				
					web: gunicorn — bind 0.0.0.0:$PORT app:app
				
			

Requirements.txt نسخه زیر را به جای نسخه‌های واقعی که استفاده می‌کنید، اضافه کنید:

				
					flask==2.0.2
Jinja2==3.0.3
gunicorn==20.1.0
requests==2.27.1
urllib3==1.26.8
werkzeug==2.0.3
messagebird==2.0.0
				
			

runtime.text

				
					python-3.9.10
				
			

نسخه پایتونی که من از آن استفاده می‌کنم، ممکن است با نسخه پایتون شما متفاوت باشد.

متغیرهای محیطی ایجاد کنید تا کلید MESSAGEBIRD API خود را در محیط تولید پنهان کنید. کد خود را در bot.py به‌روز کنید.

				
					import json
from flask import Flask, jsonify, request
import requests
from os import environ

MESSAGEBIRD_ACCESS_KEY = environ[“MESSAGEBIRD_ACCESS_KEY”]

app = Flask(__name__)

@app.route(“/”)
def hello():
  return “Bot is alive!”

@app.route(‘/webhook’, methods=[‘POST’])
def bot():
    data = request.json
    message = data[“message”][“content”][“text”].lower()

    if (message == “hello”):
        return conversation_reply(data[“conversation”][“id”],”How are you”)
    if (message == “bye”):
        return conversation_reply(data[“conversation”][“id”],”Good bye!”)

def conversation_reply(conversation_id, message_text):
    reqUrl = (“https://conversations.messagebird.com/v1/conversations/" + conversation_id + “/messages”)headersList = {“Authorization”: “AccessKey “ + MESSAGEBIRD_ACCESS_KEY, “Content-Type”: “application/json”,}
    payload = json.dumps({“type”: “text”, “content”: {“text”: message_text}})
    response = requests.request(“POST”, reqUrl, data=payload, headers=headersList)
    return jsonify({“status”: “ok”, “response”: response.text})

if __name__ == ‘__main__’:
     app.run()

				
			

پس از ران شدن، دستورات Heroku زیر در ترمینال شما صادر می‌شود:

				
					heroku config:set MESSAGEBIRD_ACCESS_KEY=your-actual-api-key-from-the-messagebird-dashboard
				
			

پس از ورود به سیستم ران کنید:

				
					heroku create
				
			

پس از ایجاد برنامه Heroku، کلید Messagebird API خود را با استفاده از این دستور اضافه کنید:

				
					heroku config:set MESSAGEBIRD_ACCESS_KEY=your-actual-api-key-from-the-messagebird-dashboard
				
			

سپس تغییرات خود را با git add اعمال کنید. و git commit -m “first commit”. اکنون باید بتوانید دستور زیر را برای استقرار بات واتساپ خود به صورت آنلاین اجرا کنید.

				
					git push heroku main
				
			

بعد از آن

				
					heroku ps:scale web=1
				
			

اکنون اگر به URL Heroku خود دسترسی پیدا کنید، باید این متن را ببینید: your bot is alive. فقط یک چیز باقی مانده است و آن این است که یک webhook ایجاد کنید که دارای URL Heroku بات شما باشد.

				
					import requests
reqUrl = “https://conversations.messagebird.com/v1/webhooks"

headersList = {
 “Authorization”: “AccessKey MESSAGEBIRD_ACCESS_KEY”,
 “Content-Type”: “application/json” 
}

payload = json.dumps({
“events”:[“message.created”, “message.updated”],
“channelId”: “YOUR_CHANNEL_ID_FROM_THE_WHATSAPP_SANDBOX”,
“url”:”https://your-domain.herokuapp.com/webhook"
})

response = requests.request(“POST”, reqUrl, data=payload, headers=headersList)

print(response.text)

				
			

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

منبع: hackernoon    نویسنده: مارشال چیکاری

Leave feedback about this

  • کیفیت
  • قیمت
  • خدمات

PROS

+
Add Field

CONS

+
Add Field
Choose Image
Choose Video
X