Files

39 lines
1.5 KiB
Bash

#!/bin/bash
# 端到端外呼验证: agent 进房 -> CreateSIPParticipant 呼出 -> mock 运营商应答 -> 双向 RTP 统计
# 用法: ./call.sh [房间名] [被叫号码] [时长秒]
set -euo pipefail
cd "$(dirname "$0")/.."
ROOM="${1:-call-$(date +%s)}"
NUMBER="${2:-+15105550123}"
DURATION="${3:-15}"
SECRET="f4f6c1a9e2b74d5893a0c8e17d2b6a45b7c93f1d6e284a05c9b3d7f2e6a81c04"
LK="docker run --rm --network host -e LIVEKIT_URL=http://127.0.0.1:7880 \
-e LIVEKIT_API_KEY=devkey -e LIVEKIT_API_SECRET=$SECRET livekit/livekit-cli:latest"
echo "== 1. 确保 outbound trunk 存在 (mock-provider)"
TRUNK_ID=$($LK sip outbound list --json 2>/dev/null | python3 -c '
import json,sys
for t in json.load(sys.stdin).get("items", []):
if t.get("name") == "mock-provider":
print(t.get("sipTrunkId","")); break')
if [ -z "$TRUNK_ID" ]; then
TRUNK_ID=$($LK sip outbound create mock/trunk.json 2>/dev/null | awk '/^SIPTrunkID:/ {print $2}')
echo " created trunk: $TRUNK_ID"
else
echo " reuse trunk: $TRUNK_ID"
fi
echo "== 2. Mock agent 加入房间 $ROOM (发布TTS音, 订阅被叫音频)"
/opt/lk-venv/bin/python mock/mock-agent.py --room "$ROOM" --duration "$DURATION" &
AGENT_PID=$!
sleep 2
echo "== 3. 发起 SIP 外呼 -> $NUMBER"
$LK sip participant create --room "$ROOM" --identity "callee-$RANDOM" \
--trunk "$TRUNK_ID" --number "$NUMBER" --call "$NUMBER" \
--name "MockCallee" --wait --timeout 60s || true
echo "== 4. 等待 agent 结束并输出双向统计"
wait $AGENT_PID