私は検疫中に私を正気に保つためにPython WhatsAppボットを構築しました


このパンデミックは私の精神的、感情的な健康に大きな被害をもたらしました.ために私を占有し、私の周りの生活を明るくするために、私はまだ別のPythonプロジェクトを開始-この時間、私はランダムな猫の写真を送信するWhatsAppボットは、ミーム、最高の料理のレシピ、そしてもちろん、最新の世界のニュースやCOVID 19統計情報を送信します.
完全なプロジェクトは私のGitHub repository , そして、私のwebhookは生きていますhttps://zeyu2001.pythonanywhere.com/bot/ .

必要条件


このchatbotを作成するために、Python、Django Webフレームワーク、ngrokとtwilioを使用します.私はあなたに必要なパッケージをインストールする方法を示します、しかし、あなたはアクティブな電話番号とWhatsAppがインストールされたPython(3.6以降)とスマートフォンを持つ必要があります.
Pythonベストプラクティスに続いて、プロジェクトの仮想環境を作成し、必要なパッケージをインストールします.
まず、プロジェクトディレクトリを作成します.
$ mkdir whatsapp-bot
$ cd whatsapp-bot
ここで、仮想環境を作成し、必要なパッケージをインストールします.
MacOSとUnixシステムの場合:
$ python3 -m venv whatsapp-bot-venv
$ source whatsapp-bot-venv/bin/activate
(whatsapp-bot-venv) $ pip install twilio django requests
Windows用
$ python3 -m venv whatsapp-bot-venv
$ whatsapp-bot-venv\Scripts\activate
(whatsapp-bot-venv) $ pip install twilio django requests

Twilioの設定


あなたはあなたのWhatsAppボットとしてtwilio番号を使用することができます無料twilioアカウントが必要になります.無料アカウントは、数週間のメッセージを送信し、受信するのに十分な試用残高が付属しています.あなたのトライアルバランス後にあなたのボットを使用し続ける場合は、あなたのアカウントをトップにすることができます.
あなたはWhatsAppから許可を取得しない限り、あなた自身の番号を使用することはできませんが、twilio番号は十分にこのプロジェクトに適しています.あなたのtwilioサンドボックスを設定する必要がありますhere twilio番号にWhatsAppメッセージを送信することによって.これは一度だけ、一度だけ行う必要があります.

ウェブフックの設定


Twitoは、我々のアプリケーションと通信するWebhookと呼ばれるものを使用します.私たちのchatbotアプリケーションは、このようにtwilioは、我々のアプリケーションと通信できるように、このwebhookとして構成するエンドポイントを定義する必要があります.
Djangoは、我々がそれをすることができるウェブフレームワークです.Django対フラスコ議論は永遠に続くことができますが、私はちょうど私が数週間前にそれを使い始めたので、私はdjangoを使用するのを選びました、そして、私はそれを使うことに慣れたかったです.あなたは同じことを達成するためにフラスクを使用することができますが、コードは異なります.
まず、あなたのwhatsapp-bot ディレクトリとDjangoプロジェクトを確立します.
(whatsapp-bot-venv) $ django-admin startproject bot
これにより、プロジェクトのスケルトンの一部のファイルが自動生成されます.
bot/
    manage.py
    bot/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
今、あなたが作成したディレクトリに移動しますmanage.py ) そして、あなたのアプリケーションディレクトリを作成します.
(whatsapp-bot-venv) $ python manage.py startapp bot_app
これにより、次のようになります.
bot_app/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py
単独でこのchatbotのために、我々はほとんどのこれらのファイルを必要としません.あなたが完全なウェブサイトにあなたのプロジェクトを拡大すると決めるならば、彼らは関係があるだけです.
我々がする必要があることは、twilioのためにWebhookを定めることです.あなたの意見.Py File WebアプリケーションのHTTPリクエストとレスポンスを処理します.Twitoはあなたの指定されたURLにポストリクエストを送ります.そして、それはTwitoへの反応を返すView機能にマップします.
from twilio.twiml.messaging_response import MessagingResponse
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def index(request):
    if request.method == 'POST':
        # retrieve incoming message from POST request in lowercase
        incoming_msg = request.POST['Body'].lower()

        # create Twilio XML response
        resp = MessagingResponse()
        msg = resp.message()
これはindex ビューは、twilio投稿要求を処理します.ユーザがチャットボットに送るメッセージを取得し、ユーザが自分のメッセージを暗号化するかどうかを心配する必要がないように、小文字に変換します.
twilioはWebhookからツイム(XMLベースの言語)応答を期待します.MessagingResponse() レスポンスオブジェクトを作成します.
resp = MessagingResponse()
msg = resp.message()
msg.body('My Response')
msg.media('https://example.com/path/image.jpg')
これを行うと、テキストとメディアの両方からなる応答を作成します.メディアがURLの形でなければならなくて、公的にアクセス可能でなければならない点に注意してください.
from twilio.twiml.messaging_response import MessagingResponse
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse

