book anything
/install book-anything
Book Anything — Search + AI Phone Booking
Search for any business, get full details, and book via an AI-powered phone call — all through a REST API.
Base URL: https://api-v2.lifeclaw.agentese.ai
Quick Start
BASE_URL="https://api-v2.lifeclaw.agentese.ai"
# 1. Search
curl -X POST "$BASE_URL/skill/search" \
-H "Authorization: Bearer $LIFECLAW_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "sushi near Shibuya", "location": "Tokyo"}'
# 2. Get details + phone_ref
curl -X POST "$BASE_URL/skill/detail" \
-H "Authorization: Bearer $LIFECLAW_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Sushi Dai", "cid": "12345678901234567"}'
# 3. Book by phone (only if phone_ref is not null)
curl -X POST "$BASE_URL/skill/book/phone" \
-H "Authorization: Bearer $LIFECLAW_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"phone_ref": "\x3Cphone_ref from step 2>", "call_plan": {"purpose": "Book a table", "merchant_name": "Sushi Dai", "date": "2026-04-10", "time": "12:00", "party_size": 2, "name": "Alex"}}'
# 4. Poll until status != "pending" (use task_id from step 3 response)
curl "$BASE_URL/skill/task/{task_id}" \
-H "Authorization: Bearer $LIFECLAW_API_TOKEN"
When to Use
- User asks to find a business (restaurant, salon, clinic, hotel, etc.)
- User wants to book / reserve something by phone
- User wants to cancel or reschedule an existing reservation
- User wants to ask a merchant a question (hours, menu, dress code, etc.)
- User needs business details (phone number, hours, address, reviews)
Authentication
All requests require Authorization: Bearer \x3Ctoken> header.
Get a token: Message @lifeclaw_ai_bot on Telegram:
/token_create \x3Cname>
Store the token as environment variable LIFECLAW_API_TOKEN. Token is shown once only — save it immediately. Lost tokens cannot be recovered; create a new one with /token_create \x3Cname>.
Workflow: New Booking
Follow steps 1–4 in order. Do NOT skip steps.
Step 1 — Search
POST {base_url}/skill/search
{"query": "sushi near Shibuya", "location": "Tokyo", "language": "en", "limit": 5}
Response: list of places with cid and maps_url.
Step 2 — Get Details
POST {base_url}/skill/detail
{"name": "Sushi Dai", "cid": "12345678901234567", "language": "en"}
Key response fields:
phone_ref— signed token for booking. Ifnull, phone booking is NOT available. Checkphone_ref_unavailable_reason.detail.phone— merchant phone for display onlybooking_url— online booking link (if available)
When phone_ref is null: Do NOT call /skill/book/phone. Show detail.phone and booking_url to the user instead.
Step 3 — Book by Phone
Only call this if phone_ref is not null.
POST {base_url}/skill/book/phone
{
"phone_ref": "\x3Cphone_ref from Step 2>",
"call_plan": {
"purpose": "Book a table at Sushi Dai",
"merchant_name": "Sushi Dai",
"date": "2026-04-10",
"time": "12:00",
"party_size": 2,
"name": "Alex",
"contact_phone": "+6591234567"
}
}
The action field determines what the server does (book, cancel, reschedule, inquiry). purpose inside call_plan is a natural-language prompt for the AI caller — it does NOT affect routing.
call_plan fields (new booking):
- Required:
purpose,merchant_name,date,time,party_size,name - Recommended:
contact_phone(E.164) — auto-formatted for voice readability - Optional:
special_requests(string array),predicted_qa(array of {question, answer}),fallback_instructions - Ignored:
language— do not set, auto-inferred from merchant phone
Returns {"task_id": {id}, "status": "pending", "poll_url": "/skill/task/{id}"}.
Step 4 — Poll Result
GET {base_url}/skill/task/{task_id}
Poll every 10 seconds until top-level status is no longer "pending". Do NOT use increasing delays — use a fixed 10-second interval. Timeout after 5 minutes.
Two-layer status: Top-level status (pending / completed / failed) indicates whether the task is still running. Inner result.status indicates the booking outcome. Only stop polling when top-level status != "pending"; only treat the operation as successful when result.status == "confirmed".
Result interpretation:
result.status |
Meaning | Action |
|---|---|---|
confirmed |
Booking succeeded | Show confirmation to user |
pending |
Merchant hasn't confirmed yet | Tell user to wait for callback |
rejected |
Merchant refused | Suggest alternatives |
failed |
Call failed (no answer, etc.) | Show merchant phone for manual action |
Workflow: Cancel / Reschedule
Uses the same /skill/book/phone endpoint with booking_id instead of phone_ref. Server auto-fills merchant phone and original booking details.
Step 1 — Get Booking History
GET {base_url}/skill/bookings?status=confirmed
Step 2 — Make the Call
Use the id from Step 1 as booking_id.
Cancel:
POST {base_url}/skill/book/phone
{"action": "cancel", "booking_id": 3, "call_plan": {"purpose": "Cancel reservation at Sushi Dai"}}
Reschedule:
POST {base_url}/skill/book/phone
{"action": "reschedule", "booking_id": 3, "call_plan": {"purpose": "Reschedule reservation at Sushi Dai", "new_date": "2026-04-12", "new_time": "20:00"}}
Provide new_date and/or new_time — only include the fields that are changing. For example, to change only the time, omit new_date.
Poll with Step 4 from the new booking workflow.
Step 3 — Update Booking Record
After polling completes and result.status == "confirmed", update the record:
PATCH {base_url}/skill/bookings/{booking_id}
{"status": "cancelled"} // for cancel
{"booking_time": "2026-04-12 20:00"} // for reschedule
Important: Booking records are client-managed. The server does NOT auto-update them based on call outcomes — you must call PATCH to write back the confirmed result.
Workflow: Inquiry
For general questions (hours, menu, dress code, parking) — no booking involved.
POST {base_url}/skill/book/phone
{"action": "inquiry", "phone_ref": "\x3Cphone_ref from /skill/detail>", "call_plan": {"purpose": "Ask about opening hours and dress code"}}
Poll with Step 4. Answer is in result.summary. No booking record is created.
Other Endpoints
- Check balance:
GET {base_url}/skill/balance - Booking history:
GET {base_url}/skill/bookings?status=confirmed&limit=10
Edge Cases
phone_refisnull: Do NOT call/skill/book/phone. Show phone + booking_url instead.- Insufficient points (402): Response includes
topup_url— direct user to top up. - Phone call fails: Show merchant phone for manual calling. Suggest
booking_urlif available. - No search results: Suggest broadening query or different location.
- Polling > 5 min: Task likely timed out.
Privacy & Data Handling
This skill sends user-provided data (name, phone number, party size, special requests) to the LifeClaw API (api-v2.lifeclaw.agentese.ai) to perform bookings on the user's behalf. This data is:
- Used solely to complete the requested booking via phone call or online reservation
- Not shared with third parties beyond the merchant being called
- Not used for advertising or profiling
- Retained only as booking records accessible to the token owner
API tokens are scoped to the creating user and can be revoked at any time via @lifeclaw_ai_bot with /token_revoke \x3Cname>.
For questions about data handling, contact: https://t.me/agenteseAI
API Reference
See references/api.md for complete request/response schemas and error codes.
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install book-anything - 安装完成后,直接呼叫该 Skill 的名称或使用
/book-anything触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
book anything 是什么?
Searches for businesses (restaurants, salons, clinics, hotels) and books appointments via AI phone calls. Also cancels, reschedules, and makes merchant inqui... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 103 次。
如何安装 book anything?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install book-anything」即可一键安装,无需额外配置。
book anything 是免费的吗?
是的,book anything 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
book anything 支持哪些平台?
book anything 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 book anything?
由 DanielZhangReal(@danielzhangreal)开发并维护,当前版本 v1.4.2。