Taste Match
ทางการจองและค้นหาร้านอาหารได้ง่าย ๆ เฉพาะในสวิตเซอร์แลนด์และบริเวณโดยรอบ
คุณทำอะไรได้บ้างด้วย Taste Match MCP?
- นับจำนวนผลลัพธ์ก่อน — ถามว่ามีร้านอาหารกี่แห่งที่ตรงกับชุดตัวกรองก่อนดึงข้อมูลแต่ละแถว โดยใช้
count_restaurants - กรองตามคุณลักษณะ — ค้นหาร้านอาหารตามสถานที่ วันหรือบริการที่เปิดให้บริการ ประเภทอาหาร เมนูและเครื่องดื่ม หรือความสามารถในการจองด้วย
filter_restaurants - ค้นหาเมนูอาหารที่ระบุชื่อ — ค้นหาเมนูด้วยถ้อยคำที่แขกใช้เรียกอาหารจานนั้น แล้วดูว่าร้านอาหารใดมีให้บริการผ่าน
search_dishes - ค้นหาร้านอาหารตามชื่อ — ค้นหาร้านอาหารตามชื่อหรือชื่อที่เรียกกัน โดยเลือกจำกัดขอบเขตตามภูมิภาคได้ด้วย
search_restaurants - ดูร้านยอดนิยม — แสดงรายชื่อร้านอาหารที่ได้รับความนิยมมากที่สุดในภูมิภาคที่กำหนดด้วย
list_popular_restaurants - ค้นหาร้านที่คล้ายกัน — ค้นหาร้านอาหารที่มีรสนิยมใกล้เคียงกับร้านที่คุณมีคีย์อยู่แล้ว โดยใช้
list_similar_restaurants
เซิร์ฟเวอร์ MCP แบบโฮสต์
npx add-mcp 'https://mcp.tastematch.io/'ติดตั้งลง Claude Code, Codex, Cursor และอื่นๆ
เอกสาร
| URL บริการสาธารณะ | https://mcp.tastematch.io/ |
|---|---|
| URL คำชี้แจงความเป็นส่วนตัว | https://tastematch.io/mcp/privacy.html |
ชุดเครื่องมือ MCP แบบ Streamable HTTP ที่ช่วยให้คุณค้นหาร้านอาหารที่เหมาะกับคุณที่สุดในสวิตเซอร์แลนด์และพื้นที่อื่น ๆ เพิ่มชุดเครื่องมือนี้ไปยังไคลเอ็นต์ MCP โดยใช้ URL ด้านบน การค้นหาข้อมูลเปิดให้ทุกคนเข้าถึงได้
การยืนยันตัวตน
หากต้องการเข้าถึงเซิร์ฟเวอร์ MCP ของเรา บริการของคุณจะต้องลงทะเบียนด้วยตนเองโดยใช้ DCR (OAuth 2.0 Dynamic Client Registration) ที่เซิร์ฟเวอร์การให้สิทธิ์ซึ่งระบุไว้ใต้ authorization_servers ใน /.well-known/oauth-protected-resource/mcp; เอกสารเมทาดาทาของเซิร์ฟเวอร์นั้นมี registration_endpoint
หากต้องการรองรับปลายทางที่ต้องยืนยันตัวตน ผู้ใช้ของคุณจะต้องยืนยันตัวตนกับเซิร์ฟเวอร์การให้สิทธิ์เดียวกันด้วย OpenID Connect (authorization code with PKCE) โดยขอสิ่งที่ scopes_supported ใน /.well-known/oauth-protected-resource/mcp ระบุไว้
- 🟢 ไม่ต้องลงชื่อเข้าใช้: เครื่องมือตอบคำถามทุกคน
- 🟡 ต้องลงชื่อเข้าใช้สำหรับอาร์กิวเมนต์บางรายการ เช่น
list_recommended_restaurantsresolve_keyมิฉะนั้นจะเรียกใช้แบบสาธารณะได้ ซึ่งอนุญาตให้ใช้พารามิเตอร์เฉพาะผู้ใช้ได้ การใช้พารามิเตอร์เหล่านี้จะสำเร็จเฉพาะเมื่อลงชื่อเข้าใช้แล้วเท่านั้น ดูข้อมูลเกี่ยวกับการเข้าสู่ระบบไม่สำเร็จด้านล่าง - 🔴 ต้องลงชื่อเข้าใช้: เครื่องมือดำเนินการแทนผู้ใช้ ผู้ใช้อาจไม่ระบุตัวตน หากเรียกใช้โดยไม่มีโทเค็น ระบบจะตอบกลับด้วย HTTP 401 พร้อมคำท้าทาย
WWW-Authenticateที่ชี้ไปยัง/.well-known/oauth-protected-resource/mcpและไคลเอ็นต์จะให้บุคคลนั้นลงชื่อเข้าใช้ด้วย OAuth (authorization code with PKCE) บุคคลที่ลงชื่อเข้าใช้คือผู้ใช้ที่ระบุตัวตน - ระดับ:
anonymousคือทุกคนที่ลงชื่อเข้าใช้แล้ว ส่วนreservationจะเพิ่มชื่อและนามสกุล ช่องทางติดต่อหนึ่งช่องทาง และการยอมรับข้อกำหนด ซึ่งpromote_identityจะรวบรวมเมื่อจำเป็นต้องใช้ข้อมูลเหล่านี้ในการจอง - จำกัดอัตราการเรียกใช้: นับจำนวนการเรียกใช้แยกตามผู้ใช้ที่ลงชื่อเข้าใช้ ส่วนผู้เรียกใช้ที่ไม่มีโทเค็นจะแชร์โควตาเดียวกัน หากเรียกใช้เกินขีดจำกัด ระบบจะปฏิเสธพร้อมรหัส ให้รอสักครู่แล้วส่งคำขอให้น้อยลง
ค้นพบ
🟢 count_restaurants อ่านจำนวนสถานที่ที่ตรงกับชุดตัวกรอง โดยไม่ส่งคืนแถว เรียกใช้ก่อน filter_restaurants เมื่อสำรวจชุดตัวกรอง เพราะเครื่องมือนี้ตอบคำถามเดียวกันโดยไม่ส่งคืนเอกสาร
นับจำนวนร้านอาหาร
จำนวนสถานที่ที่ตรงกับชุดตัวกรอง โดยไม่ส่งคืนแถว เรียกใช้ก่อน filter_restaurants เมื่อสำรวจชุดตัวกรอง เพราะเครื่องมือนี้ตอบคำถามเดียวกันโดยไม่ส่งคืนเอกสาร
| พารามิเตอร์ | ประเภท | คำอธิบาย |
|---|---|---|
drinkOptions | object | สิ่งที่รายการเครื่องดื่มต้องมี |
drinkOptions.beerSelection | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
drinkOptions.cocktailSelection | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
drinkOptions.natureWineSelection | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
drinkOptions.wineSelection | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
kitchen | object | ประเภทอาหารที่ร้านปรุง |
kitchen.cuisine | array<string> | slug ของประเภทอาหาร โดยตรงกับรายการใดรายการหนึ่งก็ถือว่าตรงกัน รายการทั้งหมดอยู่ใน get_vocabulary |
location | object | พื้นที่ค้นหา: regionId หรือจุดพร้อมรัศมี |
location.lat | number | ละติจูดของจุดศูนย์กลางการค้นหา ใช้คู่กับ lng |
location.lng | number | ลองจิจูดของจุดศูนย์กลางการค้นหา |
location.radiusMeters | integer | ระยะรอบจุดที่ต้องการค้นหา |
location.regionId | string | ภูมิภาคที่ต้องการค้นหา จาก list_regions หรือ resolve_key |
menuOptions | object | สิ่งที่เมนูต้องมี |
menuOptions.fishDishes | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
menuOptions.glutenFreeDishes | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
menuOptions.halalDishes | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
menuOptions.lactoseFreeDishes | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
menuOptions.meatDishes | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
menuOptions.veganDishes | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
menuOptions.vegetarianDishes | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
nutrition | object | ลักษณะโดยรวมของสถานที่ |
nutrition.veganRestaurants | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
nutrition.vegetarianRestaurants | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
opening | object | เวลาที่สถานที่เปิดให้บริการ |
opening.daytime | string | มื้อที่ต้องการให้เปิดบริการ: lunch หรือ dinner |
opening.openOn | array<integer> | วันที่ต้องเปิดให้บริการ โดยวันอาทิตย์คือ 0 |
reservation | object | วิธีการจอง |
reservation.hasWidget | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
reservation.liveAvailability | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Count restaurants"
},
"description": "How many venues a facet set matches, with no rows. Call this before filter_restaurants when exploring a filter space: it answers the same question without the documents.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"drinkOptions": {
"additionalProperties": false,
"description": "what the drinks list must carry",
"properties": {
"beerSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"cocktailSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"natureWineSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"wineSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
},
"kitchen": {
"additionalProperties": false,
"description": "the kitchen it cooks",
"properties": {
"cuisine": {
"description": "cuisine slugs, any one of which satisfies it; the list is in get_vocabulary",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"location": {
"additionalProperties": false,
"description": "where to search: a regionId, or a point with a radius",
"properties": {
"lat": {
"description": "latitude of the search centre, paired with lng",
"type": "number"
},
"lng": {
"description": "longitude of the search centre",
"type": "number"
},
"radiusMeters": {
"description": "how far around the point to look",
"type": "integer"
},
"regionId": {
"description": "the region to search in, from list_regions or resolve_key",
"type": "string"
}
},
"type": "object"
},
"menuOptions": {
"additionalProperties": false,
"description": "what the menu must carry",
"properties": {
"fishDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"glutenFreeDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"halalDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"lactoseFreeDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"meatDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"veganDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"vegetarianDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
},
"nutrition": {
"additionalProperties": false,
"description": "what the venue is as a whole",
"properties": {
"veganRestaurants": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"vegetarianRestaurants": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
},
"opening": {
"additionalProperties": false,
"description": "when the venue is open",
"properties": {
"daytime": {
"description": "the service to be open for: lunch or dinner",
"type": "string"
},
"openOn": {
"description": "weekdays it must be open on, Sunday is 0",
"items": {
"type": "integer"
},
"type": "array"
}
},
"type": "object"
},
"reservation": {
"additionalProperties": false,
"description": "how it can be booked",
"properties": {
"hasWidget": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"liveAvailability": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
}
},
"required": [],
"type": "object"
},
"name": "count_restaurants",
"title": "Count restaurants"
}
🟢 filter_restaurants อ่าน ค้นหาสถานที่ตามตัวกรอง: พื้นที่ เวลาเปิด ประเภทอาหาร สิ่งที่มีในเมนูและรายการเครื่องดื่ม รวมถึงวิธีการจอง ตัวกรองแต่ละรายการจะจำกัดผลลัพธ์ให้เหลือเฉพาะสถานที่ที่ตรงกับตัวกรองนั้น ดังนั้นให้ส่งเฉพาะสิ่งที่ผู้ใช้ต้องการ ค่า descriptor และประเภทอาหารมาจาก get_vocabulary — หากใช้ค่าที่ไม่มีอยู่ ระบบจะปฏิเสธแทนที่จะละเว้น จัดอันดับตามความนิยม โดยไม่ใช้เวกเตอร์รสนิยม
กรองร้านอาหาร
ค้นหาสถานที่ตามตัวกรอง: พื้นที่ เวลาเปิด ประเภทอาหาร สิ่งที่มีในเมนูและรายการเครื่องดื่ม รวมถึงวิธีการจอง ตัวกรองแต่ละรายการจะจำกัดผลลัพธ์ให้เหลือเฉพาะสถานที่ที่ตรงกับตัวกรองนั้น ดังนั้นให้ส่งเฉพาะสิ่งที่ผู้ใช้ต้องการ ค่า descriptor และประเภทอาหารมาจาก get_vocabulary — หากใช้ค่าที่ไม่มีอยู่ ระบบจะปฏิเสธแทนที่จะละเว้น จัดอันดับตามความนิยม โดยไม่ใช้เวกเตอร์รสนิยม
| พารามิเตอร์ | ประเภท | คำอธิบาย |
|---|---|---|
drinkOptions | object | สิ่งที่รายการเครื่องดื่มต้องมี |
drinkOptions.beerSelection | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
drinkOptions.cocktailSelection | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
drinkOptions.natureWineSelection | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
drinkOptions.wineSelection | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
kitchen | object | ประเภทอาหารที่ร้านปรุง |
kitchen.cuisine | array<string> | slug ของประเภทอาหาร โดยตรงกับรายการใดรายการหนึ่งก็ถือว่าตรงกัน รายการทั้งหมดอยู่ใน get_vocabulary |
limit | integer | จำนวนแถวที่ส่งคืน สูงสุด 50 |
location | object | พื้นที่ค้นหา: regionId หรือจุดพร้อมรัศมี |
location.lat | number | ละติจูดของจุดศูนย์กลางการค้นหา ใช้คู่กับ lng |
location.lng | number | ลองจิจูดของจุดศูนย์กลางการค้นหา |
location.radiusMeters | integer | ระยะรอบจุดที่ต้องการค้นหา |
location.regionId | string | ภูมิภาคที่ต้องการค้นหา จาก list_regions หรือ resolve_key |
menuOptions | object | สิ่งที่เมนูต้องมี |
menuOptions.fishDishes | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
menuOptions.glutenFreeDishes | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
menuOptions.halalDishes | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
menuOptions.lactoseFreeDishes | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
menuOptions.meatDishes | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
menuOptions.veganDishes | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
menuOptions.vegetarianDishes | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
nutrition | object | ลักษณะโดยรวมของสถานที่ |
nutrition.veganRestaurants | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
nutrition.vegetarianRestaurants | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
offset | integer | จำนวนแถวที่ข้าม โดยใช้ totalCount ในผลลัพธ์เพื่อแบ่งหน้า |
opening | object | เวลาที่สถานที่เปิดให้บริการ |
opening.daytime | string | มื้อที่ต้องการให้เปิดบริการ: lunch หรือ dinner |
opening.openOn | array<integer> | วันที่ต้องเปิดให้บริการ โดยวันอาทิตย์คือ 0 |
reservation | object | วิธีการจอง |
reservation.hasWidget | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
reservation.liveAvailability | boolean | true จำกัดผลลัพธ์ให้เหลือสถานที่ที่มีรายการนี้ หากไม่ต้องการกรองตามรายการนี้ ให้ละไว้ |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Filter restaurants"
},
"description": "Search venues by facet: where, when open, what kitchen, what the menu and the drinks list carry, and how it can be booked. Every facet narrows the result to the venues carrying it, so pass only what the guest asked for. Descriptor and cuisine values come from get_vocabulary — an invented one is refused rather than ignored. Ranked by popularity; no taste vector is applied.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"drinkOptions": {
"additionalProperties": false,
"description": "what the drinks list must carry",
"properties": {
"beerSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"cocktailSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"natureWineSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"wineSelection": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
},
"kitchen": {
"additionalProperties": false,
"description": "the kitchen it cooks",
"properties": {
"cuisine": {
"description": "cuisine slugs, any one of which satisfies it; the list is in get_vocabulary",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"location": {
"additionalProperties": false,
"description": "where to search: a regionId, or a point with a radius",
"properties": {
"lat": {
"description": "latitude of the search centre, paired with lng",
"type": "number"
},
"lng": {
"description": "longitude of the search centre",
"type": "number"
},
"radiusMeters": {
"description": "how far around the point to look",
"type": "integer"
},
"regionId": {
"description": "the region to search in, from list_regions or resolve_key",
"type": "string"
}
},
"type": "object"
},
"menuOptions": {
"additionalProperties": false,
"description": "what the menu must carry",
"properties": {
"fishDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"glutenFreeDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"halalDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"lactoseFreeDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"meatDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"veganDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"vegetarianDishes": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
},
"nutrition": {
"additionalProperties": false,
"description": "what the venue is as a whole",
"properties": {
"veganRestaurants": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"vegetarianRestaurants": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
},
"opening": {
"additionalProperties": false,
"description": "when the venue is open",
"properties": {
"daytime": {
"description": "the service to be open for: lunch or dinner",
"type": "string"
},
"openOn": {
"description": "weekdays it must be open on, Sunday is 0",
"items": {
"type": "integer"
},
"type": "array"
}
},
"type": "object"
},
"reservation": {
"additionalProperties": false,
"description": "how it can be booked",
"properties": {
"hasWidget": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
},
"liveAvailability": {
"description": "true narrows to venues carrying it; omit it to not narrow on it",
"type": "boolean"
}
},
"type": "object"
}
},
"required": [],
"type": "object"
},
"name": "filter_restaurants",
"title": "Filter restaurants"
}
🟢 list_popular_restaurants อ่าน สถานที่ที่ได้รับความนิยมสูงสุดในภูมิภาคหนึ่ง ต้องระบุภูมิภาค หากไม่ระบุ ระบบจะอ่านสถานที่ทั้งหมดที่เรามี
แสดงร้านอาหารยอดนิยม
สถานที่ที่ได้รับความนิยมสูงสุดในภูมิภาคหนึ่ง ต้องระบุภูมิภาค หากไม่ระบุ ระบบจะอ่านสถานที่ทั้งหมดที่เรามี
| พารามิเตอร์ | ประเภท | คำอธิบาย |
|---|---|---|
regionId required | string | ภูมิภาคที่ต้องการอ่าน จาก list_regions |
limit | integer | จำนวนแถวที่ส่งคืน สูงสุด 50 |
offset | integer | จำนวนแถวที่ข้าม โดยใช้ totalCount ในผลลัพธ์เพื่อแบ่งหน้า |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List popular restaurants"
},
"description": "The most-liked venues of one region. A region is required: without one this reads every venue we hold.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
},
"regionId": {
"description": "the region to read, from list_regions",
"type": "string"
}
},
"required": [
"regionId"
],
"type": "object"
},
"name": "list_popular_restaurants",
"title": "List popular restaurants"
}
🟡 list_recommended_restaurants อ่าน สถานที่แนะนำสำหรับผู้ใช้ที่ลงชื่อเข้าใช้ โดยเรียงจากรสนิยมใกล้เคียงที่สุด ก่อนมีผู้ลงชื่อเข้าใช้ คำแนะนำจะยังไม่ปรับให้เหมาะกับบุคคล bookableOnly\ จะแสดงเฉพาะสถานที่ที่มีโต๊ะว่าง ซึ่งมีจำนวนน้อยกว่ามากและต้องลงชื่อเข้าใช้
แสดงร้านอาหารแนะนำ
สถานที่แนะนำสำหรับผู้ใช้ที่ลงชื่อเข้าใช้ โดยเรียงจากรสนิยมใกล้เคียงที่สุด ก่อนมีผู้ลงชื่อเข้าใช้ คำแนะนำจะยังไม่ปรับให้เหมาะกับบุคคล bookableOnly\ จะแสดงเฉพาะสถานที่ที่มีโต๊ะว่าง ซึ่งมีจำนวนน้อยกว่ามากและต้องลงชื่อเข้าใช้
| พารามิเตอร์ | ประเภท | คำอธิบาย |
|---|---|---|
bookableOnly | boolean | แสดงเฉพาะสถานที่ที่มีโต๊ะว่างในขณะนี้ |
interDiem | integer | เมื่อใช้ bookableOnly จำนวนวันล่วงหน้าสูงสุดที่อาจมีโต๊ะว่าง |
limit | integer | จำนวนแถวที่ส่งคืน สูงสุด 50 |
offset | integer | จำนวนแถวที่ข้าม โดยใช้ totalCount ในผลลัพธ์เพื่อแบ่งหน้า |
regionId | string | ภูมิภาคที่ต้องการรับคำแนะนำ หากไม่ระบุจะใช้ภูมิภาคของผู้ใช้ |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List recommended restaurants"
},
"description": "Venues recommended for the signed-in guest, closest in taste first; before anyone signs in they are not personal. \`bookableOnly\` keeps only venues with a table free, which is a much smaller set and needs a sign-in.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"bookableOnly": {
"description": "keep only venues with live availability",
"type": "boolean"
},
"interDiem": {
"description": "with bookableOnly, how many days ahead a free table may lie",
"type": "integer"
},
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
},
"regionId": {
"description": "the region to recommend in; the identity's own region when omitted",
"type": "string"
}
},
"required": [],
"type": "object"
},
"name": "list_recommended_restaurants",
"title": "List recommended restaurants"
}
🟢 list_similar_restaurants อ่าน สถานที่ที่มีรสนิยมใกล้เคียงกับสถานที่ที่คุณมีคีย์อยู่แล้ว โดยเรียงจากใกล้เคียงที่สุด sameCategory\ จะจำกัดผลลัพธ์ให้อยู่ในกลุ่มประเภทอาหารเดียวกัน และเปิดใช้งานอยู่โดยค่าเริ่มต้น เว้นแต่คุณจะปิด
แสดงร้านอาหารที่คล้ายกัน
สถานที่ที่มีรสนิยมใกล้เคียงกับสถานที่ที่คุณมีคีย์อยู่แล้ว โดยเรียงจากใกล้เคียงที่สุด sameCategory\ จะจำกัดผลลัพธ์ให้อยู่ในกลุ่มประเภทอาหารเดียวกัน และเปิดใช้งานอยู่โดยค่าเริ่มต้น เว้นแต่คุณจะปิด
| พารามิเตอร์ | ประเภท | คำอธิบาย |
|---|---|---|
restaurantKey required | string | สถานที่ที่ต้องการค้นหาสถานที่ใกล้เคียง |
limit | integer | จำนวนแถวที่ส่งคืน สูงสุด 50 |
offset | integer | จำนวนแถวที่ข้าม โดยใช้ totalCount ในผลลัพธ์เพื่อแบ่งหน้า |
sameCategory | boolean | จำกัดผลลัพธ์ให้อยู่ในกลุ่มประเภทอาหารเดียวกัน หากไม่ระบุจะเป็น true |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List similar restaurants"
},
"description": "Venues close in taste to one you already hold a key for, nearest first. \`sameCategory\` keeps them inside the same kitchen family and is on unless you turn it off.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
},
"restaurantKey": {
"description": "the venue to find neighbours of",
"type": "string"
},
"sameCategory": {
"description": "keep to the same kitchen family; true when omitted",
"type": "boolean"
}
},
"required": [
"restaurantKey"
],
"type": "object"
},
"name": "list_similar_restaurants",
"title": "List similar restaurants"
}
🟢 search_dishes อ่าน ค้นหาสถานที่ที่เสิร์ฟอาหารจานที่ระบุ ค้นหาด้วยชื่ออาหารตามที่ผู้ใช้พูด โดยใช้ถ้อยคำและลำดับคำเดิม — ชื่ออาหารเป็นส่วนหนึ่งของเอกลักษณ์ จึงห้ามเรียบเรียงใหม่ แปล หรือย่อคำ คำที่ยาวกว่าจะยังค้นหาได้แม้สะกดผิดเล็กน้อย ส่วนคำที่สั้นมากต้องตรงทุกตัวอักษร ผลลัพธ์แต่ละรายการจะแสดงชื่ออาหารตามที่พิมพ์ไว้ในเมนู และ exact\ จะเป็น true เฉพาะเมื่อชื่อที่ค้นหาตรงกันทุกคำเท่านั้น เครื่องมือนี้ไม่ทราบเวลาเปิดให้บริการ — ให้ใช้ filter_restaurants สำหรับข้อมูลดังกล่าว ข้อมูลเมนูมีไม่ครบถ้วน: หากไม่พบผลลัพธ์ หมายความว่าไม่มีเมนูที่เรามีระบุชื่ออาหารจานนั้น ไม่ได้หมายความว่าไม่มีร้านใดปรุงอาหารจานนี้
ค้นหาอาหาร
ค้นหาสถานที่ที่เสิร์ฟอาหารจานที่ระบุ ค้นหาด้วยชื่ออาหารตามที่ผู้ใช้พูด โดยใช้ถ้อยคำและลำดับคำเดิม — ชื่ออาหารเป็นส่วนหนึ่งของเอกลักษณ์ จึงห้ามเรียบเรียงใหม่ แปล หรือย่อคำ คำที่ยาวกว่าจะยังค้นหาได้แม้สะกดผิดเล็กน้อย ส่วนคำที่สั้นมากต้องตรงทุกตัวอักษร ผลลัพธ์แต่ละรายการจะแสดงชื่ออาหารตามที่พิมพ์ไว้ในเมนู และ exact\ จะเป็น true เฉพาะเมื่อชื่อที่ค้นหาตรงกันทุกคำเท่านั้น เครื่องมือนี้ไม่ทราบเวลาเปิดให้บริการ — ให้ใช้ filter_restaurants สำหรับข้อมูลดังกล่าว ข้อมูลเมนูมีไม่ครบถ้วน: หากไม่พบผลลัพธ์ หมายความว่าไม่มีเมนูที่เรามีระบุชื่ออาหารจานนั้น ไม่ได้หมายความว่าไม่มีร้านใดปรุงอาหารจานนี้
| Parameter | Type | Description |
|---|---|---|
q required | string | ชื่ออาหารตามที่แขกเรียก |
lat | number | ละติจูดสำหรับค้นหารอบ ๆ โดยใช้คู่กับ lng |
limit | integer | จำนวนแถวที่ส่งคืน สูงสุด 50 |
lng | number | ลองจิจูดสำหรับค้นหารอบ ๆ |
offset | integer | จำนวนแถวที่ข้าม; ใช้ totalCount ในผลลัพธ์เพื่อแบ่งหน้า |
radiusMeters | integer | ระยะรอบจุดที่ต้องการค้นหา |
regionId | string | จำกัดการค้นหาไว้ในภูมิภาคเดียว |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Search dishes"
},
"description": "Find the venues that serve a named dish. Search the dish as the guest said it, in their words and their order — the wording of a dish is part of its identity, so do not rephrase, translate or shorten it. Longer words survive a small spelling slip; very short ones must be exact. Every hit quotes the dish as the menu prints it, and \`exact\` is true only where the name matched word for word. This knows nothing of opening hours — use filter_restaurants for that. Menu coverage is partial: an empty result means no menu we hold names that dish, never that nobody cooks it.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"lat": {
"description": "latitude to search around, paired with lng",
"type": "number"
},
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"lng": {
"description": "longitude to search around",
"type": "number"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
},
"q": {
"description": "the dish as the guest named it",
"type": "string"
},
"radiusMeters": {
"description": "how far around the point to look",
"type": "integer"
},
"regionId": {
"description": "bound the search to one region",
"type": "string"
}
},
"required": [
"q"
],
"type": "object"
},
"name": "search_dishes",
"title": "Search dishes"
}
🟢 search_restaurants read ค้นหาสถานที่ตามชื่อหรือชื่อที่แขกเรียก โดยใช้ถ้อยคำของแขกเอง อย่างน้อยสามตัวอักษร จำกัดการค้นหาไว้ในภูมิภาคเมื่อทราบ ใช้ filter_restaurants เมื่อแขกบรรยายประเภทสถานที่แทนที่จะระบุชื่อ
ค้นหาร้านอาหาร
ค้นหาสถานที่ตามชื่อหรือชื่อที่แขกเรียก โดยใช้ถ้อยคำของแขกเอง อย่างน้อยสามตัวอักษร จำกัดการค้นหาไว้ในภูมิภาคเมื่อทราบ ใช้ filter_restaurants เมื่อแขกบรรยายประเภทสถานที่แทนที่จะระบุชื่อ
| Parameter | Type | Description |
|---|---|---|
text required | string | สิ่งที่ต้องการค้นหา อย่างน้อยสามตัวอักษร |
limit | integer | จำนวนแถวที่ส่งคืน สูงสุด 50 |
offset | integer | จำนวนแถวที่ข้าม; ใช้ totalCount ในผลลัพธ์เพื่อแบ่งหน้า |
regionId | string | จำกัดการค้นหาไว้ในภูมิภาคเดียว; หากไม่ระบุ จะค้นหาทุกภูมิภาคที่เราครอบคลุม |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Search restaurants"
},
"description": "Find venues by name or by what they are called, in the guest's own words. Three characters at least. Bound it to a region when you know one. Use filter_restaurants when the guest described a kind of place rather than named one.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
},
"regionId": {
"description": "bound the search to one region; omitted it searches every region we cover",
"type": "string"
},
"text": {
"description": "what to search for, three characters or more",
"type": "string"
}
},
"required": [
"text"
],
"type": "object"
},
"name": "search_restaurants",
"title": "Search restaurants"
}
PLACE
🟢 list_regions read ภูมิภาคที่ TasteMatch ครอบคลุม แต่ละภูมิภาคมี regionId ซึ่งเครื่องมือที่จำกัดขอบเขตตามภูมิภาคต้องใช้ และเขตเวลา IANA ที่ใช้ระบุเวลาเปิดทำการและเวลาจองของสถานที่ในภูมิภาคนั้น ส่งพิกัดเพื่อเรียงตามระยะทางจากใกล้ไปไกล สถานที่ที่ไม่อยู่ในภูมิภาคเหล่านี้จะไม่มีสถานที่ที่เรามีข้อมูลอยู่
แสดงรายการภูมิภาค
ภูมิภาคที่ TasteMatch ครอบคลุม แต่ละภูมิภาคมี regionId ซึ่งเครื่องมือที่จำกัดขอบเขตตามภูมิภาคต้องใช้ และเขตเวลา IANA ที่ใช้ระบุเวลาเปิดทำการและเวลาจองของสถานที่ในภูมิภาคนั้น ส่งพิกัดเพื่อเรียงตามระยะทางจากใกล้ไปไกล สถานที่ที่ไม่อยู่ในภูมิภาคเหล่านี้จะไม่มีสถานที่ที่เรามีข้อมูลอยู่
| Parameter | Type | Description |
|---|---|---|
lat | number | ละติจูดสำหรับเรียงตามระยะทาง โดยใช้คู่กับ lng |
limit | integer | จำนวนแถวที่ส่งคืน สูงสุด 50 |
lng | number | ลองจิจูดสำหรับเรียงตามระยะทาง |
offset | integer | จำนวนแถวที่ข้าม; ใช้ totalCount ในผลลัพธ์เพื่อแบ่งหน้า |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List regions"
},
"description": "The regions TasteMatch covers. Each carries the regionId every region-scoped tool takes, and the IANA timezone its venues' opening hours and slot times are written on. Pass a point to get them nearest first. A place not in any of these regions has no venues we hold.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"lat": {
"description": "latitude to sort by distance from, paired with lng",
"type": "number"
},
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"lng": {
"description": "longitude to sort by distance from",
"type": "number"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
}
},
"required": [],
"type": "object"
},
"name": "list_regions",
"title": "List regions"
}
🟢 search_places read จับคู่เมือง เขต หรือย่านที่แขกระบุเข้ากับภูมิภาคที่ครอบคลุมสถานที่นั้น ผลลัพธ์ว่างหมายความว่าสถานที่นั้นอยู่นอกทุกภูมิภาคที่เราครอบคลุม ไม่ได้หมายความว่าชื่อที่ระบุไม่ถูกต้อง
ค้นหาสถานที่
จับคู่เมือง เขต หรือย่านที่แขกระบุเข้ากับภูมิภาคที่ครอบคลุมสถานที่นั้น ผลลัพธ์ว่างหมายความว่าสถานที่นั้นอยู่นอกทุกภูมิภาคที่เราครอบคลุม ไม่ได้หมายความว่าชื่อที่ระบุไม่ถูกต้อง
| Parameter | Type | Description |
|---|---|---|
q required | string | ชื่อสถานที่ตามที่แขกเรียก |
countryCode | string | รหัส ISO 3166-1 alpha-2 สำหรับจำกัดขอบเขตการจับคู่ |
limit | integer | จำนวนแถวที่ส่งคืน สูงสุด 50 |
offset | integer | จำนวนแถวที่ข้าม; ใช้ totalCount ในผลลัพธ์เพื่อแบ่งหน้า |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Search places"
},
"description": "Match a town, district or quarter the guest named to the region that contains it. An empty result means the place is outside every region we cover, not that the name was wrong.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"countryCode": {
"description": "ISO 3166-1 alpha-2 code to restrict the match to",
"type": "string"
},
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
},
"q": {
"description": "the place as the guest named it",
"type": "string"
}
},
"required": [
"q"
],
"type": "object"
},
"name": "search_places",
"title": "Search places"
}
RESTAURANT
🟢 get_restaurant read อ่านข้อมูลสถานที่หนึ่งแห่ง โดยค่าเริ่มต้นจะแสดงข้อมูลแบบย่อ ได้แก่ ชื่อ คีย์ ภูมิภาค ที่อยู่ คำบรรยาย วิธีจอง และสรุปเวลาเปิดทำการ ข้อมูลส่วนที่มีขนาดใหญ่จะแสดงก็ต่อเมื่อระบุไว้ใน fields\: ContactInformation, MenuCards, MenuCardsV2, labelVector, coverPictures, socialScore, matchInfo, tmType, eventId, businessPro, likesByUser, likesByFollowees, likesUserAvatars, likesFolloweeAvatars เอกสารที่ไม่ได้ระบุฟิลด์อาจมีขนาดใหญ่กว่าส่วนอื่น ๆ ของงานที่คุณทำ
รับข้อมูลร้านอาหาร
อ่านข้อมูลสถานที่หนึ่งแห่ง โดยค่าเริ่มต้นจะแสดงข้อมูลแบบย่อ ได้แก่ ชื่อ คีย์ ภูมิภาค ที่อยู่ คำบรรยาย วิธีจอง และสรุปเวลาเปิดทำการ ข้อมูลส่วนที่มีขนาดใหญ่จะแสดงก็ต่อเมื่อระบุไว้ใน fields\: ContactInformation, MenuCards, MenuCardsV2, labelVector, coverPictures, socialScore, matchInfo, tmType, eventId, businessPro, likesByUser, likesByFollowees, likesUserAvatars, likesFolloweeAvatars เอกสารที่ไม่ได้ระบุฟิลด์อาจมีขนาดใหญ่กว่าส่วนอื่น ๆ ของงานที่คุณทำ
| Parameter | Type | Description |
|---|---|---|
restaurantKey required | string | คีย์ของสถานที่ |
accessType | string | เมื่อแขกขอเปิดสถานที่นี้ ให้ระบุว่าพวกเขาพบสถานที่นี้ได้อย่างไร — หนึ่งใน filtered, searched, recommended, similar, popular, spotlight จากนั้นจะนับการเปิดนี้เป็นของแขก ไม่ต้องระบุหากคุณเพียงตรวจสอบสถานที่ด้วยตนเอง |
fields | array<string> | ฟิลด์ที่ต้องการส่งคืน; โดยค่าเริ่มต้นจะแสดงข้อมูลแบบย่อ และจะรวมคีย์ไว้เสมอ |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get restaurant"
},
"description": "Read one venue. The default projection is lean — name, keys, region, address, descriptors, how it can be booked and its opening summary. The heavy parts arrive only when you name them in \`fields\`: ContactInformation, MenuCards, MenuCardsV2, labelVector, coverPictures, socialScore, matchInfo, tmType, eventId, businessPro, likesByUser, likesByFollowees, likesUserAvatars, likesFolloweeAvatars. An unprojected document can be larger than the rest of your task.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"accessType": {
"description": "when the guest asked to open this venue, how they reached it — one of filtered, searched, recommended, similar, popular, spotlight. The open is then counted as theirs; leave it out when you are only checking a venue for yourself.",
"type": "string"
},
"fields": {
"description": "the fields to return; the default projection is lean, and keys are always included",
"items": {
"type": "string"
},
"type": "array"
},
"restaurantKey": {
"description": "the venue's key",
"type": "string"
}
},
"required": [
"restaurantKey"
],
"type": "object"
},
"name": "get_restaurant",
"title": "Get restaurant"
}
🔴 like_restaurant write บันทึกว่าตัวตนที่กำลังใช้งานชื่นชอบสถานที่นี้ การกดชอบช่วยให้คำแนะนำถัดไปดีขึ้น และต้องเป็นความเห็นของแขก ไม่ใช่ของคุณ — กดชอบตามที่แขกบอกว่าชอบ
กดชอบร้านอาหาร
บันทึกว่าตัวตนที่กำลังใช้งานชื่นชอบสถานที่นี้ การกดชอบช่วยให้คำแนะนำถัดไปดีขึ้น และต้องเป็นความเห็นของแขก ไม่ใช่ของคุณ — กดชอบตามที่แขกบอกว่าชอบ
| Parameter | Type | Description |
|---|---|---|
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้; หากส่งคีย์เดิมอีกครั้ง จะส่งคืนผลลัพธ์แรกแทนการเขียนซ้ำ |
restaurantKey required | string | คีย์ของสถานที่ |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Like restaurant"
},
"description": "Record that the acting identity likes this venue. Liking is what makes the recommendations that follow better, and it is the guest's statement, not yours — like what they said they liked.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"restaurantKey": {
"description": "the venue's key",
"type": "string"
}
},
"required": [
"idempotencyKey",
"restaurantKey"
],
"type": "object"
},
"name": "like_restaurant",
"title": "Like restaurant"
}
🔴 submit_restaurant_impressions write แจ้งให้เราทราบว่าตัวตนนี้เห็นสถานที่ใดบ้างจริง ๆ และได้ดำเนินการกับสถานที่ใดบ้าง ส่งหนึ่งชุดต่อเทิร์น โดยใช้ sessionId ที่คุณกำหนดเองและคงค่าเดิมตลอดทั้งบทสนทนา รายงานสิ่งที่เกิดขึ้นจริง ไม่ใช่สิ่งที่ตั้งใจจะทำ เพราะระบบแนะนำเรียนรู้จากสัญญาณเหล่านี้
ส่งข้อมูลการพบเห็นร้านอาหาร
แจ้งให้เราทราบว่าตัวตนนี้เห็นสถานที่ใดบ้างจริง ๆ และได้ดำเนินการกับสถานที่ใดบ้าง ส่งหนึ่งชุดต่อเทิร์น โดยใช้ sessionId ที่คุณกำหนดเองและคงค่าเดิมตลอดทั้งบทสนทนา รายงานสิ่งที่เกิดขึ้นจริง ไม่ใช่สิ่งที่ตั้งใจจะทำ เพราะระบบแนะนำเรียนรู้จากสัญญาณเหล่านี้
| Parameter | Type | Description |
|---|---|---|
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้; หากส่งคีย์เดิมอีกครั้ง จะส่งคืนผลลัพธ์แรกแทนการเขียนซ้ำ |
impressions required | array<object> | สิ่งที่แสดงหรือสิ่งที่ดำเนินการ |
impressions[].accessType required | string | หนึ่งใน filtered, searched, recommended, similar, popular, spotlight |
impressions[].restaurantKey required | string | |
sessionId required | string | UUID ที่คุณกำหนดเอง โดยใช้ค่าเดียวกันสำหรับทุกชุดในบทสนทนาเดียวกัน |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Submit restaurant impressions"
},
"description": "Tell us which venues the identity actually saw, and which of them it acted on. One batch per turn, with a sessionId of your own that stays the same for the whole conversation. Report what happened, never what you intend: these are the signals the recommender learns from.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"impressions": {
"description": "what was shown or acted on",
"items": {
"additionalProperties": false,
"properties": {
"accessType": {
"description": "one of filtered, searched, recommended, similar, popular, spotlight",
"type": "string"
},
"restaurantKey": {
"type": "string"
}
},
"required": [
"accessType",
"restaurantKey"
],
"type": "object"
},
"type": "array"
},
"sessionId": {
"description": "a UUID of your own, the same for every batch in one conversation",
"type": "string"
}
},
"required": [
"idempotencyKey",
"impressions",
"sessionId"
],
"type": "object"
},
"name": "submit_restaurant_impressions",
"title": "Submit restaurant impressions"
}
🔴 unlike_restaurant write ยกเลิกการกดชอบ สถานที่ยังคงอยู่ในแค็ตตาล็อก; มีเพียงความเห็นของตัวตนที่มีต่อสถานที่นั้นเท่านั้นที่ถูกนำออก
ยกเลิกการกดชอบร้านอาหาร
ยกเลิกการกดชอบ สถานที่ยังคงอยู่ในแค็ตตาล็อก; มีเพียงความเห็นของตัวตนที่มีต่อสถานที่นั้นเท่านั้นที่ถูกนำออก
| Parameter | Type | Description |
|---|---|---|
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้; หากส่งคีย์เดิมอีกครั้ง จะส่งคืนผลลัพธ์แรกแทนการเขียนซ้ำ |
restaurantKey required | string | คีย์ของสถานที่ |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Unlike restaurant"
},
"description": "Take back a like. The venue stays in the catalogue; only the identity's opinion of it is removed.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"restaurantKey": {
"description": "the venue's key",
"type": "string"
}
},
"required": [
"idempotencyKey",
"restaurantKey"
],
"type": "object"
},
"name": "unlike_restaurant",
"title": "Unlike restaurant"
}
AVAILABILITY
🟢 get_reservation_info read วิธีที่สถานที่นี้รับการจอง mode\ เป็นแบบทันทีเมื่อยืนยันโต๊ะว่างได้ทันที ส่วนแบบคำขอต้องให้พนักงานของสถานที่ตอบรับ และเครื่องมือจะปฏิเสธหากสถานที่ไม่รับจองเลย โปรดอ่านข้อมูลนี้ก่อน เพราะจะเป็นตัวกำหนดว่าคุณต้องเรียก create_instant_reservation หรือ create_reservation_request maxPeople\ คือจำนวนคนสูงสุดที่เราสามารถจัดที่นั่งให้ได้ เครื่องมือนี้ใช้สำหรับอ่านข้อมูลเท่านั้น — ไม่ได้จองหรือบันทึกอะไร
รับข้อมูลการจอง
วิธีที่สถานที่นี้รับการจอง mode\ เป็นแบบทันทีเมื่อยืนยันโต๊ะว่างได้ทันที ส่วนแบบคำขอต้องให้พนักงานของสถานที่ตอบรับ และเครื่องมือจะปฏิเสธหากสถานที่ไม่รับจองเลย โปรดอ่านข้อมูลนี้ก่อน เพราะจะเป็นตัวกำหนดว่าคุณต้องเรียก create_instant_reservation หรือ create_reservation_request maxPeople\ คือจำนวนคนสูงสุดที่เราสามารถจัดที่นั่งให้ได้ เครื่องมือนี้ใช้สำหรับอ่านข้อมูลเท่านั้น — ไม่ได้จองหรือบันทึกอะไร
| Parameter | Type | Description |
|---|---|---|
restaurantKey required | string | คีย์ของสถานที่ |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get reservation info"
},
"description": "How this venue takes reservations. \`mode\` is instant when tables are confirmed live, request when someone at the venue has to accept, and the tool refuses when the venue takes none at all. Read this first: it decides whether you call create_instant_reservation or create_reservation_request. \`maxPeople\` is the largest party we can place anywhere. This reads only — it books nothing and records nothing.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"restaurantKey": {
"description": "the venue's key",
"type": "string"
}
},
"required": [
"restaurantKey"
],
"type": "object"
},
"name": "get_reservation_info",
"title": "Get reservation info"
}
🟢 list_availability_slots read โต๊ะที่ว่างในสถานที่หนึ่งแห่งในวันหนึ่ง เวลาเป็นเวลาท้องถิ่นของสถานที่และไม่ได้อยู่บนช่วงเวลาคงที่ — ให้จองเวลาที่อ่านได้จากที่นี่ ไม่ใช่เวลาปัดเศษที่คุณเลือกเอง สถานที่ที่รับคำขอจะแสดง windows\ แทน ซึ่งเป็นช่วงเวลาที่สามารถส่งคำขอได้ หากทั้งสองรายการว่าง แสดงว่าปิดในวันนั้นหรือเลยช่วงเวลาที่เปิดให้จองแล้ว
แสดงรายการช่วงเวลาว่าง
โต๊ะที่ว่างในสถานที่หนึ่งแห่งในวันหนึ่ง เวลาเป็นเวลาท้องถิ่นของสถานที่และไม่ได้อยู่บนช่วงเวลาคงที่ — ให้จองเวลาที่อ่านได้จากที่นี่ ไม่ใช่เวลาปัดเศษที่คุณเลือกเอง สถานที่ที่รับคำขอจะแสดง windows\ แทน ซึ่งเป็นช่วงเวลาที่สามารถส่งคำขอได้ หากทั้งสองรายการว่าง แสดงว่าปิดในวันนั้นหรือเลยช่วงเวลาที่เปิดให้จองแล้ว
| Parameter | Type | Description |
|---|---|---|
date required | string | วันที่ต้องการอ่านข้อมูล ในรูปแบบ RFC3339 พร้อม UTC offset ของภูมิภาค |
restaurantKey required | string | คีย์ของสถานที่ |
pax | integer | จำนวนคน เพื่อกรองช่วงเวลาที่รองรับจำนวนคนไม่พอออก |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List availability slots"
},
"description": "The tables free at one venue on one day. Times are the venue's own wall clock, and they sit on no fixed grid — book a time you read here rather than a round number you chose. A request-mode venue answers in \`windows\` instead: the spans it will consider a request inside. Both empty means shut that day, or past the booking horizon.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"date": {
"description": "the day to read, RFC3339 with the region's UTC offset",
"type": "string"
},
"pax": {
"description": "party size, to drop slots too small for it",
"type": "integer"
},
"restaurantKey": {
"description": "the venue's key",
"type": "string"
}
},
"required": [
"date",
"restaurantKey"
],
"type": "object"
},
"name": "list_availability_slots",
"title": "List availability slots"
}
RESERVATION
🔴 cancel_reservation destructive ยกเลิกการจองที่ตัวตนเป็นเจ้าของ การดำเนินการนี้ย้อนกลับไม่ได้ และจะคืนโต๊ะให้ผู้อื่น ก่อนอื่นให้อ่านข้อมูลการจอง แจ้งชื่อสถานที่และเวลากลับไปยังแขก รอให้แขกตอบ แล้วจึงส่งข้อมูลทั้งสองรายการนี้กลับมา: confirmRestaurantName\ และ confirmDateTime\ ต้องตรงกับข้อมูลการจองในระบบ มิฉะนั้นการเรียกใช้จะถูกปฏิเสธ ห้ามยกเลิกโดยใช้คีย์เพียงอย่างเดียว ไม่ว่าคุณจะแน่ใจแค่ไหนก็ตาม
ยกเลิกการจอง
ยกเลิกการจองที่ตัวตนเป็นเจ้าของ การดำเนินการนี้ย้อนกลับไม่ได้ และจะคืนโต๊ะให้ผู้อื่น ก่อนอื่นให้อ่านข้อมูลการจอง แจ้งชื่อสถานที่และเวลากลับไปยังแขก รอให้แขกตอบ แล้วจึงส่งข้อมูลทั้งสองรายการนี้กลับมา: confirmRestaurantName\ และ confirmDateTime\ ต้องตรงกับข้อมูลการจองในระบบ มิฉะนั้นการเรียกใช้จะถูกปฏิเสธ ห้ามยกเลิกโดยใช้คีย์เพียงอย่างเดียว ไม่ว่าคุณจะแน่ใจแค่ไหนก็ตาม
| Parameter | Type | Description |
|---|---|---|
confirmDateTime required | string | เวลาจองตามที่คุณแจ้งแก่แขก ในรูปแบบ RFC3339 |
confirmRestaurantName required | string | ชื่อสถานที่ตามที่คุณแจ้งแก่แขก |
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้; หากส่งคีย์เดิมอีกครั้ง จะส่งคืนผลลัพธ์แรกแทนการเขียนซ้ำ |
reservationKey required | string | การจองที่จะยกเลิก จากชุดการจองที่เป็นของคุณใน list_reservations |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Cancel reservation"
},
"description": "Cancel a reservation the identity owns. This cannot be undone and the table is given up. Read the reservation first, say the venue and the time back to the guest, wait for them, and then echo both here: \`confirmRestaurantName\` and \`confirmDateTime\` must match the reservation on file or the call is refused. Never cancel on a key alone, however sure you are of it.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"confirmDateTime": {
"description": "the reservation's time as you said it to the guest, RFC3339",
"type": "string"
},
"confirmRestaurantName": {
"description": "the venue's name as you said it to the guest",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"reservationKey": {
"description": "the reservation to cancel, from the owned set of list_reservations",
"type": "string"
}
},
"required": [
"confirmDateTime",
"confirmRestaurantName",
"idempotencyKey",
"reservationKey"
],
"type": "object"
},
"name": "cancel_reservation",
"title": "Cancel reservation"
}
🔴 create_instant_reservation write จองโต๊ะที่ว่างอยู่ในขณะนี้ ใช้กับสถานที่ที่รับจองแบบทันที และการจองจะได้รับการยืนยันเมื่อเครื่องมือส่งผลลัพธ์กลับมา จองเวลา dateTime\ ที่อ่านได้จาก list_availability_slots — ช่วงเวลาของสถานที่ไม่ได้อยู่บนช่วงเวลาคงที่ ดังนั้นเวลาปัดเศษมักจะไม่ใช่ช่วงเวลาที่ว่าง ปล่อย approxMinutes\ ไว้ที่ 0 เว้นแต่แขกจะบอกว่ายืดหยุ่นได้: ค่าที่ไม่ใช่ 0 จะอนุญาตให้สถานที่จองเวลาใกล้เคียงแทน และคำตอบจะแจ้งไว้ใน adjusted\ และ bookedDate\ การจองจะใช้ตัวตนที่บันทึกไว้ ซึ่งต้องมีทั้งอีเมลและหมายเลขโทรศัพท์สำหรับสถานที่ที่รับจองแบบทันที
สร้างการจองแบบทันที
เลือกโต๊ะที่ยังว่างอยู่ตอนนี้ สำหรับสถานที่ที่รับจองทันที และจะยืนยันโต๊ะเมื่อส่งคำขอจอง หากจอง dateTime\ ที่คุณอ่านจาก list_availability_slots — ช่วงเวลาของสถานที่ไม่ได้อยู่บนกริดเวลา ดังนั้นเวลาที่เป็นเลขกลมมักจะไม่ใช่ช่วงเวลาที่มีให้จอง ปล่อย approxMinutes\ ไว้ที่ 0 เว้นแต่แขกจะบอกว่ายืดหยุ่นได้: ค่าที่ไม่ใช่ศูนย์จะทำให้สถานที่จองเวลาใกล้เคียงแทน และคำตอบจะแจ้งไว้ใน adjusted\ และ bookedDate\ การจองจะใช้ข้อมูลประจำตัวที่บันทึกไว้ ซึ่งสำหรับสถานที่ที่รับจองทันทีต้องมีทั้งอีเมลและหมายเลขโทรศัพท์
| Parameter | Type | Description |
|---|---|---|
dateTime required | string | ช่วงเวลาที่ต้องการจอง ในรูปแบบ RFC3339 พร้อม UTC offset ของภูมิภาค ตามที่อ่านจาก list_availability_slots |
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้ หากส่งคีย์เดิมอีกครั้ง ระบบจะแสดงผลลัพธ์แรกแทนการเขียนซ้ำ |
pax required | integer | จำนวนผู้ร่วมโต๊ะ |
restaurantKey required | string | คีย์ของสถานที่ |
approxMinutes | integer | ระยะห่างจาก dateTime ที่สถานที่อาจจองให้แทนได้; 0 หมายถึงเวลานี้เท่านั้น หรือไม่จอง |
areaId | string | บริเวณที่ต้องการนั่ง โดยเลือกจากช่วงเวลาที่เลือกไว้ ใช้จำกัดการค้นหาและจะไม่เปลี่ยนเวลาจอง |
comment | string | หมายเหตุถึงสถานที่ โดยใช้ถ้อยคำของแขก |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Create instant reservation"
},
"description": "Take a table that is free now. This is for instant venues and the table is confirmed when it returns. Book a \`dateTime\` you read from list_availability_slots — the venue's slots sit on no grid, so a round number is usually not one of them. Leave \`approxMinutes\` at 0 unless the guest said they are flexible: a non-zero value lets the venue book a nearby time instead, and the answer says so in \`adjusted\` and \`bookedDate\`. The booking runs on the stored identity, which needs both an email and a phone for an instant venue.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"approxMinutes": {
"description": "how far from dateTime the venue may book instead; 0 means this time or nothing",
"type": "integer"
},
"areaId": {
"description": "the area to seat in, from the slot you chose; it narrows the search and never moves the booking",
"type": "string"
},
"comment": {
"description": "a note for the venue, in the guest's words",
"type": "string"
},
"dateTime": {
"description": "the slot to take, RFC3339 with the region's UTC offset, as read from list_availability_slots",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"pax": {
"description": "party size",
"type": "integer"
},
"restaurantKey": {
"description": "the venue's key",
"type": "string"
}
},
"required": [
"dateTime",
"idempotencyKey",
"pax",
"restaurantKey"
],
"type": "object"
},
"name": "create_instant_reservation",
"title": "Create instant reservation"
}
🔴 create_reservation_offer write เปิดการจองที่สถานที่ซึ่งรับจองผ่านวิดเจ็ตของตนเอง ใช้สำหรับเขียนข้อมูล: ระบบจะสร้างรายการจองฉบับร่างที่ระบุว่าเป็นของข้อมูลประจำตัวที่กำลังใช้งาน และสร้าง widgetUrl\ แบบใช้ครั้งเดียวให้แขกดำเนินการจองให้เสร็จ ส่ง URL ให้แขก จากนั้นตรวจสอบ get_reservation_status โดยใช้ reservationKey\ ที่ส่งกลับมา เรียกใช้หนึ่งครั้งต่อการพยายามจองหนึ่งครั้ง — การเรียกครั้งที่สองจะสร้างรายการจองฉบับร่างอีกรายการ สถานที่ที่รับจองโดยตรงไม่ต้องใช้ข้อเสนอ: ให้ใช้ create_instant_reservation หรือ create_reservation_request แทน
สร้างข้อเสนอการจอง
เปิดการจองที่สถานที่ซึ่งรับจองผ่านวิดเจ็ตของตนเอง ใช้สำหรับเขียนข้อมูล: ระบบจะสร้างรายการจองฉบับร่างที่ระบุว่าเป็นของข้อมูลประจำตัวที่กำลังใช้งาน และสร้าง widgetUrl\ แบบใช้ครั้งเดียวให้แขกดำเนินการจองให้เสร็จ ส่ง URL ให้แขก จากนั้นตรวจสอบ get_reservation_status โดยใช้ reservationKey\ ที่ส่งกลับมา เรียกใช้หนึ่งครั้งต่อการพยายามจองหนึ่งครั้ง — การเรียกครั้งที่สองจะสร้างรายการจองฉบับร่างอีกรายการ สถานที่ที่รับจองโดยตรงไม่ต้องใช้ข้อเสนอ: ให้ใช้ create_instant_reservation หรือ create_reservation_request แทน
| Parameter | Type | Description |
|---|---|---|
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้ หากส่งคีย์เดิมอีกครั้ง ระบบจะแสดงผลลัพธ์แรกแทนการเขียนซ้ำ |
restaurantKey required | string | คีย์ของสถานที่ |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Create reservation offer"
},
"description": "Open a booking at a venue that books through its own widget. This writes: it mints a draft attributed to the acting identity and a single-use \`widgetUrl\` for the guest to finish in. Hand the URL to the guest, then poll get_reservation_status on the \`reservationKey\` it returns. Call it once per booking attempt — a second call mints a second draft. A venue that books natively needs no offer: use create_instant_reservation or create_reservation_request instead.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"restaurantKey": {
"description": "the venue's key",
"type": "string"
}
},
"required": [
"idempotencyKey",
"restaurantKey"
],
"type": "object"
},
"name": "create_reservation_offer",
"title": "Create reservation offer"
}
🔴 create_reservation_request write ขอจองโต๊ะกับสถานที่ สำหรับสถานที่ที่รับคำขอจอง: การจองจะกลับมาในสถานะรอดำเนินการ และเจ้าหน้าที่ของสถานที่จะเป็นผู้ตอบรับหรือปฏิเสธ ดังนั้นให้แจ้งแขกว่าโต๊ะยังไม่ได้รับการยืนยัน เวลาต้องอยู่ภายในช่วงเวลาใดช่วงเวลาหนึ่งที่ list_availability_slots รายงานไว้ การจองจะใช้ข้อมูลประจำตัวที่บันทึกไว้ — ชื่อและข้อมูลติดต่อจะอ่านจากระเบียน ไม่ได้มาจากการเรียกนี้
สร้างคำขอจอง
ขอจองโต๊ะกับสถานที่ สำหรับสถานที่ที่รับคำขอจอง: การจองจะกลับมาในสถานะรอดำเนินการ และเจ้าหน้าที่ของสถานที่จะเป็นผู้ตอบรับหรือปฏิเสธ ดังนั้นให้แจ้งแขกว่าโต๊ะยังไม่ได้รับการยืนยัน เวลาต้องอยู่ภายในช่วงเวลาใดช่วงเวลาหนึ่งที่ list_availability_slots รายงานไว้ การจองจะใช้ข้อมูลประจำตัวที่บันทึกไว้ — ชื่อและข้อมูลติดต่อจะอ่านจากระเบียน ไม่ได้มาจากการเรียกนี้
| Parameter | Type | Description |
|---|---|---|
dateTime required | string | เวลาที่ต้องการ ในรูปแบบ RFC3339 พร้อม UTC offset ของภูมิภาค |
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้ หากส่งคีย์เดิมอีกครั้ง ระบบจะแสดงผลลัพธ์แรกแทนการเขียนซ้ำ |
pax required | integer | จำนวนผู้ร่วมโต๊ะ |
restaurantKey required | string | คีย์ของสถานที่ |
comment | string | หมายเหตุถึงสถานที่ โดยใช้ถ้อยคำของแขก |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Create reservation request"
},
"description": "Ask a venue for a table. This is for request-mode venues: the reservation comes back pending and someone at the venue accepts or declines it, so tell the guest it is not yet a table. The time must fall inside one of the windows list_availability_slots reported. The booking runs on the stored identity — its name and contact are read from the record, not from this call.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"comment": {
"description": "a note for the venue, in the guest's words",
"type": "string"
},
"dateTime": {
"description": "the time asked for, RFC3339 with the region's UTC offset",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"pax": {
"description": "party size",
"type": "integer"
},
"restaurantKey": {
"description": "the venue's key",
"type": "string"
}
},
"required": [
"dateTime",
"idempotencyKey",
"pax",
"restaurantKey"
],
"type": "object"
},
"name": "create_reservation_request",
"title": "Create reservation request"
}
🔴 get_reservation_status read สถานะการจองรายการหนึ่งของข้อมูลประจำตัวที่กำลังใช้งาน ตรวจสอบหลังจากส่งข้อเสนอ: การจองผ่านวิดเจ็ตจะมีผลจริงก็ต่อเมื่อสถานที่ยืนยันแล้ว และสถานะจะแจ้งผลดังกล่าว
รับสถานะการจอง
สถานะการจองรายการหนึ่งของข้อมูลประจำตัวที่กำลังใช้งาน ตรวจสอบหลังจากส่งข้อเสนอ: การจองผ่านวิดเจ็ตจะมีผลจริงก็ต่อเมื่อสถานที่ยืนยันแล้ว และสถานะจะแจ้งผลดังกล่าว
| Parameter | Type | Description |
|---|---|---|
reservationKey required | string | คีย์ของการจอง จาก list_reservations |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get reservation status"
},
"description": "Where one reservation of the acting identity stands. Poll this after an offer: a widget booking becomes real only once the venue confirms it, and the status is how that arrives.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"reservationKey": {
"description": "the reservation's key, from list_reservations",
"type": "string"
}
},
"required": [
"reservationKey"
],
"type": "object"
},
"name": "get_reservation_status",
"title": "Get reservation status"
}
🔴 list_reservation_slots read ช่วงเวลาใหม่ที่อาจย้ายการจองที่มีอยู่ไปได้ ซึ่งเป็นคำถามคนละข้อกับ list_availability_slots: ขอบเขตจำกัดอยู่ที่การจองนั้นและตัวเลือกที่สถานที่อนุญาตให้เปลี่ยนได้ เฉพาะการจองที่ได้รับการตอบรับแล้ว ณ สถานที่ที่มีข้อมูลเวลาว่างแบบเรียลไทม์เท่านั้นที่ย้ายได้
แสดงช่วงเวลาสำหรับการจอง
ช่วงเวลาใหม่ที่อาจย้ายการจองที่มีอยู่ไปได้ ซึ่งเป็นคำถามคนละข้อกับ list_availability_slots: ขอบเขตจำกัดอยู่ที่การจองนั้นและตัวเลือกที่สถานที่อนุญาตให้เปลี่ยนได้ เฉพาะการจองที่ได้รับการตอบรับแล้ว ณ สถานที่ที่มีข้อมูลเวลาว่างแบบเรียลไทม์เท่านั้นที่ย้ายได้
| Parameter | Type | Description |
|---|---|---|
reservationKey required | string | การจองที่จะย้าย จาก list_reservations |
fromDate | string | วันแรกที่ต้องการตรวจสอบ ในรูปแบบ RFC3339; หากไม่ระบุ จะใช้วันของการจองนั้น |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List reservation slots"
},
"description": "Where an existing reservation could move to. This is a different question from list_availability_slots: it is scoped to the reservation and to what the venue will let it become. Only an accepted reservation at a venue with live availability can move.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"fromDate": {
"description": "the first day to look at, RFC3339; the reservation's own day when omitted",
"type": "string"
},
"reservationKey": {
"description": "the reservation to move, from list_reservations",
"type": "string"
}
},
"required": [
"reservationKey"
],
"type": "object"
},
"name": "list_reservation_slots",
"title": "List reservation slots"
}
🔴 list_reservations read การจองทั้งหมดที่ข้อมูลประจำตัวที่กำลังใช้งานถืออยู่ owned\ ดำเนินการต่อได้ — คีย์เหล่านั้นคือคีย์ที่เครื่องมือเขียนข้อมูลใช้ foundByEmail\ ถูกโอนไปยังเจ้าของรายอื่นแล้ว: ระบบจะแสดงรายการนี้เพื่อให้คุณพูดถึงได้ แต่จะปฏิเสธการเขียนข้อมูลทุกครั้งที่เกี่ยวข้อง
แสดงรายการการจอง
การจองทั้งหมดที่ข้อมูลประจำตัวที่กำลังใช้งานถืออยู่ owned\ ดำเนินการต่อได้ — คีย์เหล่านั้นคือคีย์ที่เครื่องมือเขียนข้อมูลใช้ foundByEmail\ ถูกโอนไปยังเจ้าของรายอื่นแล้ว: ระบบจะแสดงรายการนี้เพื่อให้คุณพูดถึงได้ แต่จะปฏิเสธการเขียนข้อมูลทุกครั้งที่เกี่ยวข้อง
ไม่มีพารามิเตอร์
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List reservations"
},
"description": "Every reservation the acting identity holds. \`owned\` is actionable — those keys are the ones the write tools take. \`foundByEmail\` was reassigned to another owner: it is shown so you can speak about it, and every write on it is refused.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "list_reservations",
"title": "List reservations"
}
🔴 update_reservation write ย้ายการจองที่ข้อมูลประจำตัวเป็นเจ้าของ หรือเปลี่ยนจำนวนผู้ร่วมโต๊ะ ระบุเฉพาะสิ่งที่เปลี่ยน เวลาใหม่ต้องเป็นหนึ่งในช่วงเวลาที่ list_reservation_slots เสนอสำหรับการจองนั้น
อัปเดตการจอง
ย้ายการจองที่ข้อมูลประจำตัวเป็นเจ้าของ หรือเปลี่ยนจำนวนผู้ร่วมโต๊ะ ระบุเฉพาะสิ่งที่เปลี่ยน เวลาใหม่ต้องเป็นหนึ่งในช่วงเวลาที่ list_reservation_slots เสนอสำหรับการจองนั้น
| Parameter | Type | Description |
|---|---|---|
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้ หากส่งคีย์เดิมอีกครั้ง ระบบจะแสดงผลลัพธ์แรกแทนการเขียนซ้ำ |
reservationKey required | string | การจองที่ต้องการเปลี่ยน จากชุดการจองที่เป็นเจ้าของใน list_reservations |
dateTime | string | เวลาใหม่ ในรูปแบบ RFC3339 พร้อม UTC offset ของภูมิภาค |
pax | integer | จำนวนผู้ร่วมโต๊ะใหม่ |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Update reservation"
},
"description": "Move a reservation the identity owns, or change its party size. Name only what changes. A new time must be one list_reservation_slots offered for that reservation.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"dateTime": {
"description": "the new time, RFC3339 with the region's UTC offset",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"pax": {
"description": "the new party size",
"type": "integer"
},
"reservationKey": {
"description": "the reservation to change, from the owned set of list_reservations",
"type": "string"
}
},
"required": [
"idempotencyKey",
"reservationKey"
],
"type": "object"
},
"name": "update_reservation",
"title": "Update reservation"
}
ข้อมูลประจำตัว
🔴 get_identity read ข้อมูลประจำตัวที่คุณกำลังดำเนินการแทน อ่านก่อนถามข้อมูลใด ๆ จากแขก: ค่าที่มีอยู่ในระบบจะไม่ถูกแทนที่ และการถามซ้ำในสิ่งที่เรามีอยู่แล้วแสดงว่าไม่ได้ตั้งใจฟัง
รับข้อมูลประจำตัว
ข้อมูลประจำตัวที่คุณกำลังดำเนินการแทน อ่านก่อนถามข้อมูลใด ๆ จากแขก: ค่าที่มีอยู่ในระบบจะไม่ถูกแทนที่ และการถามซ้ำในสิ่งที่เรามีอยู่แล้วแสดงว่าไม่ได้ตั้งใจฟัง
ไม่มีพารามิเตอร์
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get identity"
},
"description": "The identity you are acting for. Read it before asking the guest for anything: a value already on file is never replaced, and asking again for what we hold reads as not listening.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "get_identity",
"title": "Get identity"
}
🟢 get_session read การเชื่อมต่อนี้เข้าถึงอะไรได้บ้าง: ขั้นตอนการใช้งานที่เปิดให้ใช้ และบุคคลที่ลงชื่อเข้าใช้ซึ่งคุณกำลังดำเนินการแทนพร้อมระดับของบุคคลนั้น — acting\ จะไม่มีจนกว่าจะมีผู้ลงชื่อเข้าใช้ เรียกใช้ก่อนเมื่อไม่แน่ใจว่ามีผู้ลงชื่อเข้าใช้หรือไม่ และอ่าน climbWith\ เพื่อดูเครื่องมือที่รวบรวมข้อมูลที่ระดับปัจจุบันยังขาดอยู่
รับเซสชัน
การเชื่อมต่อนี้เข้าถึงอะไรได้บ้าง: ขั้นตอนการใช้งานที่เปิดให้ใช้ และบุคคลที่ลงชื่อเข้าใช้ซึ่งคุณกำลังดำเนินการแทนพร้อมระดับของบุคคลนั้น — acting\ จะไม่มีจนกว่าจะมีผู้ลงชื่อเข้าใช้ เรียกใช้ก่อนเมื่อไม่แน่ใจว่ามีผู้ลงชื่อเข้าใช้หรือไม่ และอ่าน climbWith\ เพื่อดูเครื่องมือที่รวบรวมข้อมูลที่ระดับปัจจุบันยังขาดอยู่
ไม่มีพารามิเตอร์
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get session"
},
"description": "What this connection reaches: the journeys open to it, and the signed-in person you act for with their rung — \`acting\` is absent until someone signs in. Call it first when unsure whether anyone is signed in, and read \`climbWith\` for the tool that collects whatever the current rung is missing.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "get_session",
"title": "Get session"
}
🔴 promote_identity write เลื่อนระดับไปยังระดับที่จองได้ โดยระบุข้อมูลที่ข้อมูลประจำตัวยังขาดอยู่ ได้แก่ ชื่อและนามสกุล ช่องทางติดต่อหนึ่งช่องทาง และการยอมรับข้อกำหนด ส่งเฉพาะข้อมูลที่แขกบอกคุณในการสนทนานี้ สถานที่ที่รับจองทันทีต้องใช้อีเมลและหมายเลขโทรศัพท์ทั้งคู่ ดังนั้นให้รวบรวมทั้งสองอย่างเมื่อแขกต้องการโต๊ะที่ยืนยันแล้ว
เลื่อนระดับข้อมูลประจำตัว
เลื่อนระดับไปยังระดับที่จองได้ โดยระบุข้อมูลที่ข้อมูลประจำตัวยังขาดอยู่ ได้แก่ ชื่อและนามสกุล ช่องทางติดต่อหนึ่งช่องทาง และการยอมรับข้อกำหนด ส่งเฉพาะข้อมูลที่แขกบอกคุณในการสนทนานี้ สถานที่ที่รับจองทันทีต้องใช้อีเมลและหมายเลขโทรศัพท์ทั้งคู่ ดังนั้นให้รวบรวมทั้งสองอย่างเมื่อแขกต้องการโต๊ะที่ยืนยันแล้ว
| Parameter | Type | Description |
|---|---|---|
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้ หากส่งคีย์เดิมอีกครั้ง ระบบจะแสดงผลลัพธ์แรกแทนการเขียนซ้ำ |
acceptTerms | boolean | true เมื่อแขกยอมรับข้อกำหนดที่ https://www.tastematch.io/agb |
email | string | อีเมลติดต่อ |
firstName | string | ชื่อของแขก |
lastName | string | นามสกุลของแขก |
phone | string | หมายเลขโทรศัพท์ติดต่อในรูปแบบสากล |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Promote identity"
},
"description": "Climb to the rung that can reserve, by supplying what the identity is missing: a first and last name, one contact channel, and accepted Terms. Only send what the guest told you in this conversation. An instant venue needs both an email and a phone, so collect both when the guest wants a confirmed table.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"acceptTerms": {
"description": "true when the guest accepts the Terms at https://www.tastematch.io/agb",
"type": "boolean"
},
"email": {
"description": "contact email",
"type": "string"
},
"firstName": {
"description": "the guest's first name",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"lastName": {
"description": "the guest's last name",
"type": "string"
},
"phone": {
"description": "contact phone in international format",
"type": "string"
}
},
"required": [
"idempotencyKey"
],
"type": "object"
},
"name": "promote_identity",
"title": "Promote identity"
}
🔴 update_identity write แก้ไขหรือกรอกข้อมูลประจำตัวให้ครบถ้วน ช่องที่ว่างจะถูกกรอก และข้อมูลที่ไม่ถูกต้องจะได้รับการแก้ไข แต่ช่องทางที่แขกยืนยันแล้วจะเปลี่ยนจากที่นี่ไม่ได้ ส่งเฉพาะข้อมูลที่เปลี่ยนแปลง
อัปเดตข้อมูลประจำตัว
แก้ไขหรือกรอกข้อมูลประจำตัวให้ครบถ้วน ช่องที่ว่างจะถูกกรอก และข้อมูลที่ไม่ถูกต้องจะได้รับการแก้ไข แต่ช่องทางที่แขกยืนยันแล้วจะเปลี่ยนจากที่นี่ไม่ได้ ส่งเฉพาะข้อมูลที่เปลี่ยนแปลง
| Parameter | Type | Description |
|---|---|---|
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้ หากส่งคีย์เดิมอีกครั้ง ระบบจะแสดงผลลัพธ์แรกแทนการเขียนซ้ำ |
acceptTerms | boolean | true เมื่อแขกยอมรับข้อกำหนดที่ https://www.tastematch.io/agb |
email | string | อีเมลติดต่อ |
firstName | string | ชื่อของแขก |
lastName | string | นามสกุลของแขก |
phone | string | หมายเลขโทรศัพท์ติดต่อในรูปแบบสากล |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Update identity"
},
"description": "Correct or complete the identity. A blank field is filled and a wrong one is corrected, but a channel the guest has validated cannot be replaced from here. Send only what changed.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"acceptTerms": {
"description": "true when the guest accepts the Terms at https://www.tastematch.io/agb",
"type": "boolean"
},
"email": {
"description": "contact email",
"type": "string"
},
"firstName": {
"description": "the guest's first name",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"lastName": {
"description": "the guest's last name",
"type": "string"
},
"phone": {
"description": "contact phone in international format",
"type": "string"
}
},
"required": [
"idempotencyKey"
],
"type": "object"
},
"name": "update_identity",
"title": "Update identity"
}
รสนิยม
🔴 get_taste_profile read รสนิยมของข้อมูลประจำตัวนี้ที่บันทึกไว้ ได้แก่ คำบรรยายที่มีอยู่ ระดับความมั่นใจที่ระบุสำหรับแต่ละคำ และประเภทรสนิยมที่อนุมานจากคำเหล่านั้น อ่านก่อนระบุรสนิยมอีกครั้ง — คุณกำลังแก้ไขโปรไฟล์ ไม่ใช่เริ่มต้นใหม่
รับโปรไฟล์รสนิยม
รสนิยมของข้อมูลประจำตัวนี้ที่บันทึกไว้ ได้แก่ คำบรรยายที่มีอยู่ ระดับความมั่นใจที่ระบุสำหรับแต่ละคำ และประเภทรสนิยมที่อนุมานจากคำเหล่านั้น อ่านก่อนระบุรสนิยมอีกครั้ง — คุณกำลังแก้ไขโปรไฟล์ ไม่ใช่เริ่มต้นใหม่
ไม่มีพารามิเตอร์
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get taste profile"
},
"description": "What this identity's taste is on file as: the descriptors it carries, the confidence stated for each, and the taste type derived from them. Read it before stating taste again — you are correcting a profile, not starting one.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "get_taste_profile",
"title": "Get taste profile"
}
🔴 submit_taste_profile write ระบุรสนิยมของแขกเป็นระดับความมั่นใจตั้งแต่ 0 ถึง 1 สำหรับคำบรรยายแต่ละคำ และอนุมานให้ได้มากที่สุดเท่าที่บทสนทนารองรับ การดำเนินการนี้จะแทนที่ข้อมูลเดิมที่บันทึกไว้ จึงควรส่งข้อมูลทั้งหมดแทนการส่งเฉพาะส่วนที่แก้ไข คำบรรยายต้องเป็นรายการที่ weights\ ระบุไว้ ซึ่งเผยแพร่ทั้งหมดผ่าน get_vocabulary; รายการอื่นจะถูกปฏิเสธ โอกาสและลักษณะของเมนูจะถูกบันทึกรวมไว้ด้วย แต่เป็นคุณลักษณะของสถานที่ จึงมีผลต่อการกรองแทนที่จะเป็นเวกเตอร์รสนิยม ไม่บังคับ: การค้นหา รายการ และการจองทำงานได้โดยไม่ต้องระบุข้อมูลนี้ แต่ข้อมูลนี้จะทำให้ list_recommended_restaurants ปรับให้เหมาะกับแต่ละบุคคลได้
ส่งโปรไฟล์รสนิยม
ระบุรสนิยมของผู้เข้าพักเป็นค่าความมั่นใจตั้งแต่ 0 ถึง 1 สำหรับแต่ละตัวบ่งชี้ และอนุมานให้ได้มากที่สุดเท่าที่บทสนทนารองรับ ข้อมูลนี้จะแทนที่ข้อมูลเดิมที่บันทึกไว้ ดังนั้นให้ส่งภาพรวมทั้งหมด ไม่ใช่แค่ส่วนที่ต้องแก้ไข ตัวบ่งชี้ต้องเป็นรายการที่ weights\ ระบุไว้ ซึ่งเผยแพร่ทั้งหมดโดย get_vocabulary — หากเป็นรายการอื่น ระบบจะปฏิเสธ โอกาสและลักษณะของเมนูจะถูกจัดเก็บไว้ด้วย แต่เป็นคุณลักษณะของสถานที่ จึงใช้กำหนดตัวกรองแทนที่จะเป็นเวกเตอร์รสนิยม ไม่บังคับ: การค้นพบ รายการ และการจองใช้งานได้โดยไม่ต้องมีข้อมูลนี้ ข้อมูลนี้มีไว้เพื่อทำให้ list_recommended_restaurants เป็นแบบเฉพาะบุคคลเท่านั้น
| Parameter | Type | Description |
|---|---|---|
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้ หากส่งคีย์เดิมอีกครั้ง ระบบจะส่งผลลัพธ์ครั้งแรกกลับมาแทนการเขียนซ้ำ |
weights required | map<string, number> | ค่าความมั่นใจตั้งแต่ 0 ถึง 1 สำหรับแต่ละตัวบ่งชี้ โดยเลือกจาก apero, breakfast, brunch, dinner, dishCocktails, dishCraftBeer, dishNatureWine, dishWine, fineDining, late, lunch, menuFish, menuMeat, menuVegan, menuVegetarian, occasionBusiness, occasionCasual, occasionCelebration, occasionChildren, occasionCulture, occasionGroups, occasionImpressive, occasionRomantic, occasionSolo, priceCheap, pricePricey, salty, sweets |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Submit taste profile"
},
"description": "State the guest's taste as a confidence from 0 to 1 per descriptor, and infer as many as the conversation supports. This replaces what was on file, so send the whole picture rather than a correction. The descriptors are the ones \`weights\` names, all published by get_vocabulary — any other is refused. Occasions and menu characters are stored with the rest but are venue attributes, so they shape filters rather than the taste vector. Optional: discovery, lists and booking all work without it; it only makes list_recommended_restaurants personal.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"weights": {
"additionalProperties": {
"type": "number"
},
"description": "confidence 0 to 1 per descriptor, one of apero, breakfast, brunch, dinner, dishCocktails, dishCraftBeer, dishNatureWine, dishWine, fineDining, late, lunch, menuFish, menuMeat, menuVegan, menuVegetarian, occasionBusiness, occasionCasual, occasionCelebration, occasionChildren, occasionCulture, occasionGroups, occasionImpressive, occasionRomantic, occasionSolo, priceCheap, pricePricey, salty, sweets",
"type": "object"
}
},
"required": [
"idempotencyKey",
"weights"
],
"type": "object"
},
"name": "submit_taste_profile",
"title": "Submit taste profile"
}
รายการ
🔴 add_restaurant_to_list write เพิ่มสถานที่ลงในรายการใดรายการหนึ่งของตัวตน หากเพิ่มรายการที่มีอยู่แล้ว จะไม่มีการเปลี่ยนแปลง
เพิ่มร้านอาหารลงในรายการ
เพิ่มสถานที่ลงในรายการใดรายการหนึ่งของตัวตน หากเพิ่มรายการที่มีอยู่แล้ว จะไม่มีการเปลี่ยนแปลง
| Parameter | Type | Description |
|---|---|---|
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้ หากส่งคีย์เดิมอีกครั้ง ระบบจะส่งผลลัพธ์ครั้งแรกกลับมาแทนการเขียนซ้ำ |
listKey required | string | รายการที่จะเพิ่มลงไป |
restaurantKey required | string | สถานที่ที่จะเพิ่ม |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Add restaurant to list"
},
"description": "Put a venue on one of the identity's lists. Adding one that is already there changes nothing.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"listKey": {
"description": "the list to add to",
"type": "string"
},
"restaurantKey": {
"description": "the venue to add",
"type": "string"
}
},
"required": [
"idempotencyKey",
"listKey",
"restaurantKey"
],
"type": "object"
},
"name": "add_restaurant_to_list",
"title": "Add restaurant to list"
}
🔴 create_list write สร้างรายการที่ตั้งชื่อไว้สำหรับตัวตน ตั้งชื่อให้สื่อถึงวัตถุประสงค์ เพราะผู้เข้าพักจะเห็นชื่อนี้อีกครั้งในครั้งถัดไป และคุณก็จะเห็นด้วย
สร้างรายการ
สร้างรายการที่ตั้งชื่อไว้สำหรับตัวตน ตั้งชื่อให้สื่อถึงวัตถุประสงค์ เพราะผู้เข้าพักจะเห็นชื่อนี้อีกครั้งในครั้งถัดไป และคุณก็จะเห็นด้วย
| Parameter | Type | Description |
|---|---|---|
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้ หากส่งคีย์เดิมอีกครั้ง ระบบจะส่งผลลัพธ์ครั้งแรกกลับมาแทนการเขียนซ้ำ |
title required | string | วัตถุประสงค์ของรายการ ในภาษาของผู้เข้าพัก |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Create list"
},
"description": "Start a named list for the identity. Name it for what it is for — the guest will see the name again next time, and so will you.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"title": {
"description": "what the list is for, in the guest's language",
"type": "string"
}
},
"required": [
"idempotencyKey",
"title"
],
"type": "object"
},
"name": "create_list",
"title": "Create list"
}
🔴 delete_list destructive ลบรายการหนึ่งของตัวตนและทุกอย่างในรายการนั้น อ่านรายการก่อนและแจ้งผู้เข้าพักว่าจะลบอะไร การดำเนินการนี้ย้อนกลับไม่ได้
ลบรายการ
ลบรายการหนึ่งของตัวตนและทุกอย่างในรายการนั้น อ่านรายการก่อนและแจ้งผู้เข้าพักว่าจะลบอะไร การดำเนินการนี้ย้อนกลับไม่ได้
| Parameter | Type | Description |
|---|---|---|
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้ หากส่งคีย์เดิมอีกครั้ง ระบบจะส่งผลลัพธ์ครั้งแรกกลับมาแทนการเขียนซ้ำ |
listKey required | string | รายการที่จะลบ |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Delete list"
},
"description": "Delete one of the identity's lists and everything on it. Read the list first and tell the guest what will go; this cannot be undone.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"listKey": {
"description": "the list to delete",
"type": "string"
}
},
"required": [
"idempotencyKey",
"listKey"
],
"type": "object"
},
"name": "delete_list",
"title": "Delete list"
}
🔴 get_list read อ่านรายการหนึ่งของตัวตนที่กำลังดำเนินการทั้งหมด รวมถึงทุกสถานที่ในรายการนั้น ไม่สามารถอ่านรายการของตัวตนอื่นได้
รับรายการ
อ่านรายการหนึ่งของตัวตนที่กำลังดำเนินการทั้งหมด รวมถึงทุกสถานที่ในรายการนั้น ไม่สามารถอ่านรายการของตัวตนอื่นได้
| Parameter | Type | Description |
|---|---|---|
listKey required | string | คีย์ของรายการ จาก list_lists |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get list"
},
"description": "Read one of the acting identity's lists in full, with every venue on it. Another identity's list is not readable.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"listKey": {
"description": "the list's key, from list_lists",
"type": "string"
}
},
"required": [
"listKey"
],
"type": "object"
},
"name": "get_list",
"title": "Get list"
}
🔴 list_lists read รายการของตัวตนเอง พร้อมจำนวนรายการและภาพหน้าปกของแต่ละรายการ อ่านข้อมูลนี้เมื่อเริ่มบทสนทนากับผู้เข้าพักที่กลับมา เพราะนี่คือสิ่งที่ผู้เข้าพักเก็บไว้ครั้งก่อน
แสดงรายการทั้งหมด
รายการของตัวตนเอง พร้อมจำนวนรายการและภาพหน้าปกของแต่ละรายการ อ่านข้อมูลนี้เมื่อเริ่มบทสนทนากับผู้เข้าพักที่กลับมา เพราะนี่คือสิ่งที่ผู้เข้าพักเก็บไว้ครั้งก่อน
| Parameter | Type | Description |
|---|---|---|
limit | integer | จำนวนแถวที่จะแสดง สูงสุด 50 |
offset | integer | จำนวนแถวที่จะข้าม; ใช้ร่วมกับ totalCount ในผลลัพธ์เพื่อแบ่งหน้า |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List lists"
},
"description": "The identity's own lists, with a count and a cover for each. Read this at the start of a returning conversation: it is what the guest kept last time.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
}
},
"required": [],
"type": "object"
},
"name": "list_lists",
"title": "List lists"
}
🔴 remove_restaurant_from_list destructive นำสถานที่ออกจากรายการหนึ่งของตัวตน ก่อนเรียกใช้ ให้แจ้งผู้เข้าพักว่าจะนำสถานที่ใดออกจากรายการใด เพราะการดำเนินการนี้จะลบข้อมูล
นำร้านอาหารออกจากรายการ
นำสถานที่ออกจากรายการหนึ่งของตัวตน ก่อนเรียกใช้ ให้แจ้งผู้เข้าพักว่าจะนำสถานที่ใดออกจากรายการใด เพราะการดำเนินการนี้จะลบข้อมูล
| Parameter | Type | Description |
|---|---|---|
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้ หากส่งคีย์เดิมอีกครั้ง ระบบจะส่งผลลัพธ์ครั้งแรกกลับมาแทนการเขียนซ้ำ |
listKey required | string | รายการที่จะนำออก |
restaurantKey required | string | สถานที่ที่จะนำออก |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Remove restaurant from list"
},
"description": "Take a venue off one of the identity's lists. Say which venue and which list to the guest before you call it — this removes data.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"listKey": {
"description": "the list to remove from",
"type": "string"
},
"restaurantKey": {
"description": "the venue to remove",
"type": "string"
}
},
"required": [
"idempotencyKey",
"listKey",
"restaurantKey"
],
"type": "object"
},
"name": "remove_restaurant_from_list",
"title": "Remove restaurant from list"
}
🔴 update_list write เปลี่ยนชื่อรายการหนึ่งของตัวตน โดยไม่กระทบสถานที่ในรายการ
อัปเดตรายการ
เปลี่ยนชื่อรายการหนึ่งของตัวตน โดยไม่กระทบสถานที่ในรายการ
| Parameter | Type | Description |
|---|---|---|
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้ หากส่งคีย์เดิมอีกครั้ง ระบบจะส่งผลลัพธ์ครั้งแรกกลับมาแทนการเขียนซ้ำ |
listKey required | string | รายการที่จะเปลี่ยนชื่อ |
title required | string | ชื่อใหม่ |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Update list"
},
"description": "Rename one of the identity's lists. The venues on it are untouched.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"listKey": {
"description": "the list to rename",
"type": "string"
},
"title": {
"description": "the new name",
"type": "string"
}
},
"required": [
"idempotencyKey",
"listKey",
"title"
],
"type": "object"
},
"name": "update_list",
"title": "Update list"
}
กลุ่ม
🔴 close_group_match write ปิดการโหวตเพิ่มเติมสำหรับการจับคู่กลุ่ม การจับคู่และคะแนนโหวตทั้งหมดจะยังอ่านได้ แต่จะหยุดโหวตเท่านั้น ปิดเมื่อกลุ่มตัดสินใจแล้ว จากนั้นจองตัวเลือกที่ชนะ
ปิดการจับคู่กลุ่ม
ปิดการโหวตเพิ่มเติมสำหรับการจับคู่กลุ่ม การจับคู่และคะแนนโหวตทั้งหมดจะยังอ่านได้ แต่จะหยุดโหวตเท่านั้น ปิดเมื่อกลุ่มตัดสินใจแล้ว จากนั้นจองตัวเลือกที่ชนะ
| Parameter | Type | Description |
|---|---|---|
groupMatchKey required | string | การจับคู่ที่จะปิด |
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้ หากส่งคีย์เดิมอีกครั้ง ระบบจะส่งผลลัพธ์ครั้งแรกกลับมาแทนการเขียนซ้ำ |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Close group match"
},
"description": "Close a group match to further votes. The match and every vote stay readable; only voting stops. Close it once the group has decided, then book the winner.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"groupMatchKey": {
"description": "the match to close",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
}
},
"required": [
"groupMatchKey",
"idempotencyKey"
],
"type": "object"
},
"name": "close_group_match",
"title": "Close group match"
}
🔴 create_group_match write เริ่มการตัดสินใจของกลุ่ม โดยระบุสถานที่สองสามแห่ง วันที่สองสามวัน และคนที่ต้องการสอบถาม ผลลัพธ์จะมีลิงก์แชร์ ให้ผู้เข้าพักนำลิงก์นั้นไปส่งต่อ เพราะผู้ได้รับเชิญไม่จำเป็นต้องมีตัวตน TasteMatch ก็สามารถโหวตผ่านลิงก์ได้ จำกัดตัวเลือกให้มีไม่มาก เพราะนี่คือการตัดสินใจ ไม่ใช่แค็ตตาล็อก
สร้างการจับคู่กลุ่ม
เริ่มการตัดสินใจของกลุ่ม โดยระบุสถานที่สองสามแห่ง วันที่สองสามวัน และคนที่ต้องการสอบถาม ผลลัพธ์จะมีลิงก์แชร์ ให้ผู้เข้าพักนำลิงก์นั้นไปส่งต่อ เพราะผู้ได้รับเชิญไม่จำเป็นต้องมีตัวตน TasteMatch ก็สามารถโหวตผ่านลิงก์ได้ จำกัดตัวเลือกให้มีไม่มาก เพราะนี่คือการตัดสินใจ ไม่ใช่แค็ตตาล็อก
| Parameter | Type | Description |
|---|---|---|
dateOptions required | array<string> | วันที่ให้เลือก โดยใช้ RFC3339 พร้อมค่า UTC offset ของภูมิภาค |
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้ หากส่งคีย์เดิมอีกครั้ง ระบบจะส่งผลลัพธ์ครั้งแรกกลับมาแทนการเขียนซ้ำ |
restaurantKeys required | array<string> | สถานที่ให้เลือก |
title required | string | สิ่งที่กลุ่มกำลังตัดสินใจ โดยใช้ถ้อยคำของผู้เข้าพัก |
invitees | array<object> | คนที่ต้องการสอบถาม โดยระบุชื่อและอีเมลของแต่ละคน |
invitees[].displayName required | string | ชื่อที่กลุ่มจะเห็น |
invitees[].email required | string | ปลายทางที่จะส่งคำเชิญ |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Create group match"
},
"description": "Start a group decision: a few venues, a few dates, and the people to ask. The answer carries a share link — give that to the guest to send on, because an invitee needs no TasteMatch identity to vote through it. Keep the options few: this is a decision, not a catalogue.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"dateOptions": {
"description": "the dates to choose between, RFC3339 with the region's UTC offset",
"items": {
"type": "string"
},
"type": "array"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"invitees": {
"description": "the people to ask, each by name and email",
"items": {
"additionalProperties": false,
"properties": {
"displayName": {
"description": "the name the group will see",
"type": "string"
},
"email": {
"description": "where the invitation goes",
"type": "string"
}
},
"required": [
"displayName",
"email"
],
"type": "object"
},
"type": "array"
},
"restaurantKeys": {
"description": "the venues to choose between",
"items": {
"type": "string"
},
"type": "array"
},
"title": {
"description": "what the group is deciding, in the guest's words",
"type": "string"
}
},
"required": [
"dateOptions",
"idempotencyKey",
"restaurantKeys",
"title"
],
"type": "object"
},
"name": "create_group_match",
"title": "Create group match"
}
🔴 delete_group_match destructive ลบการจับคู่กลุ่ม ลิงก์แชร์จะใช้ไม่ได้สำหรับทุกคนที่มีลิงก์ และคะแนนโหวตจะถูกลบไปด้วย อ่านข้อมูลการจับคู่และแจ้งผู้เข้าพักว่าจะลบอะไร ก่อนเรียกใช้
ลบการจับคู่กลุ่ม
ลบการจับคู่กลุ่ม ลิงก์แชร์จะใช้ไม่ได้สำหรับทุกคนที่มีลิงก์ และคะแนนโหวตจะถูกลบไปด้วย อ่านข้อมูลการจับคู่และแจ้งผู้เข้าพักว่าจะลบอะไร ก่อนเรียกใช้
| Parameter | Type | Description |
|---|---|---|
groupMatchKey required | string | การจับคู่ที่จะลบ |
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้ หากส่งคีย์เดิมอีกครั้ง ระบบจะส่งผลลัพธ์ครั้งแรกกลับมาแทนการเขียนซ้ำ |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Delete group match"
},
"description": "Delete a group match. The share link stops working for everyone who holds it, and the votes go with it. Read the match and tell the guest what will go before you call this.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"groupMatchKey": {
"description": "the match to delete",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
}
},
"required": [
"groupMatchKey",
"idempotencyKey"
],
"type": "object"
},
"name": "delete_group_match",
"title": "Delete group match"
}
🔴 get_group_match read การจับคู่กลุ่มหนึ่งที่ตัวตนสร้างขึ้น: สถานที่ ตัวเลือกวันที่ ผู้ได้รับเชิญ ผู้ที่โหวตและโหวตอะไร รวมถึงลิงก์แชร์
รับข้อมูลการจับคู่กลุ่ม
การจับคู่กลุ่มหนึ่งที่ตัวตนสร้างขึ้น: สถานที่ ตัวเลือกวันที่ ผู้ได้รับเชิญ ผู้ที่โหวตและโหวตอะไร รวมถึงลิงก์แชร์
| Parameter | Type | Description |
|---|---|---|
groupMatchKey required | string | คีย์ของการจับคู่ จาก list_group_matches |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get group match"
},
"description": "One group match the identity created: the venues, the date options, who was invited, who has voted and for what, and the share link.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"groupMatchKey": {
"description": "the match's key, from list_group_matches",
"type": "string"
}
},
"required": [
"groupMatchKey"
],
"type": "object"
},
"name": "get_group_match",
"title": "Get group match"
}
🔴 list_group_matches read การจับคู่กลุ่มที่ตัวตนนี้สร้างขึ้น พร้อมจำนวนผู้ได้รับเชิญและจำนวนผู้ที่โหวตแล้ว การจับคู่ที่ตัวตนได้รับเชิญเท่านั้นจะไม่ปรากฏที่นี่
แสดงรายการการจับคู่กลุ่ม
การจับคู่กลุ่มที่ตัวตนนี้สร้างขึ้น พร้อมจำนวนผู้ได้รับเชิญและจำนวนผู้ที่โหวตแล้ว การจับคู่ที่ตัวตนได้รับเชิญเท่านั้นจะไม่ปรากฏที่นี่
| Parameter | Type | Description |
|---|---|---|
limit | integer | จำนวนแถวที่จะแสดง สูงสุด 50 |
offset | integer | จำนวนแถวที่จะข้าม; ใช้ร่วมกับ totalCount ในผลลัพธ์เพื่อแบ่งหน้า |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List group matches"
},
"description": "The group matches this identity created, with how many were invited and how many have voted. Matches it was merely invited to are not here.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "rows to return, at most 50",
"type": "integer"
},
"offset": {
"description": "rows to skip; with totalCount in the result this pages through them",
"type": "integer"
}
},
"required": [],
"type": "object"
},
"name": "list_group_matches",
"title": "List group matches"
}
🔴 submit_group_match_vote write บันทึกคะแนนโหวตของบุคคลหนึ่งในการจับคู่กลุ่มที่ยังเปิดอยู่ ส่ง memberId\ สำหรับผู้ที่ได้รับเชิญด้วยชื่อ หรือส่ง displayName\ แทนสำหรับผู้ที่เข้าร่วมผ่านลิงก์แชร์ ให้บันทึกเฉพาะสิ่งที่บุคคลนั้นพูดจริงเท่านั้น การมีคีย์การจับคู่ถือเป็นการอนุญาตทั้งหมด และ memberId ที่คุณไม่ได้รับจากบุคคลนั้นจะเขียนทับคะแนนโหวตของเขา การจับคู่ต้องยังเปิดอยู่
ส่งคะแนนโหวตสำหรับการจับคู่กลุ่ม
บันทึกคะแนนโหวตของบุคคลหนึ่งในการจับคู่กลุ่มที่ยังเปิดอยู่ ส่ง memberId\ สำหรับผู้ที่ได้รับเชิญด้วยชื่อ หรือส่ง displayName\ แทนสำหรับผู้ที่เข้าร่วมผ่านลิงก์แชร์ ให้บันทึกเฉพาะสิ่งที่บุคคลนั้นพูดจริงเท่านั้น การมีคีย์การจับคู่ถือเป็นการอนุญาตทั้งหมด และ memberId ที่คุณไม่ได้รับจากบุคคลนั้นจะเขียนทับคะแนนโหวตของเขา การจับคู่ต้องยังเปิดอยู่
| Parameter | Type | Description |
|---|---|---|
groupMatchKey required | string | การจับคู่ที่กำลังลงคะแนน |
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้ หากส่งคีย์เดิมอีกครั้ง ระบบจะส่งผลลัพธ์ครั้งแรกกลับมาแทนการเขียนซ้ำ |
picks required | array<object> | ตัวเลือกที่ยอมรับได้หนึ่งรายการต่อคู่สถานที่และวันที่ |
picks[].dateOptionIdx required | integer | ดัชนีของตัวเลือกวันที่ โดยเริ่มนับจากศูนย์ |
picks[].restaurantKey required | string | |
displayName | string | ชื่อของผู้ที่เข้าร่วมผ่านลิงก์ หากไม่ได้รับเชิญด้วยชื่อ |
memberId | string | ผู้ได้รับเชิญที่คะแนนโหวตนี้เป็นของเขา จาก get_group_match |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Submit group match vote"
},
"description": "Cast one person's vote in an open group match. Pass \`memberId\` for someone who was invited by name; pass \`displayName\` instead for someone joining off the share link. Vote only what that person actually said: possession of the match key is the whole authorisation, and a memberId you did not collect from that person overwrites their vote. The match must still be open.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"displayName": {
"description": "the name of someone joining off the link, when they were not invited by name",
"type": "string"
},
"groupMatchKey": {
"description": "the match being voted in",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"memberId": {
"description": "the invitee this vote belongs to, from get_group_match",
"type": "string"
},
"picks": {
"description": "one pick per venue and date pair the person accepts",
"items": {
"additionalProperties": false,
"properties": {
"dateOptionIdx": {
"description": "the index of the date option, counting from zero",
"type": "integer"
},
"restaurantKey": {
"type": "string"
}
},
"required": [
"dateOptionIdx",
"restaurantKey"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"groupMatchKey",
"idempotencyKey",
"picks"
],
"type": "object"
},
"name": "submit_group_match_vote",
"title": "Submit group match vote"
}
แชร์
🔴 cancel_shared_reservation destructive ยกเลิกการจองที่ผู้เข้าพักมีลิงก์แก้ไข การดำเนินการนี้ย้อนกลับไม่ได้ แจ้งชื่อสถานที่และเวลาการจองกลับไปให้ผู้เข้าพักทราบ แล้วรอให้ผู้เข้าพักยืนยันก่อนเรียกใช้ หากเป็นการจองของตัวตนที่กำลังดำเนินการ ให้ใช้ cancel_reservation แทน ซึ่งจะตรวจสอบการยืนยันนั้นให้คุณ
ยกเลิกการจองที่แชร์
ยกเลิกการจองที่ผู้เข้าพักมีลิงก์แก้ไข การดำเนินการนี้ย้อนกลับไม่ได้ แจ้งชื่อสถานที่และเวลาการจองกลับไปให้ผู้เข้าพักทราบ แล้วรอให้ผู้เข้าพักยืนยันก่อนเรียกใช้ หากเป็นการจองของตัวตนที่กำลังดำเนินการ ให้ใช้ cancel_reservation แทน ซึ่งจะตรวจสอบการยืนยันนั้นให้คุณ
| Parameter | Type | Description |
|---|---|---|
editToken required | string | โทเค็นจากลิงก์แก้ไขส่วนตัวของผู้เข้าพัก |
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้ หากส่งคีย์เดิมอีกครั้ง ระบบจะส่งผลลัพธ์ครั้งแรกกลับมาแทนการเขียนซ้ำ |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Cancel shared reservation"
},
"description": "Cancel a reservation the guest holds an edit link for. This cannot be undone. Say the venue and the time back to the guest and wait for them before you call it. For a reservation the acting identity owns, use cancel_reservation instead, which checks that echo for you.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"editToken": {
"description": "the token from the guest's own edit link",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
}
},
"required": [
"editToken",
"idempotencyKey"
],
"type": "object"
},
"name": "cancel_shared_reservation",
"title": "Cancel shared reservation"
}
🔴 create_share_key write สร้างลิงก์ที่ผู้เข้าพักส่งให้ผู้อื่นได้ ลิงก์นี้อ่านได้อย่างเดียว: ผู้ที่เปิดลิงก์ดูได้ แต่แก้ไขไม่ได้ การสร้างลิงก์ซ้ำสำหรับรายการเดิมจะได้ลิงก์เดิม สร้างลิงก์เฉพาะสำหรับสถานที่ที่ผู้เข้าพักสอบถาม หรือการจองที่ตัวตนผู้ดำเนินการเป็นเจ้าของเท่านั้น — ทุกคนที่มีลิงก์อ่านได้ และลิงก์ของการจองจะแสดงสถานที่ วันที่ และจำนวนผู้ร่วมโต๊ะ
สร้างคีย์แชร์
สร้างลิงก์ที่ผู้เข้าพักส่งให้ผู้อื่นได้ ลิงก์นี้อ่านได้อย่างเดียว: ผู้ที่เปิดลิงก์ดูได้ แต่แก้ไขไม่ได้ การสร้างลิงก์ซ้ำสำหรับรายการเดิมจะได้ลิงก์เดิม สร้างลิงก์เฉพาะสำหรับสถานที่ที่ผู้เข้าพักสอบถาม หรือการจองที่ตัวตนผู้ดำเนินการเป็นเจ้าของเท่านั้น — ทุกคนที่มีลิงก์อ่านได้ และลิงก์ของการจองจะแสดงสถานที่ วันที่ และจำนวนผู้ร่วมโต๊ะ
| พารามิเตอร์ | ประเภท | คำอธิบาย |
|---|---|---|
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้ หากส่งคีย์เดิมอีกครั้ง ระบบจะแสดงผลลัพธ์แรกแทนการเขียนซ้ำ |
kind required | string | สิ่งที่จะแชร์: restaurant, reservation |
objectKey required | string | คีย์ของสถานที่หรือการจองที่จะแชร์ |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Create share key"
},
"description": "Mint a link the guest can send to someone else. Read-kind only: whoever opens it can look, never edit. Minting twice for the same object returns the same link. Mint only for a venue the guest asked about or a reservation the acting identity owns — a link is readable by anyone who holds it, and a reservation's link shows the venue, the date and the party size.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"kind": {
"description": "what to share: restaurant, reservation",
"type": "string"
},
"objectKey": {
"description": "the key of the venue or reservation to share",
"type": "string"
}
},
"required": [
"idempotencyKey",
"kind",
"objectKey"
],
"type": "object"
},
"name": "create_share_key",
"title": "Create share key"
}
🟢 get_share_sitemap read ดัชนีสาธารณะของสถานที่และรายการทั้งหมดที่แชร์ได้ ในรูปแบบ XML มีขนาดใหญ่: อ่านเพื่อค้นหาว่ามีอะไรบ้าง ไม่ใช่เพื่อตอบคำถามเฉพาะข้อ
รับแผนผังเว็บไซต์สำหรับแชร์
ดัชนีสาธารณะของสถานที่และรายการทั้งหมดที่แชร์ได้ ในรูปแบบ XML มีขนาดใหญ่: อ่านเพื่อค้นหาว่ามีอะไรบ้าง ไม่ใช่เพื่อตอบคำถามเฉพาะข้อ
ไม่มีพารามิเตอร์
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get share sitemap"
},
"description": "The public index of every shareable venue and list, as XML. Large: read it to discover what exists at all, not to answer one question.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "get_share_sitemap",
"title": "Get share sitemap"
}
🟢 resolve_share_public_id read แปลงรหัสหน้าเว็บสาธารณะ — ส่วนที่อ่านได้ใน URL ของสถานที่หรือรายการบน tastematch.io — ให้เป็นออบเจ็กต์ที่รหัสนั้นอ้างถึงและคีย์ของออบเจ็กต์
แก้ไขรหัสสาธารณะสำหรับแชร์
แปลงรหัสหน้าเว็บสาธารณะ — ส่วนที่อ่านได้ใน URL ของสถานที่หรือรายการบน tastematch.io — ให้เป็นออบเจ็กต์ที่รหัสนั้นอ้างถึงและคีย์ของออบเจ็กต์
| พารามิเตอร์ | ประเภท | คำอธิบาย |
|---|---|---|
objectType required | string | restaurant หรือ list |
publicId required | string | รหัสที่อ่านได้จาก URL สาธารณะ |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Resolve share public id"
},
"description": "Turn a public page id — the readable one in a tastematch.io venue or list URL — into the object it names and its key.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"objectType": {
"description": "restaurant or list",
"type": "string"
},
"publicId": {
"description": "the readable id from the public URL",
"type": "string"
}
},
"required": [
"objectType",
"publicId"
],
"type": "object"
},
"name": "resolve_share_public_id",
"title": "Resolve share public id"
}
🟢 resolve_share_token read แปลงลิงก์แชร์ที่ผู้เข้าพักวางไว้ให้เป็นสิ่งที่ลิงก์นั้นชี้ไป — สถานที่ การจอง หรือการจับคู่กลุ่ม — พร้อมคีย์สำหรับดำเนินการต่อ ส่งโทเค็น ซึ่งเป็นส่วนสุดท้ายของพาธในลิงก์ ลิงก์ที่หมดอายุหรือไม่เคยเป็นของเราจะถือว่าไม่พบ
แก้ไขโทเค็นแชร์
แปลงลิงก์แชร์ที่ผู้เข้าพักวางไว้ให้เป็นสิ่งที่ลิงก์นั้นชี้ไป — สถานที่ การจอง หรือการจับคู่กลุ่ม — พร้อมคีย์สำหรับดำเนินการต่อ ส่งโทเค็น ซึ่งเป็นส่วนสุดท้ายของพาธในลิงก์ ลิงก์ที่หมดอายุหรือไม่เคยเป็นของเราจะถือว่าไม่พบ
| พารามิเตอร์ | ประเภท | คำอธิบาย |
|---|---|---|
token required | string | โทเค็นจากลิงก์แชร์ ซึ่งเป็นส่วนสุดท้ายของพาธ |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Resolve share token"
},
"description": "Turn a share link the guest pasted into the thing it points at — a venue, a reservation or a group match — and the key to carry on with. Pass the token, which is the last path segment of the link. A link that has expired or was never ours is simply not found.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"token": {
"description": "the token from the share link, its last path segment",
"type": "string"
}
},
"required": [
"token"
],
"type": "object"
},
"name": "resolve_share_token",
"title": "Resolve share token"
}
🔴 update_shared_reservation write เปลี่ยนการจองที่ผู้เข้าพักมีลิงก์แก้ไข — การจองที่ทำไว้ที่อื่น ไม่ได้ทำผ่านเรา ลิงก์เป็นสิ่งยืนยันสิทธิ์ ดังนั้นให้ขอลิงก์จากผู้เข้าพักและใช้เฉพาะกับการจองที่ผู้เข้าพักระบุเท่านั้น สำหรับการจองที่ตัวตนผู้ดำเนินการเป็นเจ้าของ ให้ใช้ update_reservation แทน
อัปเดตการจองที่แชร์
เปลี่ยนการจองที่ผู้เข้าพักมีลิงก์แก้ไข — การจองที่ทำไว้ที่อื่น ไม่ได้ทำผ่านเรา ลิงก์เป็นสิ่งยืนยันสิทธิ์ ดังนั้นให้ขอลิงก์จากผู้เข้าพักและใช้เฉพาะกับการจองที่ผู้เข้าพักระบุเท่านั้น สำหรับการจองที่ตัวตนผู้ดำเนินการเป็นเจ้าของ ให้ใช้ update_reservation แทน
| พารามิเตอร์ | ประเภท | คำอธิบาย |
|---|---|---|
editToken required | string | โทเค็นจากลิงก์แก้ไขของผู้เข้าพักเอง |
idempotencyKey required | string | คีย์ที่คุณกำหนดเองสำหรับการเขียนครั้งนี้ หากส่งคีย์เดิมอีกครั้ง ระบบจะแสดงผลลัพธ์แรกแทนการเขียนซ้ำ |
dateTime | string | เวลาใหม่ในรูปแบบ RFC3339 พร้อม UTC offset ของภูมิภาค |
pax | integer | จำนวนผู้ร่วมโต๊ะใหม่ |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": false,
"title": "Update shared reservation"
},
"description": "Change a reservation the guest holds an edit link for — one made somewhere else, not through us. The link is the authorisation, so ask the guest for it and use it only for the reservation they named. For a reservation the acting identity owns, use update_reservation instead.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"dateTime": {
"description": "the new time, RFC3339 with the region's UTC offset",
"type": "string"
},
"editToken": {
"description": "the token from the guest's own edit link",
"type": "string"
},
"idempotencyKey": {
"description": "a key of your own for this one write; sending the same key again returns the first result instead of writing twice",
"type": "string"
},
"pax": {
"description": "the new party size",
"type": "integer"
}
},
"required": [
"editToken",
"idempotencyKey"
],
"type": "object"
},
"name": "update_shared_reservation",
"title": "Update shared reservation"
}
ยูทิลิตี
🟢 get_skill read อ่านคู่มือการใช้งานฉบับเต็มหนึ่งเล่มหรือหลายเล่ม ขอหลายเล่มพร้อมกันแทนการขอทีละเล่มในแต่ละรอบ
รับทักษะ
อ่านคู่มือการใช้งานฉบับเต็มหนึ่งเล่มหรือหลายเล่ม ขอหลายเล่มพร้อมกันแทนการขอทีละเล่มในแต่ละรอบ
| พารามิเตอร์ | ประเภท | คำอธิบาย |
|---|---|---|
names required | array<string> | คู่มือการใช้งานที่ต้องการอ่าน จาก list_skills |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get skill"
},
"description": "Read one or more playbooks in full. Ask for several at once rather than one per turn.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"names": {
"description": "the playbooks to read, from list_skills",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"names"
],
"type": "object"
},
"name": "get_skill",
"title": "Get skill"
}
🟢 get_vocabulary read ค่าทั้งหมดที่ตัวกรองยอมรับ แยกตามแกน พร้อมกฎการรวมค่า อ่านก่อนใช้ตัวกรองครั้งแรกและเก็บไว้ใช้ตลอดการสนทนา — ระบบจะปฏิเสธคำบรรยายที่คาดเดาเอง และ slug ของประเภทอาหารที่คาดเดาเองจะไม่ตรงกับรายการใดโดยไม่มีการแจ้งเตือน
รับคำศัพท์
ค่าทั้งหมดที่ตัวกรองยอมรับ แยกตามแกน พร้อมกฎการรวมค่า อ่านก่อนใช้ตัวกรองครั้งแรกและเก็บไว้ใช้ตลอดการสนทนา — ระบบจะปฏิเสธคำบรรยายที่คาดเดาเอง และ slug ของประเภทอาหารที่คาดเดาเองจะไม่ตรงกับรายการใดโดยไม่มีการแจ้งเตือน
ไม่มีพารามิเตอร์
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Get vocabulary"
},
"description": "Every value the filters accept, by axis, with the rule for combining them. Read it before your first filter and keep it for the conversation — a guessed descriptor is refused, and a guessed cuisine slug quietly matches nothing.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "get_vocabulary",
"title": "Get vocabulary"
}
🟢 list_skills read รายการคู่มือการใช้งานที่มีให้ โดยแสดงบรรทัดละหนึ่งรายการ อ่านคู่มือก่อนเริ่มขั้นตอนที่ยังไม่เคยทำ เพราะคู่มือระบุลำดับและข้อควรระวังที่คำอธิบายเครื่องมือไม่ได้กล่าวถึง
แสดงรายการทักษะ
รายการคู่มือการใช้งานที่มีให้ โดยแสดงบรรทัดละหนึ่งรายการ อ่านคู่มือก่อนเริ่มขั้นตอนที่ยังไม่เคยทำ เพราะคู่มือระบุลำดับและข้อควรระวังที่คำอธิบายเครื่องมือไม่ได้กล่าวถึง
ไม่มีพารามิเตอร์
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "List skills"
},
"description": "The playbooks available, one line each. Read a playbook before a journey you have not done before; they carry the sequence and the traps that the tool descriptions cannot.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "list_skills",
"title": "List skills"
}
🟡 resolve_key read แปลงชื่อที่ผู้เข้าพักบอกให้เป็นคีย์ที่อาจตรงกัน โดยเรียงจากตรงที่สุดก่อน kind\ ระบุสิ่งที่กำลังค้นหา: restaurant, region, list, reservation ส่วน list\ หรือ reservation\ เป็นของผู้ที่ลงชื่อเข้าใช้ และต้องลงชื่อเข้าใช้ก่อน แก้ชื่อแต่ละรายการเพียงครั้งเดียว แล้วใช้คีย์นั้นต่อไป เพราะหากแก้ชื่ออีกครั้งภายหลัง อาจได้สถานที่อื่น หากมีตัวเลือกหลายรายการที่ใกล้เคียงกัน ให้บอกชื่อที่แสดงแก่ผู้เข้าพัก
แก้ไขคีย์
แปลงชื่อที่ผู้เข้าพักบอกให้เป็นคีย์ที่อาจตรงกัน โดยเรียงจากตรงที่สุดก่อน kind\ ระบุสิ่งที่กำลังค้นหา: restaurant, region, list, reservation ส่วน list\ หรือ reservation\ เป็นของผู้ที่ลงชื่อเข้าใช้ และต้องลงชื่อเข้าใช้ก่อน แก้ชื่อแต่ละรายการเพียงครั้งเดียว แล้วใช้คีย์นั้นต่อไป เพราะหากแก้ชื่ออีกครั้งภายหลัง อาจได้สถานที่อื่น หากมีตัวเลือกหลายรายการที่ใกล้เคียงกัน ให้บอกชื่อที่แสดงแก่ผู้เข้าพัก
| พารามิเตอร์ | ประเภท | คำอธิบาย |
|---|---|---|
kind required | string | สิ่งที่ต้องการแก้ไข: restaurant, region, list, reservation |
lat | number | ละติจูด ใช้แก้ไขภูมิภาคจากพิกัดแทนชื่อ |
lng | number | ลองจิจูด ใช้คู่กับ lat |
regionId | string | จำกัดการค้นหาร้านอาหารให้อยู่ในภูมิภาคเดียว |
text | string | ชื่อตามที่ผู้เข้าพักบอก |
คำจำกัดความ Wire (tools/list)
{
"annotations": {
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": true,
"title": "Resolve key"
},
"description": "Turn a name the guest said into the keys it might mean, best first. \`kind\` says what you are looking for: restaurant, region, list, reservation. A \`list\` or a \`reservation\` is the signed-in person's own and needs a sign-in. Resolve once per thing and then thread the key: a name resolved again later can land on a different venue. Say the label back to the guest when more than one candidate came close.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"kind": {
"description": "what to resolve: restaurant, region, list, reservation",
"type": "string"
},
"lat": {
"description": "latitude, to resolve a region from a point instead of a name",
"type": "number"
},
"lng": {
"description": "longitude, paired with lat",
"type": "number"
},
"regionId": {
"description": "bound a restaurant search to one region",
"type": "string"
},
"text": {
"description": "the name as the guest said it",
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
},
"name": "resolve_key",
"title": "Resolve key"
}
คำแนะนำ
คุณเป็นเอเจนต์ที่ใช้ TasteMatch core — การค้นหาร้านอาหาร การจับคู่รสนิยม และการจอง คุณไม่จำเป็นต้องเข้าใจเวกเตอร์ของ TasteMatch หรือระบบติดป้ายกำกับของเราเพื่อให้ใช้งานได้ ใช้ตัวกรองใดก็ได้ตามความหมายที่คุณตีความ อย่าสร้างคำบรรยายขึ้นเอง — เรียก get_vocabulary คุณทำงานแทนบุคคลหนึ่งคน คือผู้ที่ลงชื่อเข้าใช้การเชื่อมต่อนี้ จนกว่าจะมีผู้ลงชื่อเข้าใช้ การค้นหายังคงใช้งานได้ และเครื่องมือที่ต้องใช้ข้อมูลบุคคลจะแจ้งให้ลงชื่อเข้าใช้ ขั้นตอน: DISCOVER, PLACE, RESTAURANT, AVAILABILITY, RESERVATION, IDENTITY, TASTE, LISTS, GROUP, SHARE, UTILITY
รูปแบบชื่อ — เครื่องมือทุกตัวเป็นไปตามรูปแบบนี้: get_ | list_ | search_ | filter_ | count_ | resolve_ สำหรับอ่าน create_ | update_ | delete_ | {verb}_ สำหรับเขียน
เลือกเส้นทางตามเจตนา: ชื่อ ไม่ใช่คีย์ -> resolve_key แล้วดำเนินการกับคีย์ "ร้านอาหารที่คล้าย X" -> filter_restaurants โดยใช้ facets จาก get_vocabulary "มีจำนวนเท่าไร" -> count_restaurants ห้ามกรองแล้วนับแถว สถานที่เฉพาะแห่ง -> get_restaurant โดยระบุ fields[] เมนูอาหารที่ระบุชื่อ -> search_dishes การจอง -> get_reservation_info -> list_availability_slots -> create_instant_reservation หรือ create_reservation_request เก็บไว้ใช้ภายหลัง -> รายการ
คีย์เป็นของคุณที่จะเก็บไว้ แก้ชื่อเพียงครั้งเดียว แล้วใช้คีย์นั้นต่อไปตลอดขั้นตอน อย่าแก้ชื่อซ้ำหากมีคีย์อยู่แล้ว รายการคือที่เก็บข้อมูลของคุณ เพิ่มรายชื่อสถานที่ที่คัดไว้ ชุดเปรียบเทียบ หรือสถานที่ที่พูดคุยกันลงในรายการที่ตั้งชื่อไว้ รายการนั้นเป็นของตัวตนผู้ดำเนินการและยังคงอยู่ในเซสชันถัดไป ซึ่งบริบทของคุณอาจไม่อยู่แล้ว
เก็บข้อมูลตัวตนเมื่อจำเป็นเท่านั้น ไม่เก็บก่อนหน้านั้น การค้นหาไม่เขียนข้อมูลใด ๆ และไม่ต้องลงชื่อเข้าใช้ การจองต้องผ่านระดับการจอง ได้แก่ ชื่อ ช่องทางติดต่อหนึ่งช่องทาง และการยอมรับข้อกำหนด หากเครื่องมือปฏิเสธเพราะข้อมูลตัวตนไม่ครบ ระบบจะระบุระดับที่ขาดและเครื่องมือที่ใช้เลื่อนระดับให้ ค่าที่มีอยู่ในระบบแล้วจะไม่ถูกแทนที่ด้วยข้อมูลที่คุณส่ง
ไม่มีฟีเจอร์โซเชียล ได้แก่ การติดตาม การบล็อก ผู้ติดตาม การค้นหาผู้ใช้ การแจ้งเตือน หรือการเรียกดูโปรไฟล์ การจับคู่กลุ่มเป็นฟีเจอร์เดียวที่รองรับหลายคน และทำงานผ่านลิงก์แชร์ — ผู้ได้รับเชิญไม่จำเป็นต้องมีตัวตน TasteMatch
ใช้ข้อมูลอย่างมีประสิทธิภาพ: ค่าเริ่มต้นของ limit คือ 10 และรายงาน totalCount เสมอ ใช้ตัวกรองเสมอ ขอ fields[] แทนเอกสารทั้งหมด ทำเป็นชุด อย่าวนเรียกทีละรายการ
การจอง: อ่านโหมดการจองของสถานที่ก่อน โหมดจองทันทีและโหมดส่งคำขอใช้เครื่องมือคนละตัว จองช่วงเวลาที่อ่านได้จาก list_availability_slots ตั้งค่า approxMinutes เป็น 0 เว้นแต่ผู้เข้าพักแจ้งว่ายืดหยุ่นได้ — ค่าที่ไม่ใช่ 0 อนุญาตให้สถานที่จองเวลาอื่นจากที่ขอ และคำตอบจะแจ้งไว้ใน adjusted และ bookedDate
การเขียน: ส่ง idempotencyKey — หากใช้คีย์เดิมสองครั้ง ระบบจะแสดงผลลัพธ์แรกแทนการเขียนซ้ำ เครื่องมือที่ทำลายข้อมูลจะมีคำอธิบายกำกับ อ่านเป้าหมายและแจ้งผู้เข้าพักว่าจะลบอะไร ก่อนเรียกใช้ cancel_reservation ต้องยืนยันก่อน: อ่านข้อมูลการจอง แจ้งชื่อสถานที่และเวลากลับไปให้ผู้เข้าพักทราบ รอการยืนยัน แล้วส่งทั้งสองค่าในการเรียกใช้ ห้ามยกเลิกโดยอาศัยคีย์เพียงอย่างเดียว ไม่ว่าคุณจะแน่ใจแค่ไหน
เมื่อเกิดข้อผิดพลาด ให้อ่านข้อความ การปฏิเสธเนื่องจากการตรวจสอบความถูกต้อง ไม่พบ หรือไม่มีสิทธิ์ เป็นข้อผิดพลาดจากระบบของเราและระบุวิธีแก้การเรียกใช้ — แก้ไขแล้วอย่าเรียกซ้ำ หากมีเพียงรหัสข้อผิดพลาด จะลองใหม่ไม่ได้ ให้รายงานข้อผิดพลาดนั้น นำเสนอผลลัพธ์เป็นสรุปที่อ่านเข้าใจง่าย ไม่ใช่ JSON ดิบ เว้นแต่จะมีการร้องขอเป็นอย่างอื่น
คู่มือสำหรับขั้นตอนที่ยังไม่เคยทำ: list_skills แล้วตามด้วย get_skill
ทักษะ
discover-to-reserve — ขั้นตอนทั้งหมด: ค้นหาสถานที่ อ่านวิธีการจอง แล้วจองโต๊ะ
เริ่มจากสถานที่ จากนั้นเลือกร้าน แล้วจึงจอง
- แปลงตำแหน่งที่ผู้เข้าพักระบุให้เป็น regionId โดยใช้ resolve_key กับ kind region หรือใช้ list_regions
- ค้นหาสถานที่: ใช้ filter_restaurants เพื่อค้นหาประเภทร้าน ใช้ search_restaurants เพื่อค้นหาร้านที่ระบุชื่อ และใช้ search_dishes เพื่อค้นหาเมนูอาหารที่ระบุชื่อ อ่าน get_vocabulary หนึ่งครั้งก่อนใช้ตัวกรองครั้งแรก
- จำกัดผลลัพธ์ให้แคบลงด้วย count_restaurants ก่อนดึงรายการ เมื่อคำอธิบายของผู้เข้าพักยังไม่ชัดเจน
- อ่านข้อมูลสถานที่: ใช้ get_restaurant โดยค่าเริ่มต้นให้เลือกเฉพาะข้อมูลที่จำเป็น และใช้ fields[] สำหรับข้อมูลที่เหลือ
- อ่านวิธีการจอง: ใช้ get_reservation_info ซึ่งเป็นตัวกำหนดเครื่องมือถัดไป ห้ามคาดเดา
- อ่านช่วงเวลาที่ยังว่าง: ใช้ list_availability_slots เสนอเวลาจริงให้ผู้เข้าพัก
- เก็บข้อมูลตัวตนเมื่อถึงขั้นนี้เท่านั้น: ให้ผู้เข้าพักลงชื่อเข้าใช้ จากนั้นใช้ promote_identity เพื่อเลื่อนไปยังระดับที่จองได้
- จองโต๊ะ: ใช้ create_instant_reservation สำหรับสถานที่ที่จองได้ทันที ใช้ create_reservation_request สำหรับสถานที่ที่รับคำขอจอง และใช้ create_reservation_offer สำหรับสถานที่ที่จองผ่านวิดเจ็ตของตนเอง แจ้งผู้เข้าพักว่าเกิดกรณีใดในสามแบบ คำขอยังไม่ถือว่าได้โต๊ะ และข้อเสนอจองก็ยังไม่ถือว่าได้โต๊ะจนกว่าผู้เข้าพักจะดำเนินการในวิดเจ็ตเสร็จและ get_reservation_status ยืนยันสถานะ
sign-in-and-identity — ผู้ที่คุณทำงานแทน ระดับต่าง ๆ เครื่องมือที่ใช้เลื่อนระดับ และสิ่งที่แต่ละระดับทำได้
คุณทำหน้าที่แทนคนเพียงคนเดียว คือคนที่ลงชื่อเข้าใช้การเชื่อมต่อนี้ การลงชื่อเข้าใช้เป็นตัวระบุตัวตน ไม่มีสิ่งอื่นที่ใช้เลือกว่าจะเข้าถึงข้อมูลของใคร และไม่มีอาร์กิวเมนต์ใดทำเช่นนั้นได้ ก่อนที่ใครจะลงชื่อเข้าใช้ การค้นหาข้อมูลยังทำงานได้ เครื่องมือที่ทำงานแทนบุคคลจะขอให้บุคคลนั้นลงชื่อเข้าใช้เมื่อคุณเรียกใช้ ดังนั้นให้เรียกใช้เมื่อผู้ใช้ที่ยังไม่ได้ลงชื่อเข้าใช้ต้องการใช้ แทนที่จะขอให้ลงชื่อเข้าใช้ก่อน ขั้นต่าง ๆ อิงจากสิ่งที่ตัวตนมีอยู่: ผู้ใช้ที่ลงชื่อเข้าใช้แบบไม่ระบุตัวตนเข้าถึงการค้นหาข้อมูล รายการ การจับคู่กลุ่ม และการจองตามความชอบ + ชื่อและนามสกุลได้ ส่วนข้อมูลติดต่อเข้าถึงการจองโปรไฟล์ + ข้อมูลติดต่อที่ผ่านการตรวจสอบแล้ว ไม่มีสิ่งอื่นเพิ่มเติมที่นี่ เลื่อนขั้นด้วย promote_identity การปฏิเสธเนื่องจากตัวตนจะระบุขั้นที่คุณยังขาดและเครื่องมือที่ใช้เลื่อนขั้น — อ่านข้อความนั้นแทนการลองซ้ำ สถานที่ที่จองได้ทันทีต้องใช้อีเมลและหมายเลขโทรศัพท์ ดังนั้นให้ขอทั้งสองอย่างเมื่อผู้ใช้ต้องการโต๊ะที่ยืนยันแล้ว ไม่ใช่คำขอจอง ค่าที่มีอยู่ในระบบแล้วจะไม่ถูกแทนที่ด้วยสิ่งที่คุณส่งมา อ่าน get_identity ก่อนขอข้อมูลจากผู้ใช้ในสิ่งที่เรามีอยู่แล้ว
label-vocabulary — แกนของตัวบรรยาย การตรวจสอบแทนการแปลงค่า และวิธีรวมตัวกรอง
เรียก get_vocabulary และใช้คำตามที่ระบุไว้อย่างตรงตัว ห้ามคิดคำขึ้นเอง ห้ามแปล และห้ามย่อ แกนต่าง ๆ ได้แก่ dims (ลักษณะของสถานที่), occasions (เหมาะกับโอกาสใด), menuMetas (บริการประเภทใด), menuDescriptors (เมนูมีอะไรบ้าง), cuisine (ครัวประเภทใด) ใช้ AND ระหว่างตัวกรองแต่ละด้าน และ OR ภายในตัวกรองด้านเดียวกัน ทุกค่าจะทำให้ผลลัพธ์แคบลง ส่งเฉพาะสิ่งที่ผู้ใช้ขอและไม่ส่งอย่างอื่น — ตัวกรองที่ไม่มีใครขอจะตัดสถานที่ที่ผู้ใช้อาจชอบออกไปโดยไม่แจ้งให้ทราบ menuDescriptors เป็นข้อมูลฝั่งสถานที่ ไม่ใช่ฝั่งผู้ใช้ ผู้ที่เป็นโรคเซลิแอคไม่จำเป็นต้องเป็น "ผู้ใช้ที่ต้องการอาหารปลอดกลูเตน" แต่ต้องการเมนูที่ระบุรายการอาหารปลอดกลูเตน หากไม่รู้จักค่า ระบบจะปฏิเสธพร้อมข้อความที่ระบุชื่อ facet หากใช้ slug ของ cuisine ที่คิดขึ้นเอง ผลลัพธ์จะเป็นรายการว่าง ซึ่งดูเหมือนว่า "ที่นี่ไม่มีสถานที่ประเภทนั้น"
availability-semantics — จองทันทีเทียบกับส่งคำขอ ลำดับขั้นของช่วงเวลา approxMinutes และ adjusted
โหมดการจองเป็นสิ่งที่แต่ละสถานที่กำหนดเอง อ่านด้วย get_reservation_info ก่อนเลือกเครื่องมือ จองโต๊ะทันทีและยืนยันแบบเรียลไทม์ -> create_instant_reservation ส่งคำขอให้คนที่สถานที่ยอมรับ -> create_reservation_request ช่วงเวลาจองเป็นลำดับเวลาของสถานที่นั้น ๆ ตามนาฬิกาของสถานที่ ไม่มีช่วงเวลาตายตัว ดังนั้นเวลา 19:00 มักจองไม่ได้ แต่ 19:15 อาจจองได้ อ่าน list_availability_slots และจองเวลาที่เครื่องมือนี้แจ้งมา ส่ง pax แล้วเครื่องมือจะตัดช่วงเวลาที่รองรับจำนวนผู้ร่วมโต๊ะไม่พอออก รวมถึงจำนวนขั้นต่ำของแต่ละพื้นที่ด้วย ส่ง areaId ของช่วงเวลาที่เลือกเพื่อระบุพื้นที่นั่ง โดยจะช่วยจำกัดการค้นหาและไม่ย้ายการจอง approxMinutes มีค่าเริ่มต้นเป็น 0 ซึ่งหมายถึงเวลานี้เท่านั้น หากผู้ใช้บอกว่ายืดหยุ่นได้เท่านั้นจึงค่อยเพิ่มค่า จากนั้นอ่าน adjusted\ และ bookedDate\ ในคำตอบ แล้วแจ้งให้ผู้ใช้ทราบว่าได้เวลาใดจริง ๆ หากไม่มีช่วงเวลาหรือไม่มีช่วงเวลาในกรอบที่ค้นหา แสดงว่าวันนั้นปิดหรือเลยระยะเวลาที่เปิดให้จองแล้ว ให้เสนอวันอื่นแทนการลองซ้ำ
group-match — สร้าง เชิญด้วยลิงก์ รวบรวมคะแนนโหวตจากผู้ที่ไม่มีตัวตน และปิดกลุ่ม
การจับคู่กลุ่มเป็นฟีเจอร์สำหรับหลายคนเพียงอย่างเดียว และทำงานผ่านลิงก์ 1. ใช้ create_group_match พร้อมสถานที่ไม่กี่แห่งและวันที่ไม่กี่วัน จำกัดทั้งสองอย่างให้สั้น เพราะนี่คือการตัดสินใจ ไม่ใช่แค็ตตาล็อก 2. คำตอบจะมีลิงก์สำหรับแชร์ ให้ผู้ใช้ส่งต่อ ใครก็ตามที่เปิดลิงก์สามารถโหวตได้โดยไม่ต้องมีตัวตน TasteMatch เลย 3. get_group_match แสดงว่าใครโหวตแล้วและโหวตอะไร submit_group_match_vote ใช้สำหรับคะแนนโหวตที่ส่งถึงคุณแทนการโหวตผ่านลิงก์ — ใช้ memberId สำหรับผู้ที่ได้รับเชิญด้วยชื่อ และใช้ displayName สำหรับผู้เข้าร่วมใหม่ 4. ใช้ close_group_match เมื่อกลุ่มตัดสินใจแล้ว คะแนนโหวตยังคงอ่านได้ 5. จากนั้นจองตัวเลือกที่ชนะผ่านขั้นตอนการจอง ในนามของผู้จัด
regions-and-places — การระบุสถานที่ และหน้าที่ของ regionId
ทุกอย่างที่จำกัดตามภูมิภาคต้องใช้ regionId และ regionId ต้องมาจากเรา ไม่ใช่จากผู้ใช้ ใช้ resolve_key โดยกำหนด kind เป็น region พร้อมชื่อเมือง เขต ที่อยู่ หรือ lat และ lng list_regions แสดงภูมิภาคทั้งหมดที่เราครอบคลุม ส่วน search_places ใช้ค้นหาสถานที่ย่อยและจับคู่กับภูมิภาคที่ครอบคลุมสถานที่นั้น ภูมิภาคจะระบุเขตเวลา IANA ที่ใช้เขียนเวลาของสถานที่ ทุก dateTime ที่คุณส่งควรมี UTC offset ของภูมิภาคนั้น และเวลาของทุกช่วงที่อ่านได้จะอิงตามนาฬิกานั้น หากผลลัพธ์ว่าง แสดงว่าเราไม่มีสถานที่ในบริเวณนั้น ให้แจ้งเช่นนั้นแทนการขยายขอบเขตการค้นหาโดยไม่บอกกล่าว
lists-as-store — สิ่งที่ควรเก็บไว้ในรายการแทนที่จะเก็บไว้ในบริบท
บริบทของคุณสิ้นสุดพร้อมบทสนทนา แต่รายการไม่สิ้นสุด ให้บันทึกรายชื่อสถานที่ที่คัดไว้ ชุดสถานที่สำหรับเปรียบเทียบ หรือสถานที่ที่ผู้ใช้ปฏิเสธไปแล้ว ลงในรายการที่ตั้งชื่อไว้ด้วย create_list และ add_restaurant_to_list ตั้งชื่อให้สื่อว่าสร้างไว้เพื่ออะไร เพราะผู้ใช้จะเห็นชื่อนั้นอีกครั้ง เริ่มบทสนทนาที่กลับมาคุยต่อด้วย list_lists นั่นคือสิ่งที่ผู้ใช้เก็บไว้ครั้งก่อน รายการเป็นของตัวตนที่กำลังใช้งานและเป็นส่วนตัวในที่นี้ — การแชร์ การดูรายการของผู้อื่น และการค้นหาข้ามรายการเป็นฟีเจอร์ทางสังคม ซึ่งระบบส่วนนี้ไม่มีฟีเจอร์ทางสังคม ลบรายการที่ไม่ต้องการแทนการสะสม: remove_restaurant_from_list จะลบข้อมูล ดังนั้นให้แจ้งผู้ใช้ก่อนว่าจะลบสถานที่ใดออกจากรายการใด
bulk-and-pagination — นับก่อนกรอง ใช้การประมวลผลแบบชุดแทนการวนซ้ำ ขีดจำกัดเริ่มต้น และ fields[]
ขอข้อมูลให้น้อยลง count_restaurants ตอบคำถามว่า "มีกี่แห่ง" โดยไม่ส่งแถวข้อมูล ใช้ระหว่างการจำกัดผลลัพธ์ แล้วค่อยดึงแถวข้อมูลในครั้งเดียว เครื่องมือแสดงรายการและค้นหาทุกตัวรับ limit และ offset และรายงาน totalCount ค่า limit เริ่มต้นคือ 10 ใช้ offset เพื่อแบ่งหน้าแทนการเรียกค้นหาเดิมซ้ำ get_restaurant ใช้ชุดฟิลด์เริ่มต้นแบบย่อ ระบุ fields[] เฉพาะฟิลด์ที่คุณจะนำไปบอกผู้ใช้จริง ๆ เวกเตอร์ป้ายกำกับและการ์ดเมนูมีขนาดใหญ่ รวมสิ่งที่ทำเป็นชุดได้: เรียก impressions หนึ่งครั้งต่อเทิร์น และเรียกหลายทักษะใน get_skill ครั้งเดียว ระบุชื่อให้เป็นคีย์เพียงครั้งเดียวแล้วส่งต่อคีย์นั้น การระบุซ้ำทั้งเพิ่มการเรียกไปกลับและเสี่ยงที่จะได้สถานที่อื่น