文档 / 团队功能

WhatsTant CRM 连接器契约

任何 CRM 都可以通过一个适配层接入 WhatsTant。

App 向 crm.baseUrl 发 API 请求;crm.webUrl 是 CRM 网页目录,仅用于打开客户、订单和 Token 页面,两者可以不同。两个地址都必须是 HTTPS,且不能带 query 或 hash。

通用约定

Actions

whoami

GET ?action=whoami。响应 datatype: stringname: stringis_admin: boolean。新连接器必须返回 is_admin;旧服务器缺少它时,App 才会按历史用户名规则兼容。

customer

GET ?action=customer&email=<email>。返回单个客户:user_idcontact(也兼容 first_name/last_name)、emailphone、可选 companypacking_remarkadd_time_formatted。不存在时返回空 data

customer_search

两种 GET 查询:?action=customer_search&phone=<digits> 按号码查找,或 ?action=customer_search&q=<keyword> 按关键字搜索。data 为数组,每项含 user_id(或 id)、contact(或姓名字段)、emailphone(或 telphone),可选 companywhatsapppacking_remarkadd_time_formatted

customer_orders

GET ?action=customer_orders&user_id=<id>data 为订单数组:order_id(或 id)、user_idstatusorder_amount(或 total)、currencyadd_time_formatteditems。每个 item 含 product_idnamequantityprice

countries

GET ?action=countriesdata{ id: number, name: string, code: string }[],其中 code 是小写或大写 ISO 国家码。

owners

GET ?action=ownersdata{ self_id: number, can_assign: boolean, owners: { id: number, name: string }[] }

create_customer

POST ?action=create_customer。JSON body:必填 contact;可选 emailcompanytelphonewhatsappcountryremarkuser_typeadmin_id。响应 data 至少含 user_id

update_customer_avatar

POST ?action=update_customer_avatar,body { user_id: number, avatar_url: string }。响应成功即可,可在 data 返回 user_idavatar_url 是同步 Worker 的公开媒体 URL。

update_customer_whatsapp

POST ?action=update_customer_whatsapp,body { user_id: number, whatsapp: string, confirm?: boolean }。响应 datauser_idold_whatsappnew_whatsappupdated,冲突时可返回 needs_confirm: true

products

GET ?action=products&search=<keyword>data 为产品数组:idnameskupricecurrencystock,可选 description

push_wa_messages

POST ?action=push_wa_messages,body { messages: [...] }。每条消息包含:

响应 datareceivedinsertedskipped,以及逐条确认 results。每项为 { idempotency_key, status }statusinsertedduplicaterejected,拒绝时可带 error。App 依赖逐条确认;缺少 results 的批次会留在本地重试。

update_contact_dates

POST ?action=update_contact_dates,body 必填 user_id,可选 last_contact_timelast_reply_time。成功响应即可。

followup_tasks

GET ?action=followup_tasks&updated_since=<seconds>&after_id=<id>[&updated_until=<seconds>]。响应 datatasksserver_timehas_morenext_updated_atnext_id

每个 task 包含 iduuiduser_idcontact_namephonedue_atnotestatuspending/done/cancelled)、channelsourcecrm/whatsagent)、updated_atrevisiondeleted_atowner_admin_idsource: "whatsagent" 是既有跨系统契约值,连接器不得改名。

save_followup_task

POST ?action=save_followup_task,body:uuiduser_iddue_atnotestatuschannelexpected_revision。响应 dataiduuidupdated_atrevision。版本冲突应返回非 2xx 错误。

set_followup_status

POST ?action=set_followup_status,body { uuid, status, expected_revision }。响应 dataiduuidupdated_atrevision

网页链接

配置 crm.webUrl 后,WhatsTant 会打开:

App 只允许打开 HTTPS 且以前述 crm.webUrl 为目录前缀的 CRM 链接。