
您希望用户通过WhatsApp与您的企业联系并从您真正信任的模型那里获得答案——而不是一个脆弱的关键词树。本指南将指导您完成端到端的DeepSeek WhatsApp集成:一个Python webhook接收器,监听Meta的WhatsApp云API,将每条消息转发到`deepseek-v4-flash`,并在24小时对话窗口内回复。最终,您将拥有一个部署的机器人、一个经得起审计的成本模型,以及一个在`deepseek-chat` ID退役前的清晰迁移路径。代码使用Python和FastAPI编写;相同的模式也适用于Node.js。预计需要大约一下午的时间来完成一个实时测试号码。
What you’ll build

架构由三个移动部分组成:Meta侧的WhatsApp云API、您侧的公开HTTPS webhook和DeepSeek的推理端点。 POST /chat/completions 当用户给您的企业号码发消息时,Meta将一个JSON有效负载发布到您的webhook;您的处理器提取文本,调用DeepSeek,并通过Meta的Graph API发布回复。 DeepSeek V4-Flash 是这里正确的层级——在缓存未命中时,每百万输入令牌的费用为0.14美元,每百万输出费用为0.28美元,将每场对话的成本保持在几分之一美分。
关于模型选择的说明。DeepSeek-V4-Pro拥有1.6T总参数/49B活跃参数,与顶级闭源模型相媲美,而DeepSeek-V4-Flash则是284B总参数/13B活跃参数的“快速、高效且经济的选择”。对于聊天风格的客户消息,Flash已经足够。将Pro版保留用于需要代理式编码或研究工作流程的场景,其中基准提升值得大约7倍的成本差距。
Prerequisites
- 一个具有管理员访问权限的Meta商业账户(业务管理器)
- 一个Meta开发者账户和一个新应用,其中添加了WhatsApp产品
- 一个可以接收短信或语音进行验证的电话号码——新号码最方便
- 为webhook(ngrok适用于测试;Cloud Run、Fly.io或AWS Lambda适用于生产)提供一个公开的HTTPS端点。
- 一个DeepSeek API密钥——见 how to get a DeepSeek API key
- Python 3.11+ 及其
fastapi,uvicorn,httpx, and theopenaiSDK
Meta的先决条件列表映射清晰:一个业务经理管理员账户、一个Meta开发者账户、一个可以接收短信或语音验证的手机号码、一个公开的HTTPS端点用于webhooks,以及一个基本服务器(Node、PHP或在我们的案例中是Python)来存储令牌并调用Graph API。
第1步:创建Meta应用并连接WhatsApp
在Meta开发者中,创建一个新的业务类型应用并添加WhatsApp产品。在API设置部分,将应用连接到一个WhatsApp商业账户——要么选择一个现有的账户,要么创建一个新的账户——并保存WhatsApp商业账户ID,以便在API调用中使用。从同一面板中,复制测试手机号码ID和临时访问令牌。
临时令牌适用于接下来的十分钟测试。对于超过这个时间范围的事情,按照Meta的说明创建一个系统用户和一个永久访问令牌;否则,您的机器人将在第二天默默失效。
第2步:启动webhook接收器
该webhook有两个任务。在 GET,它通过回显来响应Meta的验证握手。 hub.challenge参数。 上。 POST它接收传入的消息并在五秒内确认。您的服务器必须在5秒内响应200 OK,Meta才会认为webhook已处理;如果连续失败5次,Meta将暂时禁用webhook,因此将DeepSeek调用推送到后台任务。
将以下内容保存为 main.py。它使用FastAPI加上后台任务,因此HTTP响应是即时的。
import os
import httpx
from fastapi import FastAPI, Request, BackgroundTasks, HTTPException
from openai import OpenAI
VERIFY_TOKEN = os.environ["WA_VERIFY_TOKEN"]
WA_TOKEN = os.environ["WA_ACCESS_TOKEN"]
PHONE_ID = os.environ["WA_PHONE_NUMBER_ID"]
GRAPH_URL = f"https://graph.facebook.com/v22.0/{PHONE_ID}/messages"
deepseek = OpenAI(
base_url="https://api.deepseek.com",
api_key=os.environ["DEEPSEEK_API_KEY"],
)
app = FastAPI()
@app.get("/webhook")
async def verify(request: Request):
params = request.query_params
if (params.get("hub.mode") == "subscribe"
and params.get("hub.verify_token") == VERIFY_TOKEN):
return int(params["hub.challenge参数。"])
raise HTTPException(status_code=403)
@app.post("/webhook")
async def receive(request: Request, background: BackgroundTasks):
payload = await request.json()
try:
msg = payload["entry"][0]["changes"][0]["value"]["messages"][0]
if msg.get("type") == "text":
background.add_task(handle_message, msg["from"], msg["text"]["body"])
except (KeyError, IndexError):
pass # status callbacks and other event shapes
return {"status": "ok"}
验证分支与Meta自身开发者文档中的模式匹配:端点非常简单——它返回hub.challenge参数。参数,验证系统将其作为请求参数发送。POST分支可以容忍非文本有效负载(状态收据、反应、媒体)而不会崩溃。
第3步:将DeepSeek集成到消息处理器中
Chat requests hit POST /chat/completions, the OpenAI-compatible endpoint at https://api.deepseek.com。OpenAI Python SDK保持不变——只有 base_url and api_key 修改。关键的是, the API is statelessDeepSeek不会记住其侧面的先前回合,因此对于多回合聊天,您必须在每个请求中重新发送对话历史。chat.deepseek.com的网页聊天会保留会话历史;API不会。如果您需要内存,请计划一个小型的每个用户消息存储(Redis、DynamoDB、Postgres)。
对于这个最小化机器人,我们将保持一个微小的内存存储。在生产前,请将其替换为真实数据库。
历史记录: dict[str, list[dict]] = {}
SYSTEM_PROMPT = (
"You are a concise WhatsApp assistant for ACME Coffee. "
"Answer in under 60 words. If you do not know, say so."
)
async def handle_message(wa_from: str, text: str):
history = 历史记录.setdefault(wa_from, [{"role": "system", "content": SYSTEM_PROMPT}])
history.append({"role": "user", "content": text})
resp = deepseek.chat.completions.create(
model="deepseek-v4-flash",
messages=history,
temperature=1.3, # general conversation
max_tokens=400,
)
reply = resp.choices[0].message.content
history.append({"role": "assistant", "content": reply})
历史记录[wa_from] = history[-20:] # keep last 10 turns
async with httpx.AsyncClient(timeout=15) as client:
await client.post(
GRAPH_URL,
headers={"Authorization": f"Bearer {WA_TOKEN}"},
json={
"messaging_product": "whatsapp",
"to": wa_from,
"type": "text",
"text": {"body": reply},
},
)
三种参数选择用于标记。 temperature=1.3 与DeepSeek的官方指南在一般对话和翻译方面相匹配。 max_tokens=400 设置回复长度;WhatsApp的阅读体验在几段简短段落之后就会变得糟糕。 model="deepseek-v4-flash" 直接针对成本效益层。如果您想要用于更难问题的思考模式,切换到 reasoning_effort="high" with extra_body={"thinking": {"type": "enabled"}};然后回复将包含 reasoning_content alongside the final content,您应该只将后者发送回WhatsApp。
第4步:公开webhook并在Meta中订阅
对于本地测试,运行 uvicorn main:app --port 8000 通过ngrok进行隧道传输。在生产环境中,在您已经使用的任何HTTPS后面部署。在Meta App仪表板中,转到WhatsApp → 配置,粘贴公共URL加上您的验证令牌,并订阅到 messages 字段。Meta关于创建webhook端点的文档确认这是注册的正确表面。
第5步:发送测试消息

