更新
This commit is contained in:
@@ -6,6 +6,8 @@ namespace app\api\controller;
|
||||
|
||||
use app\adminapi\logic\qywx\CustomerLogic;
|
||||
use app\common\service\qywx\QywxCustomerAcquisitionCustomerService;
|
||||
use app\common\service\qywx\QywxPromotionMemberSchedulerService;
|
||||
use app\common\service\qywx\QywxPromotionRangeSyncService;
|
||||
use EasyWeChat\Kernel\Exceptions\BadRequestException;
|
||||
use EasyWeChat\Work\Application;
|
||||
use EasyWeChat\Work\Message;
|
||||
@@ -178,6 +180,29 @@ class QywxExternalContactCallbackController extends BaseApiController
|
||||
return;
|
||||
}
|
||||
|
||||
if ($changeType === 'add_external_contact' && $state !== '' && $userId !== '') {
|
||||
// customer_channel=zyt_pool:{id} 会原样进入 State;以实际 UserID 幂等记账并规划下一位。
|
||||
try {
|
||||
$dispatch = QywxPromotionMemberSchedulerService::recordFromState(
|
||||
$state,
|
||||
$userId,
|
||||
$extId,
|
||||
$eventTime,
|
||||
'external_contact'
|
||||
);
|
||||
if (($dispatch['status'] ?? '') === 'counted' && (int) ($dispatch['pool_id'] ?? 0) > 0) {
|
||||
try {
|
||||
// 回调后立即切换;分钟任务仍负责网络异常、并发版本变化等情况的兜底重试。
|
||||
(new QywxPromotionRangeSyncService())->syncPool((int) $dispatch['pool_id']);
|
||||
} catch (\Throwable $e) {
|
||||
Log::warning('qywx promotion immediate range sync failed: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
// 客户资料同步与成员调度互不阻塞;调度异常保留日志,获客会话回调仍可补偿。
|
||||
Log::error('qywx promotion callback dispatch failed: ' . $e->getMessage(), ['exception' => $e]);
|
||||
}
|
||||
}
|
||||
// 其余变更(添加/编辑/转接成功/标签变化等):以 get 详情为准 UPSERT,避免遗漏未枚举的 ChangeType
|
||||
CustomerLogic::upsertSingleExternalContactFromApi($extId);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user