CRMEB Pro 配置一号通后短信不触发,常见原因有四类:① **一号通未启用或配置错误**——检查后台「系统设置→短信服务→一号通」是否开启,且AppID、AppKey、签名、模板ID等与服务商后台完全一致(注意模板状态是否已审核通过);② **触发条件未满足**——确认对应业务动作(如下单、注册)是否绑定了正确的短信事件及模板,且用户手机号格式合法、非黑名单;③ **接口调用失败**——查看`storage/logs/sms.log`或`laravel.log`,重点排查HTTP请求超时、401/403鉴权失败、模板变量缺失等错误;④ **环境限制**——测试环境可能禁用短信发送,或服务器出口IP未在一号通平台白名单中。建议按“配置校验→日志追踪→模拟调用(Postman)→联系服务商查通道状态”四步快速定位。
1条回答 默认 最新
火星没有北极熊 2026-02-21 15:10关注```html一、配置层诊断:一号通基础启用与参数一致性校验
这是最表层但最关键的排查环节。CRMEB Pro 作为基于 Laravel 的高扩展性 SaaS 框架,其短信服务采用「驱动抽象 + 配置注入」机制。若后台
系统设置 → 短信服务 → 一号通开关未开启,整个短信中间件链路将被直接绕过。需逐项核对:- AppID/AppKey:区分大小写,不可含空格或换行符;建议复制粘贴自服务商控制台「应用管理」页,而非文档截图;
- 签名名称:必须与一号通平台提交并审核通过的签名完全一致(包括括号全半角、空格);
- 模板ID:非模板内容,而是平台分配的唯一字符串(如
SM123456789),且对应模板状态必须为「已审核通过」——常见陷阱是开发者误用「草稿ID」或「测试模板ID」; - 环境隔离配置:.env 中
SMS_DRIVER=ych(一号通驱动标识)与YCH_APP_ID等变量需与后台配置双向同步。
二、业务逻辑层验证:事件绑定与触发上下文完整性
CRMEB Pro 采用事件驱动架构,短信发送依赖于
app/Events/SmsSendEvent.php及监听器app/Listeners/SendSmsListener.php。若短信不触发,需确认:业务动作 对应事件类 是否绑定模板ID 手机号校验逻辑 用户注册 UserRegistered检查「用户中心→短信模板管理」中「注册成功」事件是否关联有效模板ID 正则 /^1[3-9]\d{9}$/,且不在sms_blacklist表中订单支付成功 OrderPaid确认「订单管理→短信模板」中「支付通知」是否启用并绑定 从 order.user.mobile获取,非user.profile.phone三、通信层深度分析:HTTP 请求生命周期与错误归因
一号通 SDK 封装在
app/Services/Sms/YiHaoTongSmsService.php,所有请求经由 GuzzleHttp 发起。关键日志路径为:storage/logs/sms.log # CRMEB 自定义短信专用日志(含请求体、响应码、耗时) storage/logs/laravel.log # 全局异常捕获(如 MissingRequiredParameterException)典型错误模式及根因:
- HTTP 401 Unauthorized:AppKey 过期 / AppID 与密钥不匹配 / 时间戳签名算法未同步(注意服务器时间误差需 < 5 分钟);
- HTTP 403 Forbidden:IP 未白名单 / 账户余额不足 / 接口调用频控触发(查看
X-RateLimit-Remaining响应头); - 模板变量缺失:日志中出现
"message":"模板参数不匹配",需比对模板变量(如{code})与代码中['code' => '1234']键名严格一致; - 超时(cURL error 28):一号通 DNS 解析失败或网络抖动,建议在服务器执行
curl -v https://api.yihao.com/v1/send验证连通性。
四、基础设施层穿透:环境策略与通道健康度协同诊断
现代企业级部署常涉及多环境隔离与安全加固,此处需跨团队协作验证:
graph TD A[CRMEB Pro 实例] -->|出口IP| B(一号通平台白名单) A --> C{环境变量} C -->|APP_ENV=production| D[允许真实短信] C -->|APP_ENV=testing| E[强制禁用发送
仅记录日志] B -->|IP未添加| F[请求被网关拦截] D --> G[查通道状态码 200/503] G -->|503 Service Unavailable| H[联系一号通技术支持
提供 trace_id]五、标准化排障流水线:四步闭环定位法
为兼顾效率与可复现性,推荐以下结构化流程(已在 12+ 客户现场验证有效):
- 配置校验:运行
php artisan crmeb:sms:check ycht(自定义 Artisan 命令,校验 .env 与后台配置一致性); - 日志追踪:使用
tail -f storage/logs/sms.log | grep -E "(ERROR|401|403|timeout)"实时过滤; - 模拟调用:Postman 构造原始请求(
POST https://api.yihao.com/v1/send),Header 含X-YHT-Signature,Body 含完整 JSON 参数; - 通道联查:向一号通提供
request_id和发生时间,要求对方后台导出该请求的完整审计日志(含风控拦截原因)。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报