---
title: 执行结果回调
description: 客服提交召回执行结果后,PAC 回调宿主登记地址的对接说明。
icon: BellRing
---

> 客服在 PAC 工作台提交召回执行结果后,PAC 主动 POST 回宿主登记的地址,用于同步宿主侧 CRM / 工单。
> 方向与登录换票相反 —— 换票是宿主调 PAC,回执是 **PAC 调宿主**。

---

## 接入前提

接入时向 PAC 提供:

- **回执地址**(`callbackUrl`):宿主侧接收 POST 的 HTTPS endpoint。

PAC 分配:

- **回执密钥**:PAC 一次性明文下发(仅本次显示,支持轮换)。用于验签,与 push 密钥相互独立。

## 请求

`POST {callbackUrl}`

请求头:

| 头 | 说明 |
|---|---|
| `X-PAC-Timestamp` | unix 秒;容忍 ±5 分钟偏差 |
| `X-PAC-Signature` | `hex(HMAC-SHA256("{X-PAC-Timestamp}.{rawBody}", 回执密钥))` |
| `X-PAC-Event-Id` | 事件唯一 id,**幂等键** |

请求体:

```jsonc
{
  "eventId":           "...",        // = X-PAC-Event-Id
  "patientExternalId": "...",        // 宿主侧患者 id
  "operatorUserId":    "...",        // 宿主侧客服 id
  "channel":           "phone",      // phone | wecom | sms | other
  "outcome":           "refused",    // 执行结论,见下
  "planStatus":        "abandoned",  // 回执时该工单状态,见下
  "notes":             "...",        // 通话纪要(可选)
  "scheduledNextAt":   "2026-07-01T02:00:00Z",  // 约定下次回访时间(可选)
  "occurredAt":        "2026-06-30T08:12:00Z"   // 提交时间(ISO 8601)
}
```

**`outcome`** — 执行结论(取值可能新增,按未知值宽容处理;工单最终状态以 `planStatus` 为准):

| 值 | 含义 |
|---|---|
| `success_appointed` | 转化为新预约 |
| `refused` | 明确拒绝 |
| `external_treatment` | 已在外院治疗 |
| `declined_recent` | 近期不考虑 |
| `scheduled_next` | 约定下次回访 |
| `no_answer` | 未接通 |
| `quick_hangup` | 接通即挂 |

**`planStatus`** — `active`(在召回池)/ `assigned`(已分配)/ `completed`(结案)/ `abandoned`(关闭)。

## 宿主要做的三件事

1. **验签**:用回执密钥按上表算法重算,与 `X-PAC-Signature` 比对;不匹配返回 4xx 拒绝。
2. **去重**:按 `X-PAC-Event-Id` 去重 —— 投递为 at-least-once,同一事件可能到达多次。
3. **回应**:尽快返回 **2xx**(建议先落库再异步处理)即视为投递成功;非 2xx 或超时,PAC 会重试。
