same-day-delivery
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSame-Day Delivery
当日配送
Overview
概述
Same-day local delivery requires three things working together: a way for customers to select a delivery time slot at checkout, a way for you to dispatch orders to drivers, and a way to communicate delivery status back to customers. For most merchants, third-party last-mile services (DoorDash Drive, Uber Direct, Onfleet) are the fastest path to same-day delivery — they handle driver logistics so you focus on operations.
当日本地配送需要三个环节协同运作:让客户在结账时选择配送时段的方式、向司机分配订单的方式,以及向客户反馈配送状态的方式。对于大多数商家而言,第三方最后一公里服务(DoorDash Drive、Uber Direct、Onfleet)是实现当日配送的最快途径——它们负责司机物流管理,让您可以专注于运营。
When to Use This Skill
何时使用该技能
- When launching a same-day or next-hour delivery service in a defined geographic area
- When allowing customers to select a preferred delivery window at checkout
- When building a driver dispatch dashboard that shows outstanding orders and optimizes routes
- When integrating with a third-party last-mile courier (DoorDash Drive, Uber Direct, Onfleet)
- When managing capacity limits per time slot to prevent over-committing delivery resources
- 在特定地理区域推出当日或1小时内送达的配送服务时
- 允许客户在结账时选择偏好的配送时段时
- 构建显示待处理订单并优化路线的司机调度仪表盘时
- 与第三方最后一公里快递公司(DoorDash Drive、Uber Direct、Onfleet)集成时
- 管理每个时段的运力限制,避免过度承诺配送资源时
Core Instructions
核心操作步骤
Step 1: Determine your platform and delivery model
步骤1:确定您的平台和配送模式
| Platform | Recommended Tool | Why |
|---|---|---|
| Shopify | Local Delivery by Zapiet + DoorDash Drive or Uber Direct | Zapiet handles time-slot booking at checkout; DoorDash Drive / Uber Direct dispatch drivers automatically |
| WooCommerce | WooCommerce Local Pickup Plus + Onfleet or your own drivers | Local Pickup Plus handles zones and time slots; Onfleet provides driver dispatch and tracking |
| BigCommerce | Zapiet Delivery + Onfleet or Dispatch Science | Zapiet and similar apps add delivery scheduling; Dispatch Science optimizes routes |
| Custom / Headless | Build time-slot booking + integrate Onfleet/DoorDash Drive API for dispatch | Full control over zone management, slot capacity, and driver routing |
Choose your delivery model first:
- Your own drivers: You control quality and cost but must manage driver availability, vehicles, and routing. Best for: florists, grocery, restaurants with a regular local customer base.
- On-demand couriers (DoorDash Drive, Uber Direct): Drivers appear on demand with no fixed cost. Best for: merchants who need occasional same-day delivery without committing to a driver fleet.
- Hybrid: Your drivers for scheduled slots; on-demand couriers for rush orders.
| 平台 | 推荐工具 | 原因 |
|---|---|---|
| Shopify | Local Delivery by Zapiet + DoorDash Drive 或 Uber Direct | Zapiet负责结账时的时段预订;DoorDash Drive / Uber Direct自动调度司机 |
| WooCommerce | WooCommerce Local Pickup Plus + Onfleet 或自有司机团队 | Local Pickup Plus负责区域和时段管理;Onfleet提供司机调度和追踪功能 |
| BigCommerce | Zapiet Delivery + Onfleet 或 Dispatch Science | Zapiet及同类应用添加配送排期功能;Dispatch Science优化路线 |
| 自定义/无头电商 | 搭建时段预订功能 + 集成Onfleet/DoorDash Drive API实现调度 | 完全掌控区域管理、时段运力和司机路线规划 |
先选择您的配送模式:
- 自有司机团队:您掌控服务质量和成本,但必须管理司机可用性、车辆和路线规划。最适合:花店、杂货店、拥有稳定本地客户群的餐厅。
- 按需快递(DoorDash Drive、Uber Direct):司机按需接单,无固定成本。最适合:需要偶尔提供当日配送但不想组建司机团队的商家。
- 混合模式:自有司机负责预订时段的订单;按需快递处理高峰订单。
Step 2: Set up delivery zones and time slot booking
步骤2:设置配送区域和时段预订
Shopify
Shopify
Using Zapiet — Pickup + Delivery (the most feature-complete app):
- Install Zapiet — Pickup + Delivery from the Shopify App Store
- In Zapiet, go to Delivery → Zones and define your delivery coverage area by:
- Postal/ZIP codes (simplest): list all ZIP codes you deliver to
- Radius from your store address
- Custom drawn polygon (requires higher Zapiet plan)
- Set up time slots in Delivery → Time Slots:
- Define daily windows (e.g., 10am–12pm, 12pm–2pm, 2pm–4pm, 4pm–6pm)
- Set capacity per slot (e.g., max 20 orders per 2-hour window)
- Set the order cutoff time for each slot (e.g., orders for the 2pm–4pm slot must be placed by 12pm)
- Set delivery fees per zone in Delivery → Rates (can be distance-based or flat)
- Customers see available time slots during Shopify checkout after entering their address
Order management in Zapiet:
- Go to Zapiet → Orders to see all delivery orders sorted by time slot
- Export the pick list and manifest for your drivers from this view
- Mark orders as "out for delivery" and "delivered" to update customers
使用Zapiet — Pickup + Delivery(功能最完善的应用):
- 从Shopify应用商店安装Zapiet — Pickup + Delivery
- 在Zapiet中,进入Delivery → Zones,通过以下方式定义您的配送覆盖区域:
- 邮政编码(最简单):列出所有您提供配送服务的邮政编码
- 以店铺地址为中心的配送半径
- 自定义绘制区域(需要Zapiet高级套餐)
- 在Delivery → Time Slots中设置时段:
- 定义每日时段窗口(例如:10am–12pm、12pm–2pm、2pm–4pm、4pm–6pm)
- 设置每个时段的运力(例如:每2小时窗口最多20个订单)
- 设置每个时段的订单截止时间(例如:2pm–4pm时段的订单必须在12pm前下单)
- 在Delivery → Rates中设置各区域的配送费用(可基于距离或固定费用)
- 客户在Shopify结账时输入地址后,即可看到可用的配送时段
Zapiet中的订单管理:
- 进入Zapiet → Orders,查看按时段排序的所有配送订单
- 从此视图导出拣货清单和配送清单供司机使用
- 将订单标记为“配送中”和“已送达”以更新客户状态
WooCommerce
WooCommerce
Using WooCommerce Local Pickup Plus (WooCommerce.com official extension):
- Install Local Pickup Plus from WooCommerce.com
- Go to WooCommerce → Settings → Shipping → Local Pickup Plus
- Add pickup/delivery locations — for delivery, define your service area by postal code or radius
- Enable "Delivery date & time selection" to let customers pick slots
- Configure time slots and capacity in the plugin settings
For more advanced zone management: use the Flexible Shipping plugin or WooCommerce Table Rate Shipping to create delivery rates based on postal code matching.
For driver dispatch: use Onfleet (onfleet.com) which has a WooCommerce webhook integration — new delivery orders automatically appear in Onfleet for driver assignment.
使用WooCommerce Local Pickup Plus(WooCommerce官方扩展):
- 从WooCommerce.com安装Local Pickup Plus
- 进入WooCommerce → 设置 → 配送 → Local Pickup Plus
- 添加取货/配送地点——对于配送服务,通过邮政编码或半径定义服务区域
- 启用“配送日期和时间选择”,让客户选择时段
- 在插件设置中配置时段和运力
如需更高级的区域管理: 使用Flexible Shipping插件或WooCommerce Table Rate Shipping,基于邮政编码匹配创建配送费率。
司机调度: 使用Onfleet(onfleet.com),它与WooCommerce有webhook集成——新的配送订单会自动出现在Onfleet中供分配给司机。
BigCommerce
BigCommerce
Using Zapiet on BigCommerce:
- Install Zapiet from the BigCommerce App Marketplace
- Same configuration as the Shopify workflow above — define zones, time slots, and capacity
Using ShipperHQ:
- ShipperHQ has local delivery zones and time-window restrictions built in
- Go to ShipperHQ → Carrier Manager → Add Local Delivery carrier and define your zone rules
在BigCommerce上使用Zapiet:
- 从BigCommerce应用市场安装Zapiet
- 配置流程与Shopify相同——定义区域、时段和运力
使用ShipperHQ:
- ShipperHQ内置本地配送区域和时间窗口限制功能
- 进入ShipperHQ → 承运人管理 → 添加本地配送承运人并定义区域规则
Step 3: Connect to a driver dispatch platform
步骤3:连接司机调度平台
Using DoorDash Drive (on-demand, no fixed driver costs)
使用DoorDash Drive(按需模式,无固定司机成本)
DoorDash Drive sends DoorDash gig-economy drivers to pick up and deliver your orders. Available in most major US cities.
- Sign up at developer.doordash.com/portal for a DoorDash Drive API key
- For Shopify: install DoorDash Drive from the Shopify App Store — it creates a DoorDash delivery automatically when you mark an order for dispatch
- DoorDash notifies the customer with a real-time tracking link via SMS
- You pay per delivery (typically $7–$15 depending on distance)
DoorDash Drive会安排DoorDash零工经济司机取货并配送您的订单。在美国大多数主要城市可用。
- 在developer.doordash.com/portal注册以获取DoorDash Drive API密钥
- 对于Shopify:从Shopify应用商店安装DoorDash Drive——当您标记订单待调度时,它会自动创建DoorDash配送任务
- DoorDash通过短信向客户发送实时追踪链接
- 您按次支付配送费用(通常根据距离为7-15美元)
Using Uber Direct (on-demand)
使用Uber Direct(按需模式)
Similar to DoorDash Drive — Uber Direct uses Uber drivers for local delivery.
- Sign up at developer.uber.com/products/uber-direct
- Install the Uber Direct app if available for your platform, or use the REST API
- Create a delivery by sending the pickup address (your store) and drop-off address (customer) to the Uber Direct API
与DoorDash Drive类似——Uber Direct使用Uber司机进行本地配送。
- 在developer.uber.com/products/uber-direct注册
- 如果您的平台有可用的Uber Direct应用则安装,否则使用REST API
- 通过向Uber Direct API发送取货地址(您的店铺)和送货地址(客户)来创建配送任务
Using Onfleet (your own drivers + route optimization)
使用Onfleet(自有司机团队 + 路线优化)
Best if you have your own delivery team and need route optimization and real-time tracking.
- Sign up at onfleet.com (starts at $349/month for up to 3 drivers)
- Install the WooCommerce webhook integration or use Zapier to connect your platform to Onfleet
- New orders auto-create Onfleet tasks
- Dispatchers assign tasks to drivers in the Onfleet web dashboard
- Drivers get a mobile app with turn-by-turn navigation and proof-of-delivery photo capture
- Customers receive an SMS with a real-time tracking link when the driver starts their route
最适合拥有自有配送团队且需要路线优化和实时追踪的商家。
- 在onfleet.com注册(最多3名司机的套餐起价为每月349美元)
- 安装WooCommerce webhook集成或使用Zapier将您的平台连接到Onfleet
- 新订单会自动创建Onfleet任务
- 调度员在Onfleet网页仪表板中将任务分配给司机
- 司机使用带有逐向导航和交付证明照片拍摄功能的移动应用
- 当司机开始配送路线时,客户会收到包含实时追踪链接的短信
Step 4: Handle edge cases
步骤4:处理边缘情况
Slot fills up after customer views it:
- Most apps (Zapiet, Onfleet scheduling) use real-time slot availability checks at checkout
- Enable slot capacity enforcement in your app settings to prevent overbooking
Address outside delivery zone:
- Zapiet checks the delivery zone before showing time slots — if the address is outside your zone, delivery options are hidden and only pickup/standard shipping shows
- Test this thoroughly with addresses near your zone boundary before going live
Driver can't fulfill an order:
- For DoorDash Drive / Uber Direct: the platform automatically reassigns to another driver
- For your own drivers (Onfleet): the dispatcher must manually reassign in the dashboard; set up Onfleet alerts for unassigned tasks approaching their slot window
Cutoff time management:
- Set your order cutoff 2–3 hours before the delivery window to give time for picking, packing, and loading
- Zapiet automatically hides time slots that have passed their cutoff
客户查看时段后该时段已满:
- 大多数应用(Zapiet、Onfleet排期)在结账时使用实时时段可用性检查
- 在应用设置中启用时段运力限制,防止超额预订
地址超出配送区域:
- Zapiet在显示时段前会检查配送区域——如果地址超出您的区域,配送选项会隐藏,仅显示取货/标准配送选项
- 上线前务必使用区域边界附近的地址进行全面测试
司机无法完成订单:
- 对于DoorDash Drive / Uber Direct:平台会自动将订单重新分配给其他司机
- 对于自有司机团队(Onfleet):调度员必须在仪表板中手动重新分配;设置Onfleet警报,提醒接近时段窗口的未分配任务
截止时间管理:
- 将订单截止时间设置在配送窗口开始前2-3小时,以便留出拣货、打包和装车时间
- Zapiet会自动隐藏已过截止时间的时段
Step 5: Custom / Headless Implementation
步骤5:自定义/无头电商实现
For headless stores that need full control over zone management and slot booking:
typescript
// Check if a customer address is in a delivery zone
async function checkDeliveryEligibility(params: {
customerZip: string;
deliveryZones: { name: string; zipCodes: string[]; deliveryFeeCents: number }[];
}): Promise<{ eligible: boolean; zone?: string; feeCents?: number }> {
const zone = params.deliveryZones.find(z => z.zipCodes.includes(params.customerZip));
if (!zone) return { eligible: false };
return { eligible: true, zone: zone.name, feeCents: zone.deliveryFeeCents };
}
// Get available time slots for today (slots with remaining capacity)
async function getAvailableSlots(params: {
date: Date;
zone: string;
slots: { id: string; label: string; capacity: number; booked: number; cutoffTime: Date }[];
}): Promise<{ id: string; label: string; spotsRemaining: number }[]> {
const now = new Date();
return params.slots
.filter(slot => slot.cutoffTime > now && slot.booked < slot.capacity)
.map(slot => ({
id: slot.id,
label: slot.label,
spotsRemaining: slot.capacity - slot.booked,
}));
}
// Dispatch a delivery via DoorDash Drive API
async function dispatchDoorDashDelivery(params: {
externalDeliveryId: string;
pickupAddress: Address;
dropoffAddress: Address;
customerPhone: string;
pickupWindow: { startTime: string; endTime: string }; // ISO 8601
}): Promise<{ trackingUrl: string; fee: number }> {
const response = await fetch('https://openapi.doordash.com/drive/v2/deliveries', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.DOORDASH_DRIVE_JWT}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
external_delivery_id: params.externalDeliveryId,
pickup_address: `${params.pickupAddress.street1}, ${params.pickupAddress.city}, ${params.pickupAddress.state} ${params.pickupAddress.zip}`,
dropoff_address: `${params.dropoffAddress.street1}, ${params.dropoffAddress.city}, ${params.dropoffAddress.state} ${params.dropoffAddress.zip}`,
dropoff_phone_number: params.customerPhone,
pickup_time: params.pickupWindow.startTime,
}),
});
const data = await response.json();
return { trackingUrl: data.tracking_url, fee: data.fee };
}对于需要完全掌控区域管理和时段预订的无头电商商店:
typescript
// Check if a customer address is in a delivery zone
async function checkDeliveryEligibility(params: {
customerZip: string;
deliveryZones: { name: string; zipCodes: string[]; deliveryFeeCents: number }[];
}): Promise<{ eligible: boolean; zone?: string; feeCents?: number }> {
const zone = params.deliveryZones.find(z => z.zipCodes.includes(params.customerZip));
if (!zone) return { eligible: false };
return { eligible: true, zone: zone.name, feeCents: zone.deliveryFeeCents };
}
// Get available time slots for today (slots with remaining capacity)
async function getAvailableSlots(params: {
date: Date;
zone: string;
slots: { id: string; label: string; capacity: number; booked: number; cutoffTime: Date }[];
}): Promise<{ id: string; label: string; spotsRemaining: number }[]> {
const now = new Date();
return params.slots
.filter(slot => slot.cutoffTime > now && slot.booked < slot.capacity)
.map(slot => ({
id: slot.id,
label: slot.label,
spotsRemaining: slot.capacity - slot.booked,
}));
}
// Dispatch a delivery via DoorDash Drive API
async function dispatchDoorDashDelivery(params: {
externalDeliveryId: string;
pickupAddress: Address;
dropoffAddress: Address;
customerPhone: string;
pickupWindow: { startTime: string; endTime: string }; // ISO 8601
}): Promise<{ trackingUrl: string; fee: number }> {
const response = await fetch('https://openapi.doordash.com/drive/v2/deliveries', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.DOORDASH_DRIVE_JWT}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
external_delivery_id: params.externalDeliveryId,
pickup_address: `${params.pickupAddress.street1}, ${params.pickupAddress.city}, ${params.pickupAddress.state} ${params.pickupAddress.zip}`,
dropoff_address: `${params.dropoffAddress.street1}, ${params.dropoffAddress.city}, ${params.dropoffAddress.state} ${params.dropoffAddress.zip}`,
dropoff_phone_number: params.customerPhone,
pickup_time: params.pickupWindow.startTime,
}),
});
const data = await response.json();
return { trackingUrl: data.tracking_url, fee: data.fee };
}Best Practices
最佳实践
- Start with ZIP code zones, not radius or polygon — ZIP-code-based zones are easier to manage, easier to communicate to customers ("We deliver to these zip codes"), and don't require geocoding
- Set slot cutoff times generously — give your warehouse at least 2 hours between order cutoff and window start to pick, pack, and hand off to drivers
- Generate delivery manifests before each slot window — print the manifest 30 minutes before your driver leaves; it should list each order with address, time slot, and special instructions
- Send ETA push notifications as the driver approaches — customers with live ETAs submit far fewer "where is my delivery" support contacts; Onfleet and DoorDash Drive both handle this automatically
- Monitor slot fill rates — if slots fill up consistently hours before the window, add capacity; if they're under 50% filled at cutoff, consolidate or reduce windows
- 从邮政编码区域开始,而非半径或自定义区域——基于邮政编码的区域更易于管理,更便于向客户说明(“我们配送至以下邮政编码区域”),且不需要地理编码
- 设置宽松的时段截止时间——在订单截止时间和配送窗口开始之间至少给仓库留出2小时时间用于拣货、打包和交接给司机
- 在每个时段窗口前生成配送清单——在司机出发前30分钟打印清单;清单应包含每个订单的地址、时段和特殊说明
- 当司机接近时发送预计到达时间推送通知——收到实时预计到达时间的客户提交的“我的配送在哪里”支持请求要少得多;Onfleet和DoorDash Drive都会自动处理此功能
- 监控时段填充率——如果时段在窗口开始前数小时就已填满,则增加运力;如果截止时填充率低于50%,则合并或减少时段窗口
Common Pitfalls
常见陷阱
| Problem | Solution |
|---|---|
| Two customers book the last spot in a slot simultaneously | Use atomic slot decrement with capacity check — Zapiet handles this; for custom builds use database-level locks or atomic updates |
| Customer enters an address outside the delivery zone but sees time slots | Validate zone eligibility server-side at checkout, not just client-side; Zapiet enforces this automatically |
| Cutoff time displayed in wrong timezone for customer | Always store and compare times in UTC; display to customers in their local timezone using the browser's |
| Driver assigned to more orders than they can fulfill in the window | Cap orders per driver per slot and enable route optimization in Onfleet; set realistic capacity limits when building your slot schedule |
| 问题 | 解决方案 |
|---|---|
| 两名客户同时预订时段的最后一个名额 | 使用原子性的时段运力递减和检查——Zapiet会处理此问题;对于自定义构建,请使用数据库级锁或原子更新 |
| 客户输入超出配送区域的地址但仍能看到时段 | 在结账时进行服务器端区域资格验证,而不仅仅是客户端;Zapiet会自动强制执行此规则 |
| 客户看到的截止时间时区错误 | 始终以UTC存储和比较时间;使用浏览器的 |
| 司机被分配的订单超出其在时段内可完成的数量 | 限制每个司机每个时段的订单数量,并在Onfleet中启用路线优化;构建时段计划时设置合理的运力限制 |
Related Skills
相关技能
- @order-fulfillment-workflow
- @shipment-tracking
- @order-management-system
- @international-shipping
- @dropshipping-integration
- @order-fulfillment-workflow
- @shipment-tracking
- @order-management-system
- @international-shipping
- @dropshipping-integration