前言
旅游定制公司每天要给数十乃至数百位客户发送行程单、天气预警、集合提醒,同时还要维系十几个团友群的秩序与活跃度。靠客服人工逐条发消息,既低效又容易漏发;靠企业微信则必须要求客户下载 App 或关注公众号,转化率极低。大多数散客的沟通习惯仍然在个人微信里。本文介绍如何借助 WechatApi 个人微信 HTTP API 打通旅游定制场景下的行程推送与群管理全流程,让普通微信号也能接入系统级自动化能力。
一、旅游定制的自动化痛点拆解
在旅游定制业务里,客服团队每天面对的重复性工作大致可以分成三类:
1. 行程信息推送
- 出发前 D-3、D-1 发送行程 PDF 链接或行程文本
- 出发当天早上发集合时间、地点、领队联系方式
- 途中每日晚间推送次日安排
- 行程结束后发送结团感谢语 + 满意度调研链接
2. 群内运营
- 建立团友微信群、拉人入群
- 发布群公告(天气、航班延误等紧急通知)
- 定时推送景区开放时间、用餐地点等服务信息
- 活动结束后将群静音或解散
3. 异常响应
- 航班延误自动触发通知
- 恶劣天气预警及时抄送整个团群
这三类工作共同点是:高频、强格式化、对时效要求极高,非常适合系统自动化。但个人微信号没有官方开放的 Bot 接口,传统企业解法要么依赖企业微信、要么依赖公众号,都无法覆盖散客的个人微信场景。
WechatApi 基于 iPad 协议 接入微信,无需 PC 客户端挂机,在服务端即可完成消息收发、建群、群管理等操作,是旅游定制公司搭建私域自动化的底层选择。
二、系统架构设计:行程推送与群管理的整体方案
旅游定制的微信自动化系统建议分为四个模块:
| 模块 | 功能 | 触发方式 |
|---|---|---|
| 订单同步 | 从 OTA 平台/自有 CRM 拉取客户手机号、行程日期 | 定时轮询或 Webhook |
| 行程调度引擎 | 根据出发日期生成推送任务队列,写入消息时间表 | 下单时触发 |
| 微信发送层 | 调用 WechatApi HTTP 接口,按计划执行发消息/建群/拉人 | 调度引擎驱动 |
| 异常监听层 | 订阅航班/天气 API,触发紧急群发 | 事件驱动 |
整个系统与微信的唯一对接点是 WechatApi 提供的 RESTful 接口,鉴权方式统一使用请求头 VideosApi-token,业务设备由 appId 标识。这意味着你只需要一个普通微信号就可以驱动全部自动化,不需要企业资质,也不需要修改客户端。
三、行程推送:接口调用实战
3.1 发送文字行程通知
最常见的场景是出发前一天向客户发送集合信息。以下是一个 Python 示例,展示如何调用发送私聊文本消息接口:
pythonimport requests
import json
# 配置
API_BASE = "https://api.wechatapi.net" # 示意域名,以官方文档为准
TOKEN = "your_videos_api_token_here"
APP_ID = "your_device_app_id_here"
def send_itinerary_text(to_wxid: str, content: str) -> dict:
"""向指定微信好友发送行程通知文本"""
url = f"{API_BASE}/message/sendText"
headers = {
"VideosApi-token": TOKEN,
"Content-Type": "application/json"
}
payload = {
"appId": APP_ID,
"toWxId": to_wxid,
"content": content
}
resp = requests.post(url, headers=headers, json=payload, timeout=10)
return resp.json()
# 示例调用
msg = """【行程提醒】您好!您预订的【云南深度定制6日游】明天(6月14日)出发。
集合时间:07:30
集合地点:昆明长水国际机场 T2 出发层 B 区旅行社集合牌处
领队:张导(手机:1xx-xxxx-xxxx)
请携带身份证及行程单,祝旅途愉快!"""
result = send_itinerary_text("wxid_tourist_001", msg)
print(result)
# 预期返回:{"ret": 200, "msg": "ok", "data": {"msgId": "xxxxxxxx"}}
接口返回格式固定为 {"ret": 200, "msg": "ok", "data": {...}},ret 为 200 表示成功,可在调度引擎中据此判断是否需要重试。
3.2 发送行程 PDF 链接(文件消息)
对于需要发送完整行程单 PDF 的场景,可使用文件/链接消息接口。实际业务中建议将 PDF 上传到 OSS 后取 URL,再通过微信发送链接卡片:
pythondef send_itinerary_link(to_wxid: str, pdf_url: str, title: str, desc: str) -> dict:
"""发送行程单链接卡片(小程序链接或 H5 页面)"""
url = f"{API_BASE}/message/sendLink"
headers = {
"VideosApi-token": TOKEN,
"Content-Type": "application/json"
}
payload = {
"appId": APP_ID,
"toWxId": to_wxid,
"title": title,
"desc": desc,
"url": pdf_url,
"thumbUrl": "https://your-cdn.com/itinerary-thumb.png"
}
resp = requests.post(url, headers=headers, json=payload, timeout=10)
return resp.json()
# 调用示例
send_itinerary_link(
to_wxid="wxid_tourist_001",
pdf_url="https://cdn.example.com/itinerary/order_2024061401.pdf",
title="云南深度定制6日游 · 完整行程单",
desc="点击查看详细行程、住宿信息及注意事项",
)
3.3 批量推送:遍历当日出发客户
调度引擎在每天特定时间(如前一天 20:00)从 CRM 拉出次日出发名单,批量调用上述接口:
pythondef batch_send_departure_reminders(departure_date: str, crm_client):
"""批量发送次日出发提醒"""
tourists = crm_client.get_tourists_by_date(departure_date)
results = []
for tourist in tourists:
wxid = tourist["wxid"]
content = build_reminder_content(tourist) # 按模板填充个性化内容
result = send_itinerary_text(wxid, content)
results.append({
"tourist_id": tourist["id"],
"wxid": wxid,
"ret": result.get("ret"),
})
# 建议每条间隔 1-3 秒,避免高频触发风控
import time; time.sleep(2)
return results
注意发送频率:批量群发时务必在每条消息之间加适当间隔(建议 1~3 秒随机延迟),模拟正常人工操作节奏,减少账号被微信检测的风险。
四、团友群管理:建群、拉人与公告发布
4.1 订单确认后自动建群并拉人
旅游定制通常在订单锁团后建立团友群。可在 CRM 收到"锁团"事件时触发建群逻辑:
bash# 使用 curl 测试建群接口(示意)
curl -X POST "https://api.wechatapi.net/group/create" \
-H "VideosApi-token: your_token_here" \
-H "Content-Type: application/json" \
-d '{
"appId": "your_app_id_here",
"memberWxIds": ["wxid_tourist_001", "wxid_tourist_002", "wxid_guide_zhang"],
"groupName": "云南深度定制6日游·2024-0614团"
}'
接口返回示例:
json{
"ret": 200,
"msg": "ok",
"data": {
"groupId": "xxxxxxxx@chatroom",
"groupName": "云南深度定制6日游·2024-0614团"
}
}
拿到 groupId 后存入订单数据库,后续所有群操作(发公告、拉人、改群名)都通过这个 ID 驱动。
4.2 途中每日公告推送
行程期间,调度引擎在每天晚间定时向群内发送次日安排公告。群消息与私聊消息接口结构类似,只需将 toWxId 替换为群 ID:
pythondef send_group_daily_notice(group_id: str, day_plan: dict) -> dict:
"""向团友群发送次日行程公告"""
content = f"""【次日安排】
日期:{day_plan['date']}
早餐:{day_plan['breakfast']}({day_plan['breakfast_time']})
上午:{day_plan['am_activity']}
午餐:{day_plan['lunch']}
下午:{day_plan['pm_activity']}
晚餐:{day_plan['dinner']}
住宿:{day_plan['hotel']}
提示:{day_plan['tips']}
如有疑问请联系领队 @{day_plan['guide_name']}"""
url = f"{API_BASE}/message/sendText"
headers = {"VideosApi-token": TOKEN, "Content-Type": "application/json"}
payload = {"appId": APP_ID, "toWxId": group_id, "content": content}
return requests.post(url, headers=headers, json=payload, timeout=10).json()
4.3 紧急通知:航班延误群告警
当异常监听层检测到航班延误时,立即向对应团的群发告警消息:
pythondef alert_flight_delay(group_id: str, flight_no: str, delay_minutes: int, new_time: str):
content = (
f"【紧急通知】{flight_no} 航班延误约 {delay_minutes} 分钟,"
f"预计新起飞时间 {new_time}。\n"
f"请各位旅友在候机厅休息等候,领队将持续跟进并及时更新。"
)
return send_itinerary_text(group_id, content)
对于旅游定制场景下的微信群管理机器人能力,WechatApi 还支持设置群公告、修改群备注、踢出群成员、群解散等操作,完整能力列表可参阅开发文档 https://post.wechatapi.net 。
五、旅游场景下的关键参数与最佳实践
5.1 关键接口参数速查
| 参数名 | 类型 | 说明 | 示例值 |
|---|---|---|---|
appId | string | 设备 ID,即登录微信号的唯一标识 | "device_abc123" |
toWxId | string | 接收方微信 ID(私聊)或群 ID(群聊) | "wxid_xxx" / "xxx@chatroom" |
content | string | 消息正文,支持换行符 \n | 行程文本 |
memberWxIds | array | 建群/拉人时的成员 wxid 列表 | ["wxid_a","wxid_b"] |
groupName | string | 群名称,建议带团次信息方便运营识别 | "2024-0614团·云南" |
VideosApi-token | header | 鉴权 Token,在控制台获取 | 字符串 |
5.2 消息发送时间窗口建议
旅游行程推送有天然的时间敏感性,建议按以下节奏安排调度:
- D-3(出发前3天)20:00:发送行程确认消息 + PDF 链接
- D-1(出发前1天)20:00:发送集合地点、时间、领队联系方式
- D0 出发当天06:30:发送"今天出发啦"提醒 + 天气简报
- 行程中每日 22:00:发送次日计划公告到群
- 结团当天 18:00:发送结团感谢 + 问卷链接
合理的发送时间窗口既能保证信息触达,又不会在深夜打扰客户,降低投诉率。
5.3 账号隔离与多设备管理
规模稍大的旅游定制公司往往同时运营多条线路、多个团。建议:
- 按业务线划分账号:如云南线、东南亚线各配一个微信号,通过多个
appId在同一套代码中管理 - 专号专用:负责自动化推送的微信号不要同时用于日常聊天,减少触发风控的场景
- 好友关系提前建立:客户添加微信好友后,系统才能主动发消息;可在订单确认流程中引导客户扫码加好友
WechatApi 支持在一个控制台下管理多个设备(多个 appId),便于旅游公司统一监控各账号的发送状态,详见 微信二次开发 说明页。
5.4 消息失败重试机制
网络抖动或账号临时限流都可能导致消息发送失败(ret 非 200)。建议在调度层实现指数退避重试:
pythonimport time, random
def send_with_retry(to_wxid: str, content: str, max_retries: int = 3) -> dict:
for attempt in range(max_retries):
result = send_itinerary_text(to_wxid, content)
if result.get("ret") == 200:
return result
wait = (2 ** attempt) + random.uniform(1, 3)
print(f"第 {attempt+1} 次发送失败,{wait:.1f}s 后重试...")
time.sleep(wait)
return {"ret": -1, "msg": "超过最大重试次数", "data": {}}
失败记录写入数据库,方便运营人员事后核查并手动补发。
六、结团后:沉淀私域与复购运营
行程结束不代表与客户关系的终止,恰恰是私域复购的起点。
结团后自动化动作建议:
- 结团感谢语 + 问卷链接:自动发送,收集 NPS 评分
- 3 天后:推送旅途精选照片(领队整理后上传 OSS,系统自动群发图片)
- 30 天后:推送下一个季节的目的地推荐,触发二次转化
- 群存档:行程结束 7 天后自动将群设为禁言,保留历史记录但不再活跃运营
这些动作全部可以在订单关闭时写入消息调度队列,由系统在对应时间自动执行,完全不依赖人工记忆。
借助 WechatApi 的 微信 API 对接 能力,旅游定制公司可以将上述所有自动化逻辑接入自有 CRM 或 ERP,实现从订单录入到结团复购的全链路数字化。
七、合规与风控注意事项
使用个人微信账号做自动化操作,有几个合规和风控原则必须明确:
- 客户知情同意:推送前在订单确认环节告知客户"将通过微信发送行程通知",避免客户将消息举报为骚扰
- 内容真实有效:推送内容必须是真实的行程信息,不得夹带无关广告,防止客户投诉
- 避免高频群发:批量发送时严格控制频率,建议单账号每小时私聊不超过 50 条,每次群发间隔不低于 2 秒
- 账号养护:新微信号建议先正常使用 1-2 周再接入自动化,提高账号权重
- 备用账号:主力账号出现异常时,调度系统能快速切换到备用
appId,保证服务连续性
小结
旅游定制场景对消息时效性、个性化和规模化的要求同时存在,人工处理必然形成瓶颈。通过 WechatApi 提供的个人微信 HTTP API,旅游公司可以在不改变客户使用习惯(仍用个人微信)的前提下,将行程推送、团友群建立与管理、结团复购运营等流程全部系统化。核心技术路径是:HTTP POST + JSON + VideosApi-token 鉴权 + appId 设备标识,加上合理的消息调度队列和重试机制,即可构建一套稳定运行的旅游私域自动化基础设施。控制台注册与开发文档详见 https://newmanager.wechatapi.net/dashboard/ 与 https://post.wechatapi.net 。
