You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux环境下基于SIP(callmonitor)实现来电触发自定义程序执行的方案咨询

Linux环境下基于SIP(callmonitor)实现来电触发自定义程序执行的方案咨询

Hey Marcel, 我懂你要的是什么——在Linux上收到SIP来电时自动触发自定义程序,而且既不用接听电话,也不需要任何GUI对吧?给你几个可行的实操方向:

1. 借助Asterisk的AGI脚本实现

Asterisk是Linux上非常流行的开源SIP服务器,完全能满足你的需求,配置起来也不算复杂:

  • 首先编辑Asterisk的拨号计划配置文件extensions.conf,添加一个处理来电的规则:
    [incoming]
    exten => s,1,NoOp(检测到来电,来电ID: ${CALLERID(num)})
    same => n,AGI(/path/to/your/trigger-script.sh,${CALLERID(num)})
    same => n,Hangup()
    
  • 这里的trigger-script.sh可以是直接调用你自定义程序的脚本,比如脚本里写/usr/bin/mycustomprogramm "$1",$1就会接收传进来的来电ID;最后用Hangup()直接挂断,确保不会接听电话。

2. 用sipgrep+Shell脚本监听SIP包

如果不想部署完整的SIP服务器,用sipgrep抓包监听是个轻量的选择:

  • 先安装sipgrep(大部分发行版的包管理器里都有),然后写一个持续运行的Shell脚本:
    #!/bin/bash
    # 监听所有网卡上的SIP INVITE请求(来电初始请求)
    sipgrep -i -d any 'INVITE' | while read -r line; do
        # 从SIP头里提取来电ID
        if [[ "$line" =~ From:.*sip:([^@]+)@ ]]; then
            caller_id="${BASH_REMATCH[1]}"
            # 执行你的自定义程序,传入来电ID
            /usr/bin/mycustomprogramm "$caller_id"
        fi
    done
    
  • 把这个脚本设为可执行(chmod +x your-monitor-script.sh),可以用nohup ./your-monitor-script.sh &让它在后台持续运行,或者把它做成systemd服务确保开机自启。

3. 轻量方案:用Kamailio的事件路由

如果需要更轻量的SIP处理服务,Kamailio是个好选择,它的事件模块可以直接监听来电请求:

  • 编辑Kamailio的配置文件kamailio.cfg,添加事件路由规则:
    event_route[core:request] {
        # 只处理INVITE请求(来电触发)
        if (is_method("INVITE")) {
            # 提取来电ID(SIP From头里的用户名部分)
            $var(caller_id) = $fU;
            # 调用你的自定义程序
            exec("/usr/bin/mycustomprogramm", "$var(caller_id)");
            # 直接退出,不处理后续接听逻辑
            exit;
        }
    }
    
  • 重启Kamailio服务后,它就会在收到来电时自动触发你的程序,全程不会接听电话。

小提醒

  • 测试的时候可以先把自定义程序换成简单的日志命令,比如echo "来电ID: $caller_id" >> /tmp/sip-call-log.txt,先验证来电ID能不能正确提取、脚本能不能正常触发。
  • 确保你的自定义程序和监听脚本有足够的权限,比如如果要写入文件或者调用系统资源,可能需要调整权限或者用合适的用户运行。

备注:内容来源于stack exchange,提问作者Marcel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 10:43:02