在Meta的API设置面板中,发送 hello_world 模板到您的WhatsApp号码。对该线程回复任何文本。webhook应该触发,您的处理器应该调用DeepSeek,回复应该在几秒钟内出现。一旦您的测试webhook应用程序建立,请回复您创建的自与WhatsApp聊天线程,然后检查您的测试webhook以查看确认消息接收的事件。
Verify it worked
- 服务器日志显示POST请求返回200响应,以及解析后的消息体
- DeepSeek的计费控制台显示了消耗的令牌数量
deepseek-v4-flash - 用户在WhatsApp上收到连贯的回复,大约需要3秒左右
- 同一线程中的第二条消息引用了第一条(证明历史正在重新发送)
成本计算:V4-Flash的工作示例
2026年4月起的定价信息来自DeepSeek自有定价页面:缓存命中时每百万输入令牌0.0028美元,缓存未命中时每百万输入令牌0.14美元,每百万输出令牌0.28美元。DeepSeek对Flash的收费为每百万输入令牌0.14美元和每百万输出令牌0.28美元,对Pro的收费为每百万输入令牌0.435美元和每百万输出令牌0.87美元,在2026年5月31日前的75%促销期间(标价1.74美元/3.48美元)。高峰时段折扣于2025年9月5日结束,并随着V4版本未恢复。
想象一下繁忙的客户支持热线:每月10万次对话,平均每次6轮,用户消息100个令牌,回复200个令牌,系统提示300个令牌保持稳定,并在首次通话后缓存。
| Bucket | Tokens | Rate ($/M) | Cost |
|---|---|---|---|
| Input, cache hit (system prompt) | 300 × 600,000 = 180,000,000 | $0.0028 | $5.04 |
| 输入,缓存未命中(用户转向+历史记录) | ~250 × 600,000 = 150,000,000 | $0.14 | $21.00 |
| Output | 200 × 600,000 = 120,000,000 | $0.28 | $33.60 |
| Total / month | $59.64 |
600,000次模型调用仅需六十美元。在Meta对WhatsApp的每对话费用下,该数量的推理账单将相形见绌。欲深入了解价格表,请参阅以下指南的细分。 DeepSeek API pricing and the DeepSeek context caching 指南。不要跳过缓存未命中行——每个新用户消息在模型再次看到之前,都是对缓存前缀的未命中。不要在同一个计算中混合V4-Flash和V4-Pro的费率;选择一个层级并保持在其中。
从旧版模型ID迁移
如果你从2025年的教程中复制粘贴了代码,你很可能有 model="deepseek-chat" or model="deepseek-reasoner" 在其中。两者仍然有效,但deepseek-chat和deepseek-reasoner将在2026年7月24日15:59 UTC后完全退役且无法访问,目前分别路由到deepseek-v4-flash的非思考模式和思考模式。迁移只需一行代码更改。 model="deepseek-v4-flash" — base_url 保持不变。在截止日期之前测试,而不是在那天早上。
Common errors and fixes
| Symptom | Likely cause | Fix |
|---|---|---|
| Meta UI中Webhook验证失败 | 验证令牌不匹配或非200响应 | Confirm WA_VERIFY_TOKEN 与Meta中粘贴的值匹配;返回 req.query['hub.challenge参数。'] 作为纯文本 |
| 入站webhook在一天后停止到达 | 5次连续的非200响应;Meta已禁用它 | 在应用仪表板中重新启用,修复底层错误,在后台工作中添加超时 |
| 机器人回复一次,然后忽略用户 | 您不在24小时客户服务窗口内 | 要么让用户先发消息,要么发送一个已批准的实用模板 |
| DeepSeek返回401 | 错误的API密钥或基本URL | Confirm base_url="https://api.deepseek.com" 并且该密钥来自DeepSeek控制台——见 API authentication |
| 回复被截断在句子中间 | max_tokens too low |
提高到800-1500以获得更长的答案;V4支持高达384,000个输出令牌 |
| JSON模式回复为空 | 提示缺少单词“json”或模式 | 在系统提示中添加显式的示例模式和字面词“json” |
需要内化的另一个行为特点:V4的上下文窗口是 1,000,000 tokens 默认情况下输出到 384,000 tokens。在WhatsApp机器人上,您不会触及任何限制,但预留空间意味着您可以将长政策文件存入系统提示,并相信缓存定价可以保持成本合理。
生产环境加固

