Как получать события webhooks в django?

У меня зарегистрирован webhook и есть php-файл, который получает сообщение и сбрасывает его в текстовый файл. Я хочу добиться того же самого в django, но функция никогда не вызывается, когда событие срабатывает

код php ''

    <?php
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        $input = file_get_contents('php://input');
        $data = json_decode($input, true);
        file_put_contents('messages_log.txt', print_r($data, true), FILE_APPEND);
        $formatted_output = '';
        $timestamp = date('d-M-Y-H:i');
        if (isset($data['data']['message']['body_message']['content']) && !empty($data['data']['message']['body_message']['content'])) {
            $content = $data['data']['message']['body_message']['content'];
            $from_contact = isset($data['data']['message']['from_contact']) ? $data['data']['message']['from_contact'] : 'Unknown';
            $formatted_output = sprintf("%s :: %s --> %s", $timestamp, $from_contact, $content);
        } else {
            $messages = isset($data['data']['data']['messages'][0]) ? $data['data']['data']['messages'][0] : null;
            if ($messages) {
                $message = isset($messages['message']) ? $messages['message'] : [];
                $content = isset($message['conversation']) ? $message['conversation'] : '';
                $from_contact = isset($messages['verifiedBizName']) ? $messages['verifiedBizName'] : '';
                if (!empty($content) && !empty($from_contact)) {
                    $formatted_output = sprintf("%s :: %s --> %s", $timestamp, $from_contact, $content);
                }
            }
        }
        if (!empty($formatted_output)) {
            file_put_contents('formatted

_messages_log.txt', $formatted_output . PHP_EOL, FILE_APPEND);
    }
    http_response_code(200);
    echo json_encode(['status' => 'received']);
} else {
    http_response_code(405);
    echo json_encode(['status' => 'Method Not Allowed']);
}
?>

'''

Всякий раз, когда я получаю или отправляю сообщение из whatsapp, оно попадает сюда в "messages_log.txt"

Код django на языке Python (views.py)

import os
import json
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods

@csrf_exempt  # Exempt from CSRF checks as it's a webhook
def home(request):
    with open('jimmy', 'w') as file:
            file.write(f"acid\n")
    if request.method == 'POST':
        raw_data = request.body.decode('utf-8')

        try:
            data = json.loads(raw_data)
        except json.JSONDecodeError:
            return JsonResponse({'status': 'Invalid JSON'}, status=400)

        file_path = os.path.join(os.getcwd(), 'messages_log.txt')

        with open(file_path, 'a') as file:
            file.write(f"{json.dumps(data, indent=4)}\n")

        return JsonResponse({'status': 'received'}, status=200)

    # Respond with a 405 Method Not Allowed for non-POST requests
    return JsonResponse({'status': 'Method Not Allowed'}, status=405)

Он никогда не получал никаких событий Whatsapp. Я попробовал отправить материал вручную по url. вот так

import requests
import json

url = 'test'  # Replace with your actual URL

# Sample JSON payload to simulate the webhook event
payload = {
    "data": {
        "message": {
            "body_message": {
                "content": "This is a test message"
            },
            "from_contact": "Test Contact"
        },
        "data": {
            "messages": [
                {
                    "message": {
                        "conversation": "Fallback message content"
                    },
                    "verifiedBizName": "Test Business"
                }
            ]
        }
    }
}

json_payload = json.dumps(payload)

response = requests.post(url, headers={'Content-Type': 'application/json'}, data=json_payload)

print(f"Status Code: {response.status_code}")

try:
    response_json = response.json()
    print(f"Response JSON: {response_json}")
except requests.exceptions.JSONDecodeError:
    print("Response content is not JSON:")
    print(response.text)

Вы получаете сообщение, но само событие Whatsapp не получает. Php получает сообщение и полученное сообщение выглядит следующим образом

Array
(
    [instance_id] => XXXXXXXXXXXXX
    [data] => Array
        (
            [event] => contacts.update
            [data] => Array
                (
                    [0] => Array
                        (
                            [id] => 123123123@s.whatsapp.net
                            [imgUrl] => changed
                        )

                )

        )

Не знаю, почему я не могу получить Whatsapp даже на python

Это был довольно странный опыт

Для регистрации вебхука компании необходимо зарегистрировать URL таким образом

https://socialization.online/api/set_webhook?webhook_url=https%3A%2F%2Fwebhook.site%2F1b25464d6833784f96eef4xxxxxxxxxx&enable=true&instance_id=609ACF283XXXX&access_token=66d5ccXXXXX

Так что для PHP-сайта я заменил эту часть "https%3A%2F%2Fwebhook.site%2F" на свой php-сайт, и он заработал.

Я связался со службой поддержки, и они сказали, что для django вам нужно создать url вашего сайта со слизью "1b25464d6833784f96eef4xxxxxxxx", например mywebiste.com/webhook/1b25464d6833784f96eef4xxxxxxxxxx, чтобы он работал, тогда как в php это просто mywebsite.com/webhook.php

Вернуться на верх