You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Flask搭建WhatsApp API Webhook问题:无法接收事件负载

解决Azure部署Webhook接收WATI事件负载的问题

一、先修复Azure Function App代码的核心问题

你的Function App代码存在几个致命问题,直接导致请求无法处理、日志无输出:

  1. 缩进错误:name = req.params.get('name')与上方logging.info缩进层级不一致,Python会抛出语法错误,请求根本无法进入处理逻辑。
  2. 日志输出错误:Azure Function仅捕获logging模块的输出,print()内容不会出现在日志流中。
  3. 负载结构不匹配:WATI发送的Webhook负载不包含name字段,你需要针对WATI的实际事件结构解析数据。

修正后的Function App代码示例:

import azure.functions as func
import logging 
import json 

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@app.route(route="HttpExample", methods=['POST']) 
def HttpExample(req: func.HttpRequest) -> func.HttpResponse: 
    logging.info('Python HTTP trigger function processed a request.')
    try:
        req_body = req.get_json()
        logging.info(f"Received payload: {json.dumps(req_body)}")
        # 提取WATI消息内容(根据WATI官方文档调整字段)
        message_text = req_body.get('messages', [{}])[0].get('text', {}).get('body')
        if message_text:
            logging.info(f"Extracted message: {message_text}")
            # 此处添加你的WATI业务逻辑(如调用API回复消息)
            return func.HttpResponse("Webhook received successfully", status_code=200)
        else:
            logging.warning("No valid message text found in payload")
            return func.HttpResponse("Invalid payload structure", status_code=400)
    except ValueError:
        logging.error("Failed to parse JSON payload")
        return func.HttpResponse("Invalid JSON format", status_code=400)

二、Azure部署的关键配置检查

1. 确认HTTPS端点正确性

WATI要求Webhook必须使用HTTPS,Azure服务默认提供HTTPS域名,需确保WATI后台填写的URL格式正确:

  • Function App:https://<你的函数应用名>.azurewebsites.net/api/HttpExample(注意末尾路由名要与代码中route参数一致)
  • Web App:https://<你的Web应用名>.azurewebsites.net/<你的Flask端点路径>

2. 配置CORS规则

WATI的请求可能触发跨域检查,需在Azure后台添加允许的来源:

  • Function App:进入「平台功能」→「CORS」→ 添加*(测试用,上线后可限制为WATI官方域名)
  • Web App:进入「平台功能」→「CORS」→ 同样添加允许的域名

3. 关闭不必要的身份验证

你的Function App已设置AuthLevel.ANONYMOUS,这是正确的(WATI不会携带Azure认证密钥)。如果用Web App,需确保未启用「App Service身份验证」,除非你专门配置了WATI的认证方式。

三、Webhook测试与排查方法

  1. 用Postman模拟请求:构造符合WATI格式的POST请求,直接发送到Azure端点,检查返回状态和日志流。
  2. 查看Azure监控日志:除了日志流,可在Application Insights中查看请求轨迹,确认请求是否到达、是否有报错。
  3. 使用WATI后台测试功能:WATI通常提供Webhook测试工具,发送测试事件后查看后台的失败提示(如超时、403错误等)。

四、Flask Web App部署额外注意事项

如果选择用Web App替代Function App,需完成以下配置:

  • 在requirements.txt中添加flask、WATI等依赖
  • 编写Flask应用的POST端点逻辑
  • 在Azure Web App的「配置」→「常规设置」中设置启动命令:gunicorn --bind=0.0.0.0 --timeout 600 app:app

内容的提问来源于stack exchange,提问作者CsG.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:35:28