나는 격리 기간에 이성을 유지하도록 파이썬 왓츠 앱 로봇을 구축했다

이런 유행병은 나의 정신과 정서 건강에 막대한 손해를 끼쳤다.저에게 시간을 주고 주위 사람들의 생활을 더욱 아름답게 하기 위해 또 다른 파이썬 프로젝트를 시작했습니다. 이번에는 Whats App 로봇입니다. 저에게 무작위 고양이 사진, 유행하는 모델, 최고의 요리 레시피, 물론 최신 세계 뉴스와 COVID19 통계 데이터를 보내주었습니다.
온전한 프로젝트는 나의 GitHub repository에서 찾을 수 있고, 나의 웹 훅은 https://zeyu2001.pythonanywhere.com/bot/에서 생방송된다.

선결 조건


우리는 Python, Django 웹 프레임워크, ngrok, Twilio를 사용하여 이 채팅 로봇을 만들 것이다.필요한 패키지를 설치하는 방법을 보여 드리겠습니다. 하지만 Python(3.6 또는 업데이트 버전)과 활성 전화 번호와 Whats App이 있는 스마트폰을 설치해야 합니다.
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 구성


무료 Twilio 계정이 필요합니다. 이 계정은 Twilio 번호를 Whats App 로봇으로 사용할 수 있도록 합니다.무료 계좌에는 앞으로 수주 내에 메일을 받을 수 있는 시산표가 첨부되어 있다.만약 당신이 시산표를 다 쓴 후에 로봇을 계속 사용하기를 원한다면, 당신은 당신의 계좌를 가득 채울 수 있습니다.
Whats App의 허가를 받지 않으면 자신의 번호를 사용할 수 없지만 Twilio 번호는 이 프로젝트에 충분합니다.Twilio 번호로 Whats App 메시지를 보내서 Twilio 샌드박스here를 설정해야 합니다.이것은 반드시 한 번 해야 하며, 단지 한 번만 할 수 있다.

Webhook 설정


Twilio는 이른바 웹훅을 사용하여 우리의 응용 프로그램과 통신합니다.우리의 채팅 로봇 응용 프로그램은 Twilio가 우리의 응용 프로그램과 통신할 수 있도록 이 웹 훅으로 설정할 단점을 정의해야 한다.
Django는 우리가 이렇게 할 수 있도록 허락하는 웹 프레임워크입니다.Django와 Flask의 논쟁은 영원할 수 있지만, Django를 사용하기로 선택한 것은 단지 내가 몇 주 전에야 그것을 사용하기 시작했기 때문이다. 나는 그것을 사용하는 것에 익숙해지고 싶다.Flask를 사용하여 동일한 기능을 수행할 수 있지만 코드는 다릅니다.
먼저 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
이 채팅 로봇만 말하자면, 우리는 이 파일의 대부분을 필요로 하지 않는다.프로젝트를 완전한 사이트로 확장하기로 결정했을 때만 그것들이 관련된다.
우리가 해야 할 일은 Twilio를 위한 웹 훅을 정의하는 것이다.당신의 관점.py 파일은 웹 응용 프로그램의 HTTP 요청과 응답을 처리합니다.Twilio는 지정한 URL에 POST 요청을 전송합니다. 이 URL은 보기 함수에 매핑되고 이 함수는 Twilio에 대한 응답을 반환합니다.
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()
Twilio POST 요청을 처리하는 뷰index가 생성됩니다.우리는 사용자가 채팅 로봇에 보낸 메시지를 검색하여 소문자로 변환합니다. 그러면 사용자가 메시지를 대문자로 보낼지 걱정할 필요가 없습니다.
Twilio는 우리의 웹 훅이 TwiML (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))
이러한 지식이 있으면 우리는 현재 Twilio에게 메시지를 "헤이! 나는 격리 로봇"으로 사용자에게 보낼 수 있는 HttpResponse 으로 돌아갈 수 있다.별표(*)는 텍스트 형식에 사용됩니다. - 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),
]
include() 함수는 다른 URLConf를 참조할 수 있습니다.Django가 만났을 때include() 해당 점과 일치하는 URL의 모든 부분을 잘라내고 나머지 문자열을 포함된 URLconf로 보내 처리합니다.
Twilio가 bot/ 에 POST 요청을 보내면 bot_app.urls 이 요청을 참조하고 views.index 이 요청을 처리합니다.

그것이 유효한지 테스트하다

manage.py 디렉토리에 있는지 확인하고 실행하십시오.
(whatsapp-bot-venv) $ python manage.py runserver

Django 응용 프로그램이 실행하는 포트를 보십시오.이 화면 캡처에서 그것은 포트 8000이다.그러나 이것은 여전히 당신의 컴퓨터에서 실행되고 있습니다.이 서비스가 인터넷에서 접근할 수 있도록 하기 위해서, 우리는ngrok를 사용해야 한다.
두 번째 터미널 창을 열고 실행하기
$ ngrok http 8000

전송으로 시작하는 줄은ngrok에서 요청을 컴퓨터로 바꾸는 데 사용할 공공 URL을 알려 줍니다.이 화면 캡처에서 https://c21d2af6.ngrok.io 포트 8000에 있는 내 컴퓨터로 리디렉션을 요청합니다.이 URL을 복사한 다음 로 돌아갑니다Twilio console.

메시지 수신 필드에 URL을 붙여넣습니다.요청 방법을 HTTP post로 설정합니다.
내 응용 프로그램을 사용하려면 (메시지가 들어왔을 때) 필드 대신 https://zeyu2001.pythonanywhere.com/bot/ 를 사용하십시오.settings.py 에서 ngrok URL을 ALLOWED_HOSTS 중 하나로 추가해야 합니다.
이제 이 강좌를 시작할 때 샌드박스에 연결된 스마트폰에서 채팅 로봇에 메시지를 보내기 시작할 수 있습니다.안녕하십니까?

타사 API 추가


대부분의 기능을 수행하려면 타사 API를 사용해야 합니다.예를 들어 사용자가 단어'Dog'를 보낼 때마다 나는 Dog 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 형식이므로 Python 사전으로 변환하려면 r.json() 을 사용하십시오.그리고 우리는 msg.media() 개 그림을 응답에 추가합니다.

내 최종 코드


나의 최종 채팅 로봇은 다음과 같은 기능을 포함한다.
  • 랜덤cat 이미지
  • 랜덤 개 이미지
  • 랜덤 동기 참조
  • 모든 레시피에서 레시피 얻기
  • 각종 출처의 최신 세계 뉴스
  • 국가별 최신 COVID19 통계
  • r/memes-subreddit의 추세 모델

  • Webhook 배포


    인코딩이 완료되면 웹 훅을 어딘가에 배치해서 전천후 실행하기를 원할 수도 있습니다.PythonAnywhere 무료 Django 친선 위탁 관리 서비스 제공


    Pythonywhere에 프로젝트를 배치하기 위해 프로젝트를 GitHub에 업로드하고 documentation에 따라 웹 응용 프로그램을 설정하십시오


    배치 후 Twilio 샌드박스 설정을 업데이트하여 웹훅을 새로운 URL(예: https://zeyu2001.pythonanywhere.com/bot/로 설정합니다)


    읽어주셔서 감사합니다!


    이제 Twilio를 사용하여 자신의 Whats App 채팅 로봇을 만드는 방법을 알고 있습니다.만약 당신에게 무슨 문제가 있으면 언제든지 평론을 발표하세요

    좋은 웹페이지 즐겨찾기