SMS 與 Voice 設定來源
目的
整理簡訊、語音電話、SMS provider 切換與相關錯誤排查。
這份文件只記 key 名稱與用途,不記 secret 值。
pro360_api_82
主要來源:
Lib/Common/Configuration.php
docker/staging/Configuration.php常見 key:
| 群組 | 常見 key 名稱 |
|---|---|
| Every8d | EVERY8D_* |
| InfoBip | InfoBip* |
| Twilio | twilio_* |
| Nexmo | Nexmo_* |
| SMS provider 選擇 | sms_platform_local, sms_platform_other, sms_infobip_rate |
SMS provider 切換
新專案一般簡訊入口:
Lib/Util/SmsUtil.php::send()主要切換 key:
sms_platform_local
sms_platform_other
sms_infobip_rate目前程式邏輯:
| 條件 | 設定來源 | 預設值 | 說明 |
|---|---|---|---|
| 本國手機 | sms_platform_local | infobip | PhoneUtilFactory::get(ProConfig::get('area'))->isLocalPhone() 為 true 時使用 |
美國 +1 | 寫死走 Nexmo | nexmo | 不看 sms_platform_other |
| 其他國碼 | sms_platform_other | nexmo | 非本國且非 +1 時使用 |
| Every8d 內灰度轉 InfoBip | sms_infobip_rate | 0 | 只有已進 sendWithEvery8d() 時才會依比例改走 InfoBip |
sendWith() 支援的平台值:
infobip
twilio
nexmo
nexmo_tw
every8d常見切換方式:
| 情境 | 建議設定 | 說明 |
|---|---|---|
Every8d 異常,例如 send SMS to Every8d fail-102 | sms_platform_local = infobip | 讓本國手機直接走 InfoBip,不進 Every8d |
| 已有流程仍直接進 Every8d,但要暫時轉送 InfoBip | sms_infobip_rate = 100 | 只對 sendWithEvery8d() 生效,可作為臨時 fallback |
| 國外簡訊異常 | 檢查 sms_platform_other | 非本國、非 +1 手機才會吃這個設定 |
| 美國簡訊異常 | 查 Nexmo key / callback / log | +1 目前寫死走 Nexmo,改 sms_platform_other 不會影響 |
排查順序
- 先看 application log channel
SmsUtil/InfoBip,確認錯誤發生在哪個 provider。 - 確認實際執行環境載入的
Configuration.php,不要只看本機檔案。 - 查
sms_platform_local/sms_platform_other目前值。 - 若錯誤來自 Every8d,優先切
sms_platform_local = infobip;若仍有程式直接呼叫sendWithEvery8d(),再評估sms_infobip_rate = 100。 - 重跑失敗 notification 時,若事件已進
event_queue_wait,依 event_queue 的event_queue_wait重跑流程處理。
注意
- 切換 provider 是設定變更,不是 load balancer path 切換。
sms_infobip_rate不是全域 SMS provider;它只在 Every8d path 內作比例轉送。- 不要把 provider key 值貼進文件或 ticket,只記 key 名稱與錯誤代碼。