@csrf_exempt
def index(request):
    if request.method == 'POST':
        # retrieve incoming message from POST request in lowercase
        incoming_msg = request.POST['Body'].lower()

        # create Twilio XML response
        resp = MessagingResponse()
        msg = resp.message()

        if incoming_msg == 'hello':
            response = "*Hi! I am the Quarantine Bot*"
            msg.body(response)

        return HttpResponse(str(resp))
この知識によって、我々は今、Aを返すことができますHttpResponse それはTriilioにメッセージを送るために伝えます.アスタリスク(*)は、テキストの書式設定です- WhatsAppボールド私たちのメッセージ.
これはURLにリンクしない限り動作しません.にbot_app ディレクトリを作成するurls.py . 次のコードを含みます
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]
さて、ルートurlconfを必要としますbot_app/urls.py . インbot/urls.py , 次のコードを追加します
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('bot/', include('bot_app.urls')),
    path('admin/', admin.site.urls),
]
The include() 関数は他のurlconfsを参照できる.ジャンゴが遭遇するたびにinclude() , それは、その点までマッチしたURLのどんな部分でもチョップして、更なる処理のために付属のULCONFに残りのストリングを送ります.
Twitoがポストリクエストを送るときbot/ , リファレンスbot_app.urls , どの参照views.index , リクエストが処理されるところ.

ITのテスト


あなたがディレクトリにいることを確認してくださいmanage.py , ラン
(whatsapp-bot-venv) $ python manage.py runserver

あなたのDjangoアプリケーションが動いているポートを見るべきです.このスクリーンショットでは、ポート8000です.しかし、これはあなたのコンピュータからまだ動いています.このサービスをインターネットから到達できるようにするにはngrokを使う必要があります.
番目のターミナルウィンドウを開き、実行する
$ ngrok http 8000

転送を開始する行は、あなたのコンピュータにリクエストをリダイレクトするために、パブリックURL ngrokを使用します.このスクリーンショットでhttps://c21d2af6.ngrok.io ポート8000上で私のコンピュータに要求をリダイレクトすることです.このURLをコピーしてTwilio console .

“メッセージが来る”フィールドにURLをペーストします.リクエストメソッドをHTTP POSTに設定します.
私のアプリを使用する場合は、使用するhttps://zeyu2001.pythonanywhere.com/bot/ 代わりに、“ときにメッセージが”フィールドに来る.
あなたのsettings.py , また、あなたのngrok URLをALLOWED_HOSTS .
今、あなたは、このチュートリアルの開始時にサンドボックスに接続してスマートフォンからチャットボットにメッセージを送信を開始することができます.' hello 'を送信してみてください.

サードパーティAPIの追加


我々の特徴の大部分を成し遂げるために、我々はサードパーティのAPIを使わなければなりません.例えば、犬CEOのDog API ランダムな犬のイメージを取得するたびに、ユーザーが単語'犬'を送信します.
import requests

...

elif incoming_msg == 'dog':
    # return a dog pic
    r = requests.get('https://dog.ceo/api/breeds/image/random')
    data = r.json()
    msg.media(data['message'])

...
requests.get(url) 指定したURLにgetリクエストを送信し、応答を返します.応答がJSONにあるので、我々は使用できますr.json() Python辞書に変換する.では、msg.media() 犬の写真を応答に追加します.

マイコード


最後のchatbotには次の機能があります.
  • ランダム猫画像
  • ランダム犬イメージ
  • ランダム動機引用
  • レシピからのレシピの取得
  • 様々なソースから最新の世界ニュース
  • 各国の統計情報
  • R/MEMES subredditからのミームのトレンド
  • < div >

    ウェブフックの配備


    < tt >コーディングを終えたら、どこかにウェストフックを展開して、24/7を実行します.PythonAnywhere 無料のJJangoフレンドリーなホスティングサービスを提供しますp >
    プロジェクトにプロジェクトを展開するには、プロジェクトをアップロードしますGitHub そして、documentation Webアプリケーションを設定するにはp >
    一度配備され、Webhookが新しいURLに設定されるように、twilioサンドボックスの設定を更新しますhttps://zeyu2001.pythonanywhere.com/bot/ ).


    読んでいただきありがとうございます!


    今、あなたは非常に独自のWhatsApp chatbot twilioを設定する方法を知っている.何か質問があれば、この投稿についてコメントしてください.p >