- 持久化历史记录。 替换内存中的
历史记录使用Redis键控wa_id. 限制存储的轮次,以保持每个用户的提示有限。 - 验证Meta签名。 验证
X-Hub-Signature-256头部在每个POST上;拒绝任何不匹配的内容。 - 添加一个后备方案。 如果DeepSeek返回5xx错误,请发送礼貌的“我遇到了麻烦——稍后再试”信息,而不是保持沉默。
- 尊重同意。 每个用户存储同意时间戳和来源;WhatsApp的商业消息政策在质量上得到执行,而不仅仅是数量上。
- 每个的速率限制
wa_id. 单个用户的一次入站突发不应扩散到200个DeepSeek调用。
Next steps
两个自然扩展。首先,使机器人多模态:接收WhatsApp语音笔记,将其转录,然后通过DeepSeek处理文本。其次,添加工具调用功能,使机器人可以查询订单状态,而不是猜测,而是针对您的真实后端。相同的FastAPI处理器是两者的基础。如果您更愿意在更友好的早期原型构建的聊天平台上构建,请参考 DeepSeek Telegram机器人教程 覆盖了几乎相同的模式,但用户入门流程更轻量,以及 DeepSeek Discord机器人指南 这展示了如何运行相同的处理器针对Discord的网关。对于更广泛的集成目录,请参考 DeepSeek tutorials 网站上的每个步骤都有索引。
在您发货之前的一个主要来源参考:DeepSeek的官方 V4 Preview release notes 文档,其中以DeepSeek自己的话描述了模型ID、双模式行为和遗留退休日期。请将其添加到书签中。
DeepSeek AI Guide is an independent resource and is not affiliated with DeepSeek or its parent company. Model IDs, pricing and API behaviour change; check the official DeepSeek documentation and pricing page before committing to a production decision.
DeepSeek WhatsApp集成实际上是如何工作的?
三个组件相互通信:Meta端的WhatsApp Cloud API、您服务器上的公共HTTPS webhook以及DeepSeek的端点。 POST /chat/completions Meta将入站消息以JSON格式发送到您的webhook;您的处理器使用指向DeepSeek的OpenAI SDK调用DeepSeek。 https://api.deepseek.com;您通过Graph API发布回复。参见 DeepSeek API documentation 了解完整的请求形状。
运行DeepSeek驱动的WhatsApp机器人的成本是多少?
DeepSeek推理是成本较低的部分。V4-Flash每百万输入令牌(缓存未命中)费用为0.14美元,每百万输出费用为0.28美元。典型的6轮支持对话在模型侧的费用通常低于1美分。Meta从WhatsApp Business定价中收取的每场对话费用通常超过AI账单。使用数组计算数字。chat.deepseek.com的网页聊天在服务器端保持会话历史,但API集成必须在客户端存储历史,通常以用户的V4-Flash为键。 DeepSeek pricing calculator.
DeepSeek能否记住WhatsApp消息之间的对话?
并非如此。DeepSeek API是无状态的——每个请求都必须包含之前的 messages 几乎所有WhatsApp用例都使用V4-Flash:客户支持、FAQ转移、接待机器人、日程安排。它是一个总容量为284B / 活跃13B的MoE模型,适用于高吞吐量。只有在您的机器人进行严肃的代理工作(代码生成、多步骤研究)且大约7倍输出成本溢价能够通过基准质量体现其价值时才使用。 wa_id 在Redis或数据库中。该 DeepSeek API best practices 指南涵盖了修剪和缓存该历史的模式。
我应该为WhatsApp使用哪个DeepSeek模型——V4-Flash还是V4-Pro?
仅当您的机器人进行严肃的代理工作(代码生成、多步骤研究)且大约7倍输出成本溢价能够通过基准质量体现其价值时才使用。 DeepSeek V4-Pro 仅当您的机器人进行严肃的代理工作(代码生成、多步骤研究)且大约7倍输出成本溢价能够通过基准质量体现其价值时才使用。
我是否需要像Twilio这样的商业解决方案提供商来使用WhatsApp API?
由于Meta推出了云API,任何拥有验证的Meta商业账户的企业都可以直接集成,无需BSP——云API可以通过标准REST API调用免费访问。BSPs为每条消息提供管理仪表板和分析服务,并收取额外费用。如果您熟悉编写webhook处理器——既然您已经读到这儿,您应该熟悉——可以直接进行。对于更广泛的集成工具包,请参阅 DeepSeek tutorials 目录。
Sources & Methodology
Primary sources
- OfficialDeepSeek API documentationEndpoints, request/response shape, model IDsLast checked: April 30, 2026
- PricingDeepSeek API pricing pagePer-1M-token rates, billing units, cache-hit pricingLast checked: April 30, 2026
- OfficialDeepSeek news: V4 Preview release notesV4预览版发布公告及迁移时间表Last checked: April 30, 2026
Methodology
Information in this article was checked against the official DeepSeek documentation, the article's cited primary sources, and the deepseekai.guide pricing dataset on the date shown above. Where third-party numbers are quoted, the originating source is linked inline so the reader can verify and re-check.
Data confidence
High for facts cited inline with primary-source links; medium for context narrative.
Editorial note
AI tooling moves quickly. If you spot an outdated number or a broken link, the contact link in the footer is the fastest way to flag it for the editorial team.