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

WhatsApp WebHook如何返回响应?ASP.NET MVC 5实现咨询

实现WhatsApp WebHook收到消息后回复文本

要回复用户消息,不能直接通过WebHook的返回值发送响应——WebHook返回的200 OK只是告诉WhatsApp你已成功接收消息。真正要给用户发消息,需要主动调用WhatsApp Business Platform的发送消息API,步骤如下:

必要前提

你需要提前准备好:

  • WhatsApp Business Platform的访问令牌(Access Token)
  • 你的业务电话号码ID(Phone Number ID)
  • 确保你的服务器IP在Meta的IP白名单中(沙箱环境可能无需配置)

具体实现步骤

1. 从WebHook请求中提取用户信息

在你的Hook方法里,除了获取消息内容,还要拿到用户的电话号码(这是发送回复的目标号码):

[AcceptVerbs(HttpVerbs.Post)]
public async Task<ActionResult> Hook(Root data)
{
    Entry entry = data.entry.First();
    Change change = entry.changes.First();
    List<Message> messages = change.value.messages;
    
    if (messages == null || !messages.Any())
    {
        return new HttpStatusCodeResult(HttpStatusCode.OK);
    }

    var incomingMessage = messages.First();
    string userPhone = incomingMessage.from; // 用户的WhatsApp号码
    string messageBody = incomingMessage.text.body;

    // 匹配特定消息内容后触发回复
    if (messageBody.Equals("OK", StringComparison.OrdinalIgnoreCase))
    {
        await SendWhatsAppReply(userPhone, "Have a great day!");
    }

    // 必须及时返回200,避免WhatsApp重复推送消息
    return new HttpStatusCodeResult(HttpStatusCode.OK);
}

2. 实现发送回复的方法

新增调用WhatsApp API的方法,用HttpClient发送POST请求:

private async Task SendWhatsAppReply(string userPhone, string replyText)
{
    // 替换为你的实际电话号码ID和访问令牌
    string phoneNumberId = "YOUR_PHONE_NUMBER_ID";
    string accessToken = "YOUR_ACCESS_TOKEN";
    string apiUrl = $"https://graph.facebook.com/v18.0/{phoneNumberId}/messages";

    using (var httpClient = new HttpClient())
    {
        // 设置请求头
        httpClient.DefaultRequestHeaders.Authorization = 
            new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessToken);
        httpClient.DefaultRequestHeaders.Accept.Add(
            new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

        // 构造请求体
        var requestBody = new
        {
            messaging_product = "whatsapp",
            to = userPhone,
            text = new { body = replyText }
        };

        var jsonContent = new StringContent(
            Newtonsoft.Json.JsonConvert.SerializeObject(requestBody),
            System.Text.Encoding.UTF8,
            "application/json");

        // 发送请求
        var response = await httpClient.PostAsync(apiUrl, jsonContent);
        
        // 可选:处理响应,比如记录错误日志
        if (!response.IsSuccessStatusCode)
        {
            string errorContent = await response.Content.ReadAsStringAsync();
            // 这里添加日志记录逻辑
        }
    }
}

注意事项

  • WebHook超时问题:WhatsApp要求WebHook在10秒内返回响应,若发送API调用可能耗时,建议将发送逻辑放到后台任务(比如Hangfire、消息队列),避免超时。
  • 异常处理:要处理API调用失败的情况,比如网络错误、令牌过期,可添加重试机制或告警逻辑。
  • API版本:示例使用v18.0,建议根据Meta官方文档使用最新版本。

内容的提问来源于stack exchange,提问作者Scott Norberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:22:30