OPPO 安卓机当「电话卡」,Orange Pi(opi-living)当免提主机:来电响铃 8 秒无人接 →
Pi 经 adb 自动接听、把通话音频切到蓝牙 dongle → Azure STT 听对方 →
LLM 决策 → Azure TTS 应答,必要时挂断并把摘要推到机主微信。
代码在 the-void 仓库 local_agent/thai_phone/,文档 thai-phone-assistant/。
Thai-Phone / OPPO 接听机
智能电话助理 — 项目交接
真机全链路已打通
已切到 opi-living(上海)
通知走微信 ClawBot
开场白按归属地中/英自动切
阿里 STT 待账号开通
已做 / 未做
✅ 已完成
- Linux/Pi 接听机 daemon 生产代码:
adb_controller/audio_io/call_handler/run。 - 真机全链路打通:8s 自动接 → 切路由
bt_sco→ 开场白 → STT → LLM → TTS,首音时延 ~3.5s(缓存标定后 PASS)。 - 首句多语言 STT 探测(中/英/泰按置信度锁定),修了「中文被硬转泰语」bug。
- LLM 按对方语言回复 + 每通电话会话隔离(
session_user),剥[void]前缀。 - HFP 消回音 WirePlumber 配置(0.5
.conf/ 0.4.lua双格式,node.autoconnect=false)。 - 按手机 SIM 网络 MCC 归属地自动切:460 中国→中文开场白 + 1s 秒接;其余(520 泰国等)→英语 + 8s 人优先。
- 中文开场白定制话术:外卖快递按 201 木门门铃 / 认识机主自报家门有何事 / 微信通知机主回电。
- 营销 / 录音机器人自动判「广告」→ 礼貌挂断(对方没说人话则静默、不打扰机主)。
- opi-living 节点整套:VPS 直连 daemon
void-vps、蓝牙配对、adbtcpip 5555、冻死自愈watchdog(SD 卡 IO 卡死 16s 硬复位)。 - 通知切微信 ClawBot 并实测收到(需 VPS
PHONE_NOTIFY_WECHAT_ID;iLink 24h 窗口失败降级 wecom→Telegram)。 - Azure Speech East Asia 香港区新 key(旧 key 401=订阅失效;中国实测 ~100ms、0 丢包,可用)。
- 已在上海投入运营(OPPO 中国联通卡),真机来电验过:1s 接、中文开场白、SCO PASS。
⬜ 未做 / 待办
- daemon 固化为正式 systemd 服务——现在是
systemd-run --user临时单元,Pi 重启会丢,需重拉。 - 阿里 NLS STT/TTS:智能语音交互试用过期(
ALI_AppKey),等账号开通;MCC 切 provider(azure↔ali)骨架待接。 - STT/TTS 连接复用(keep-alive)——省每轮 TLS 握手,中国场景收益大。
- 真·流式 STT——现为窗口式半双工(6s 录音窗,延迟大头在此),要更自然需改流式。
- 手机重启后
tcpip 5555需重引导——考虑 root 开机脚本持久化,实现真无人值守。 - 代打电话(outbound);
SILENCE_ROUNDS从测试值复默认。
环境信息
| 运行节点 | opi-living(Orange Pi,上海,Ubuntu 22.04,wireplumber 0.4.17);备用 ed(Mac2013/Ubuntu,泰国,wireplumber 0.5.13) |
| 手机 | OPPO PHW110,蓝牙 MAC DC:B4:CA:B8:E7:BE,SIM 中国联通(MCC 460) |
| adb 控制 | tcpip 5555(192.168.3.11:5555,固定端口、重启才丢);蓝牙 dongle TP-Link UB500(USB 2357:0604) |
| 语音服务 | Azure Speech East Asia 香港区(新 key,AZURE_SPEECH_REGION=eastasia);阿里 NLS 试用过期(ALI_AppKey,等开通) |
| 通知 | 微信 ClawBot:VPS /home/ubuntu/data/.env 配 PHONE_NOTIFY_WECHAT_ID(机主 conversationId);改后重启 void-webui。ClawBot 24h 窗口:机主需 24h 内与 bot 有互动,否则降级 Telegram |
| VPS 直连 | void-vps daemon → wss://www.edmundhuang.xyz/void/ws/local-agent(离网也可达;VPS 侧 system.run 可远程管) |
| 运行方式 | daemon 经 systemd-run --user 起,日志 /tmp/thai_phone.log;配置 local_agent/.env。切勿同时在 ed + living 跑,会抢同一台手机 |
| 供电 | 手机 24h 保持充电;息屏 OK;靠充电压住 Doze,避免 WiFi/adb 被切 |
| 代码/文档 | the-void 仓库 local_agent/thai_phone/;规格/日志 thai-phone-assistant/;部署资产 local_agent/thai_phone/deploy/ |
断线恢复 Runbook(手机关机/重启后必看)
OPPO 每次关机/重启后,adb 的 tcpip 5555 会丢(蓝牙一般会自动重连)。下个 session 照这个步骤恢复。
VPS 遥控 living 走 system.run:POST http://127.0.0.1:8080/void/api/local-agent/exec,
Bearer=DASHBOARD_TOKEN(/home/ubuntu/data/.env),body
{device_id:"opi-living", capability:"system", action:"run", params:{cmd,timeout}},
direct 不通走 relay(device_id:"VIDA-EKKAMAI"+capability relay forward)。
- 探 living 在线:
opi-living;void-vps+watchdog应 active(开机自起)。living 在/home/orangepi/the-void,用户 orangepi,命令前置export XDG_RUNTIME_DIR=/run/user/1000。 - 蓝牙:
bluetoothctl info DC:B4:CA:B8:E7:BE一般 Connected: yes(trusted 自动重连);否则bluetoothctl connect DC:B4:CA:B8:E7:BE。 - adb 重连(关键,需机主碰手机一下):
- 机主:OPPO 设置→开发者选项→无线调试→打开,报主界面
IP:端口(IP 通常 192.168.3.11,端口随机)。 adb connect <ip>:<端口>→ 应直接device(living 的 RSA key 手机永久信任;若unauthorized让机主点"允许")。adb -s <ip>:<端口> tcpip 5555(切固定端口,经现有连接下发、不用 USB)。sleep 2; adb connect <ip>:5555; adb disconnect <ip>:<端口>(切换瞬间会短暂 offline,几秒转 device)。
- 机主:OPPO 设置→开发者选项→无线调试→打开,报主界面
- 起 daemon(临时单元、重启丢):
验证export XDG_RUNTIME_DIR=/run/user/1000 systemctl --user reset-failed thai_phone systemd-run --user --unit=thai_phone --collect \ --working-directory=/home/orangepi/the-void --setenv=PYTHONUNBUFFERED=1 \ bash -c "exec /home/orangepi/the-void/.venv/bin/python \ -m local_agent.thai_phone.run > /tmp/thai_phone.log 2>&1"/tmp/thai_phone.log:MCC=460 → 开场白语言=zh 接听等待=1s+ 开场白预录 +就绪 serial=192.168.3.11:5555。 - 验证:
adb devices=device、蓝牙 Connected、systemctl --user is-active thai_phone=active。微信通道发 phone-notify 测(ClawBot 24h 窗口,失败降 Telegram)。
根治(免每次手动):手机 root + 开机脚本 setprop service.adb.tcp.port 5555 + 重启 adbd → tcpip 5555 持久化,重启不丢。未做。
下一步最适合从哪接
- 要长期无人值守:先把 daemon 做成正式 systemd 服务(开机自起、adb 掉线自愈),参考
void-vps.service。 - 阿里账号开通后:接 MCC→provider 自动切(中国用阿里 NLS 省跨境、泰国用 Azure),Ali STT 复用
core/stt_tts/stt.py::transcribe_bytes。 - 降时延:STT/TTS 连接复用;再进一步上流式识别。
- 真机验证:拨 OPPO → 别接 → 等 8s AI 接管 → 说话(中/英)→ 听中文开场白 + 应答;营销录音应被自动挂断。
本页由 The Void 的 thai-phone 工作会话生成,反映截至 2026-07-02 的状态。改动以 the-void 仓库
thai-phone-assistant/04-CODING-LOG.md / 03-LESSONS.md 为准;本页与其保持一致。