웹 서비스 WhatsApp Cloud API 및 Flask 구축: 템플릿 메시지 보내기 - 1부

16063 단어 flaskapipython
Meta는 비즈니스 또는 개발자가 서비스를 확장하거나 더 나은 커뮤니케이션을 허용하기 위해 액세스할 수 있는 API를 출시했습니다.

이 기사 시리즈에서는 Flask 및 Cloud API를 사용하여 간단한 웹 서비스를 구축합니다. 시리즈가 끝나면 전화번호로 메시지를 보내고 웹후크를 통해 알림을 받는 데 사용할 수 있는 Flask 서버를 배포할 것입니다.

좋아, 그렇지? 프로젝트를 구성하고 템플릿 메시지를 보내는 것부터 시작하겠습니다.

요구 사항



메타 개발자와 비즈니스 계정을 구성해야 합니다. 여기에 몇 가지documentation가 있지만 아래 단계를 설명하겠습니다.
  • 메타 비즈니스 계정을 만듭니다.
  • WhatsApp 비즈니스 계정을 만듭니다.
  • WhatsApp 비즈니스 계정을 Meta 비즈니스 계정에 연결합니다.
  • Meta 비즈니스 계정 이름으로 새 응용 프로그램을 만듭니다.
  • Whatsapp를 구성합니다.

  • 프로젝트 구성



    플라스크 프로젝트를 포함할 디렉터리를 만듭니다.

    mkdir flask-whatsapp-api 
    cd flask-whatsapp-api 
    


    그런 다음 가상 환경을 만듭니다.

    python3.10 -m venv venv
    


    그리고 환경을 활성화하십시오.

    source venv/bin/activate
    


    다음으로 종속성을 설치합니다.

    pip install Flask requests python-dotenv gunicorn
    


    Flask 앱 만들기



    프로젝트의 루트에서 config.py 파일을 만듭니다. 이 파일은 env 변수를 로드하는 데 도움이 됩니다.

    from dotenv import load_dotenv
    load_dotenv()
    


    Whatsapp 클라이언트 추가



    다음으로 내부에 app 파일이 있는 __init__.py라는 새 디렉토리를 만듭니다. 이것은 파이썬에게 이것이 패키지임을 알리고 가져오기에 도움이 될 것입니다.app 디렉토리 내에서 whatsapp_client.py라는 파일을 만듭니다. 이 파일에는 Whatsapp Cloud API와 상호 작용하는 래퍼가 포함됩니다.
    외부 서비스와 상호 작용할 때 래퍼(클래스 또는 함수)를 작성하는 것은 항상 흥미로운 습관입니다.

    이 경우 WhatsAppWrapper 라는 클래스를 작성합니다. 기본 초기화부터 시작하겠습니다.

    # app/whatsapp_client.py
    
    import os
    import requests
    
    import json
    
    
    class WhatsAppWrapper:
    
        API_URL = "https://graph.facebook.com/v13.0/"
        API_TOKEN = os.environ.get("WHATSAPP_API_TOKEN")
        NUMBER_ID = os.environ.get("WHATSAPP_NUMBER_ID")
    
        def __init__(self):
            self.headers = {
                "Authorization": f"Bearer {self.API_TOKEN}",
                "Content-Type": "application/json",
            }
            self.API_URL = self.API_URL + self.NUMBER_ID
    
        def send_template_message(self, template_name, language_code, phone_number):
            pass
    

    send_template_message 메서드를 작성해 봅시다. requests 패키지를 사용하여 Cloud API에 요청하고 가능한 경우 응답을 반환합니다.

    ...
        def send_template_message(self, template_name, language_code, phone_number):
    
            payload = json.dumps({
                "messaging_product": "whatsapp",
                "to": phone_number,
                "type": "template",
                "template": {
                    "name": template_name,
                    "language": {
                        "code": language_code
                    }
                }
            })
    
            response = requests.request("POST", f"{self.API_URL}/messages", headers=self.headers, data=payload)
    
            assert response.status_code == 200, "Error sending message"
    
            return response.status_code
    


    좋습니다. 래퍼가 준비되었으므로 이제 Flask 웹 애플리케이션을 작성하고 POST 엔드포인트를 추가합니다.

    Flask 웹 앱 추가


    app 디렉토리 내에서 main.py라는 새 파일을 만듭니다. 여기에는 API 경로가 포함됩니다.

    import os
    
    from flask import Flask, jsonify, request
    from app.whatsapp_client import WhatsAppWrapper
    
    app = Flask(__name__)
    
    VERIFY_TOKEN = os.environ.get('WHATSAPP_HOOK_TOKEN')
    
    
    @app.route("/")
    def hello_world():
        return "Hello World!"
    
    
    @app.route("/send_template_message/", methods=["POST"])
    def send_template_message():
        pass
    

    send_template_message 컨트롤러를 작성해 봅시다. 기본적으로 필드를 확인하고 WhatsApp 클라이언트를 초기화한 다음 메시지를 보내야 합니다.

    @app.route("/send_template_message/", methods=["POST"])
    def send_template_message():
        """_summary_: Send a message with a template to a phone number"""
    
        if "language_code" not in request.json:
            return jsonify({"error": "Missing language_code"}), 400
    
        if "phone_number" not in request.json:
            return jsonify({"error": "Missing phone_number"}), 400
    
        if "template_name" not in request.json:
            return jsonify({"error": "Missing template_name"}), 400
    
        client = WhatsAppWrapper()
    
        response = client.send_template_message(
            template_name=request.json["template_name"],
            language_code=request.json["language_code"],
            phone_number=request.json["phone_number"],
        )
    
        return jsonify(
            {
                "data": response,
                "status": "success",
            },
        ), 200
    


    이 기사의 경로가 준비되었습니다. gunicorn로 서버를 생성 및 실행하고 env 변수를 구성해 보겠습니다.

    프로젝트 실행



    WhatsApp API에서 제공하는 토큰과 ID를 사용하므로 환경 변수로 사용하는 것이 중요합니다.

    프로젝트의 루트에 .env 파일을 생성하고 다음 값을 증명했습니다.

    WHATSAPP_API_TOKEN=
    WHATSAPP_NUMBER_ID=
    


    대시보드에 제공된 값을 추가합니다.



    프로젝트의 루트에 wsgi.py 라는 새 파일을 추가합니다. 이것은 gunicorn에서 Flask 응용 프로그램을 실행하는 데 사용됩니다.

    from app.main import app
    
    if __name__ == "__main__":
        app.run()
    


    그런 다음 다음 명령으로 프로젝트를 시작합니다.

    gunicorn -w 4 wsgi:app
    


    귀하의 응용 프로그램은 http://127.0.0.1:8000에서 실행됩니다.

    다음 페이로드를 사용하여 POSThttp://127.0.0.1:8000/send_message 요청을 수행합니다.

    {
        "template_name": "hello_world",
        "language_code": "en_US",
        "phone_number": "RECIPIENT_PHONE_NUMBER"
    }
    


    그리고 해당 번호로 WhatsApp 메시지를 받게 됩니다.



    그리고 우리는 WhatsApp Cloud API와 Flask를 사용하는 웹 서비스의 첫 번째 버전을 가지고 있습니다. 다음 부분에서는 Heroku에 Flask 애플리케이션을 배포하고 웹후크를 구성합니다. 계속 지켜봐주세요.🤟‍

    무언가를 추가하고 싶거나 의견이 있으십니까? 댓글 섹션에서 이에 대해 논의해 보겠습니다.

    bloggu.io을(를) 사용하여 게시된 기사. 무료로 사용해 보세요.

    좋은 웹페이지 즐겨찾기