影评周公子 2026-02-21 15:05 采纳率: 99.1%
浏览 2
已采纳

CRMEB Pro 一号通配置后短信不触发,如何排查?

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)

    典型错误模式及根因:

    1. HTTP 401 Unauthorized:AppKey 过期 / AppID 与密钥不匹配 / 时间戳签名算法未同步(注意服务器时间误差需 < 5 分钟);
    2. HTTP 403 Forbidden:IP 未白名单 / 账户余额不足 / 接口调用频控触发(查看 X-RateLimit-Remaining 响应头);
    3. 模板变量缺失:日志中出现 "message":"模板参数不匹配",需比对模板变量(如 {code})与代码中 ['code' => '1234'] 键名严格一致;
    4. 超时(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+ 客户现场验证有效):

    1. 配置校验:运行 php artisan crmeb:sms:check ycht(自定义 Artisan 命令,校验 .env 与后台配置一致性);
    2. 日志追踪:使用 tail -f storage/logs/sms.log | grep -E "(ERROR|401|403|timeout)" 实时过滤;
    3. 模拟调用:Postman 构造原始请求(POST https://api.yihao.com/v1/send),Header 含 X-YHT-Signature,Body 含完整 JSON 参数;
    4. 通道联查:向一号通提供 request_id 和发生时间,要求对方后台导出该请求的完整审计日志(含风控拦截原因)。
    ```
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 2月22日
  • 创建了问题 2月21日