使用Grand Stream呼叫中心API拨打电话:本地正常IIS发布后无响应问题
在Asp.Net Web Forms应用中,使用Grand Stream UCM6301呼叫中心的API实现拨打电话功能,本地运行完全正常,但发布到IIS后,API调用返回成功,却没有实际触发拨号操作。
调用代码如下:
WebClient wc = new WebClient(); var parameters = new NameValueCollection(); byte[] response; string responseString; dynamic data; parameters.Add("action", "dialOutbound"); parameters.Add("outbound", phoneNumber); parameters.Add("caller", internalNumber); parameters.Add("cookie", Globals.Instance.CallCenterCookie); response = wc.UploadValues(Constants.URLs.CALL_CENTER_URL, parameters); responseString = System.Text.Encoding.UTF8.GetString(response); data = JObject.Parse(responseString);
检查IIS应用程序池权限与UCM白名单
本地调试时应用使用当前登录用户权限运行,而IIS默认用ApplicationPoolIdentity或Network Service账号,这类账号可能未被UCM6301的防火墙/IP白名单允许。
解决:将服务器的内网/公网IP添加到UCM的信任IP列表;临时切换应用程序池为本地系统账号测试,确认是否是权限问题。重新获取有效Cookie
本地生成的CallCenterCookie可能绑定了本地客户端IP,服务器IP与本地不同会导致Cookie失效,即使API返回成功,UCM也会拒绝执行操作。
解决:不要复用本地Cookie,在服务器端代码中先调用UCM的登录接口获取服务器环境下的有效Cookie,再用于拨号请求。核对请求参数与编码
本地与IIS的运行环境编码可能存在差异,或者参数格式(如号码是否带前缀、特殊字符)不符合UCM要求。
解决:在服务器端输出请求参数的原始值,与本地调试时的参数对比;用Postman模拟服务器IP发起相同请求,验证参数是否正确。查看UCM6301的后台日志
API返回成功不代表UCM实际执行了拨号操作,登录UCM管理后台,检查系统日志和呼叫日志,查看拨号请求的记录及可能的失败原因(如分机不可用、线路异常)。配置WebClient的代理设置
若服务器处于企业内网,需要通过代理才能访问UCM,WebClient默认不会自动使用系统代理,导致请求看似成功但未到达UCM。
解决:根据网络情况设置代理,示例:// 若需要代理 wc.Proxy = new WebProxy("http://your-proxy-ip:port", false); // 若不需要代理,禁用自动代理检测 wc.Proxy = null;
内容的提问来源于stack exchange,提问作者Behnam Faghih

