# Bni 121

> 自動在 BNI Connect 批次新增一對一 (121) 會面記錄與引薦記錄。當用戶需要記錄 BNI 121 會面、批次填寫一對一、記錄引薦、登入 BNI Connect 填報時使用。Use when the user wants to log BNI 121 meetings, fill in one-on-one records, or record referrals on BNI Connect.

- Skill: `kevin-shu/bni-121` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add kevin-shu/bni-121`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kevin-shu/bni-121/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: kevin-shu (https://skillmd.com/u/kevin-shu)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/kevin-shu/bni-121

---


# BNI 121 & 引薦自動填報

透過 API 直接批次提交一對一 (121) 會面記錄與引薦記錄，不需要操作 UI。

## 執行步驟

### Step 1：收集資訊

一次向用戶詢問以下資訊：

1. **BNI Connect 帳號密碼**（Email & 密碼）
2. **121 名單**：每行一筆，只需姓名
3. **會面地點**
4. **會面日期**（預設今天，格式 YYYY-MM-DD）
5. **引薦名單**（可選）：每行格式 `引薦給誰 | 被引薦人姓名`

### Step 2：登入取得 JWT Token

用 agent-browser 登入，從 localStorage 取出 JWT token。

**⚠️ 登入陷阱**：登入後 `get url` 可能仍顯示 `/login/`，這是 React SPA 的行為，並不代表失敗。以 localStorage 中是否有 token 作為成功依據。

```bash
agent-browser --session-name bni open "https://www.bniconnectglobal.com/login/"
agent-browser --session-name bni wait --load networkidle

# 取得 ref（每次重新登入 ref 可能不同，必須先 snapshot 再使用）
agent-browser --session-name bni snapshot -i
# 通常：使用者名稱=e11, 密碼=e12, 登入按鈕=e8

agent-browser --session-name bni fill e11 "<email>"
agent-browser --session-name bni fill e12 "<password>"
agent-browser --session-name bni click e8
agent-browser --session-name bni wait --load networkidle
agent-browser --session-name bni wait 2000   # 等 localStorage 寫入完成

# 取出 JWT（不用 get url 判斷，直接讀 token）
TOKEN=$(agent-browser --session-name bni eval "JSON.parse(localStorage.getItem('bniconnect:portal:session')).access_token" | tr -d '"')
echo "Token length: ${#TOKEN}"  # 應為 700+ 字元
```

### Step 3：批次提交 121

使用技能目錄下的 `scripts/submit-121.sh`，透過環境變數傳入參數，姓名作為位置參數：

```bash
SKILL_DIR="/Users/kevinshu/Projects/bni/.claude/skills/bni-121"
TOKEN="<jwt>" DATE="2026-04-29" LOCATION="東京" COMMENTS="商務交流" \
  bash "$SKILL_DIR/scripts/submit-121.sh" 周澐 張家綺 王大明
```

**⚠️ 姓名顛倒**：BNI API 的 `firstName` 存中文「姓」，`lastName` 存中文「名」（與英文慣例相反）。腳本已處理。

**⚠️ 用 curl，不用 Python urllib**：Python urllib 可能遇到 403，腳本使用 `/usr/bin/curl`。

### Step 4：批次提交引薦（可選）

使用技能目錄下的 `scripts/submit-referral.sh`，每個引薦以 `接收者|被引薦人` 格式傳入：

```bash
SKILL_DIR="/Users/kevinshu/Projects/bni/.claude/skills/bni-121"
TOKEN="<jwt>" bash "$SKILL_DIR/scripts/submit-referral.sh" \
  "江大大|攤位對面活動廠商" \
  "陳蕃薯|王小明"
```

**⚠️ 預設為外分會（跨分會）**：121 與引薦均預設以外分會模式提交（`referralType: OUTSIDE`）。

### Step 5：完成回報

向用戶報告 121 與引薦各自的成功筆數，以及任何失敗的姓名與原因。

## API 參考

| 功能 | 方法 | 路徑 |
|---|---|---|
| 本分會成員清單 | GET | `/member-api/slips/available-members-list` |
| 跨分會搜尋 | POST | `/member-api/cross-chapter-search` |
| 提交 121 | PUT | `/member-api/slips/one2one` |
| 提交引薦 | PUT | `/member-api/slips/referral` |

- **Base URL**：`https://api.bniconnectglobal.com`
- **Auth**：`Authorization: Bearer <JWT>`
- **dateMet 格式**：`YYYY-MM-DDTHH:mm:ss`（時間固定填 `00:00:00`）
- **comments**：談話主題欄位
- **HTTP 428**：重複記錄偵測，重送時 header 改為 `bypassCheck: true`（submit-121.sh 已處理）
- **Token 有效期**：約 2 小時（`expires_in: 7199`）
- **引薦預設值**：`referralType: OUTSIDE`、`temperature: 5`、`cardGiven: true`

