chore: init SIP research repo (Asterisk & LiveKit)
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
#!/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
|
||||
@@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
# 运行状态检测: 各组件健康 + 集群节点 + trunk 配置
|
||||
set -uo pipefail
|
||||
SECRET="f4f6c1a9e2b74d5893a0c8e17d2b6a45b7c93f1d6e284a05c9b3d7f2e6a81c04"
|
||||
ok=0; fail=0
|
||||
|
||||
chk() { # name, command...
|
||||
local name="$1"; shift
|
||||
if out=$("$@" 2>&1); then echo "PASS $name"; ok=$((ok+1))
|
||||
else echo "FAIL $name: $(echo "$out" | head -1)"; fail=$((fail+1)); fi
|
||||
}
|
||||
|
||||
echo "== 容器状态"
|
||||
docker ps --filter "name=lk-" --format "{{.Names}}\t{{.Status}}"
|
||||
|
||||
echo "== HTTP 健康"
|
||||
code() { curl -s -o /dev/null -w "%{http_code}" --max-time 3 "$1"; }
|
||||
for p in "livekit http://127.0.0.1:7880/" "sip1 http://127.0.0.1:8081/healthz" "sip2 http://127.0.0.1:8082/healthz"; do
|
||||
set -- $p
|
||||
c=$(code "$2")
|
||||
[ "$c" = "200" ] || [ "$c" = "204" ] && { echo "PASS $1 ($c)"; ok=$((ok+1)); } || { echo "FAIL $1 ($c)"; fail=$((fail+1)); }
|
||||
done
|
||||
|
||||
echo "== LiveKit API 功能检查"
|
||||
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)
|
||||
chk "lk room list" "${LK[@]}" room list
|
||||
chk "lk sip outbound list" "${LK[@]}" sip outbound list
|
||||
|
||||
echo
|
||||
echo "result: ok=$ok fail=$fail"
|
||||
[ $fail -eq 0 ]
|
||||
Reference in New Issue
Block a user