123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722 |
- <?php
- namespace app\api\controller;
- use app\model\Customer;
- use app\model\CustomerVisitLog;
- use app\model\Employee;
- use app\model\Org;
- use app\model\OutCallLog;
- use app\model\OutCallMbLog;
- use app\model\OutCallSetting;
- use call\Haoxiaoyun;
- use call\Yhuatong;
- use call\Luban;
- use think\facade\Request;
- use clue\Fish as clueFish;
- use app\model\FishData;
- use app\model\Company;
- use app\model\CustomerSource;
- class OutCall extends Base
- {
- /**
- * 回调方法
- *
- */
- public function callBack()
- {
- $params = request()->param();
- if (isset($params['oid'])) $type = 'luban';
- if (isset($params['sessionId']) || isset($params['session_id'])) $type = 'yhuatong';
- if (isset($params['bind_id'])) $type = 'haoxiaoyun';
- if (!isset($type)) return json(['code' => 1, 'msg' => '失败,未设置的外呼系统']);
- $method = $type . 'CallBack';
- return $this->$method();
- }
- /**
- * 云话统推送
- */
- public function yhuatongCallBack()
- {
- $params = request()->param();
- // 录音推送key
- $luyinKey = ['key' => '', 'hash' => '', 'fsize' => '', 'url' => '', 'sessionId' => '', 'call_id' => ''];
- $rs = array_diff_key($luyinKey, $params);
- // 判断是录音推送还是话单推送
- if (count($rs) == 0) { // 录音推送
- return $this->yhuatongLuyin($params);
- } else { // 话单推送
- return $this->yhuatongHuadan($params);
- }
- }
- public function yhuatongLuyin($params)
- {
- // 查询通话记录
- $log = OutCallLog::where(['session_id' => $params['sessionId']])->find();
- if (empty($log)) return json(['code' => 1, 'msg' => '通话记录不存在']);
- $log->save([
- 'key' => $params['key'],
- 'hash' => $params['hash'],
- 'fsize' => $params['fsize'],
- 'url' => $params['url'],
- 'call_id' => $params['call_id']
- ]);
- $visitLog = CustomerVisitLog::where(['data_type' => 'out_call', 'data_id' => $log->id])->find();
- if (!empty($visitLog)) {
- $visitLog->remark = $visitLog->remark; //. '##' . $params['url'];
- $visitLog->save();
- }
- return json(['code' => 0, 'msg' => 'success']);
- }
- public function yhuatongHuadan($params)
- {
- // 查询通话记录
- $log = OutCallLog::where(['session_id' => $params['session_id']])->find();
- if (empty($log)) return json(['code' => 1, 'msg' => '通话记录不存在']);
- $data = [
- 'fwd_start_time' => $params['fwd_start_time'],
- 'call_end_time' => $params['call_end_time'],
- 'billsec' => $params['billsec'],
- 'status' => $params['status']
- ];
- if (isset($params['call_status'])) $data['call_status'] = $params['call_status'];
- $log->save($data);
- $visitLog = CustomerVisitLog::where(['data_type' => 'out_call', 'data_id' => $log->id])->find();
- if (!empty($visitLog)) {
- if ($params['status'] == 1) {
- $visitLog->remark = '回访跟踪了客户,通话时长' . $params['billsec'] . 's';
- } else {
- $visitLog->remark = '回访跟踪了客户,电话未接通';
- }
- $visitLog->save();
- }
- return json(['code' => 0, 'msg' => 'success']);
- }
- /**
- * 鲁班外呼系统推送
- */
- public function lubanCallBack()
- {
- $params = request()->param();
- $log = OutCallLog::where(['session_id' => $params['oid']])->find();
- if (empty($log)) return json(['code' => 1, 'msg' => '通话记录不存在']);
- $log->save([
- 'fwd_start_time' => $params['stime'],
- 'call_end_time' => $params['etime'],
- 'billsec' => $params['htime'],
- 'status' => $params['htime'] > 0 ? 1 : -1,
- 'call_status' => 1000, // 为了区分
- 'url' => $params['voice'],
- 'call_msg' => $params['msg']
- ]);
- $visitLog = CustomerVisitLog::where(['data_type' => 'out_call', 'data_id' => $log->id])->find();
- if (!empty($visitLog)) {
- if ($params['status'] == 1) {
- $visitLog->remark = '回访跟踪了客户,通话时长' . $params['htime'] . 's';
- } else {
- $visitLog->remark = '回访跟踪了客户,电话未接通';
- }
- $visitLog->save();
- }
- return json(['code' => 0, 'msg' => 'success']);
- }
- /**
- * 好销云回调
- */
- public function haoxiaoyunCallback()
- {
- $params = request()->param();
- // 查询通话记录
- $log = OutCallLog::where(['session_id' => $params['bind_id']])->find();
- if (empty($log)) return json(['code' => 1, 'msg' => '通话记录不存在']);
- $data = [
- 'fwd_start_time' => $params['begin_time'],
- 'call_end_time' => $params['end_time'],
- 'billsec' => $params['duration'],
- 'status' => $params['status'] >= 1 ? 1 : -1,
- 'bind_num' => $params['telX'],
- 'url' => $params['audio_url'],
- 'call_msg' => '',
- 'call_status' => 2000
- ];
- $log->save($data);
- $visitLog = CustomerVisitLog::where(['data_type' => 'out_call', 'data_id' => $log->id])->find();
- if (!empty($visitLog)) {
- if ($params['status'] == 1) {
- $visitLog->remark = '回访跟踪了客户,通话时长' . $params['billsec'] . 's';
- } else {
- $visitLog->remark = '回访跟踪了客户,电话未接通';
- }
- $visitLog->save();
- }
- return json(['code' => 0, 'msg' => 'success']);
- }
- public function bind()
- {
- $params = request()->param();
- //检查是否设置过飞鱼-检查线索是否是飞鱼线索
- $root_id = request()->token['root_org'];
- $channel_setting = Company::where(['root_id' => $root_id])->value('channel_setting');
- if (isset($channel_setting) && $channel_setting) {
- $source_id = CustomerSource::where(['root_id' => $root_id, 'source' => '飞鱼线索'])->value('id');
- $c_source_id = Customer::where([['id', '=', $params['customer_id']]])->value('source_id');
- if ($source_id == $c_source_id) {
- $tmp_data = $this->fishOutCall($params, $channel_setting);
- if ($tmp_data['code'] == 0) return json($tmp_data);
- }
- }
- $type = OutCallSetting::where(['root_id' => request()->token['root_org']])->value('type');
- if (empty($type)) return json(['code' => 1, 'msg' => '未配置外呼系统']);
- $method = $type . 'Bind';
- return $this->$method($params);
- }
- public function yhuatongBind($params)
- {
- $token = request()->token;
- $where = [
- ['id', '=', $params['customer_id']],
- ['state', '<>', '无效'],
- ['employee_id', '=', $token['employee_id']]
- ];
- //指派的客户
- $where_or = [['assigned_personnel', 'find in set', $token['employee_id']], ['id', '=', $params['customer_id']]];
- $where_or1 = [['designer_id', '=', $token['employee_id']], ['id', '=', $params['customer_id']]];
- $had = Customer::whereOr([$where, $where_or, $where_or1])->find();
- // 不是共有客户,检测是否是领导领导调用
- if ($had == null && $token['isManager']) {
- $had = Customer::find($params['customer_id']);
- // 检测数据是否存在
- if (!$had) return json(['code' => 1, 'msg' => '数据不存在']);
- $employeeIdListStr = $had->employee_id . ',' . $had->assigned_personnel . ',' . $had->designer_id;
- $employeeIdListArr = explode(',', $employeeIdListStr);
- $employeeIdListArr = array_filter($employeeIdListArr);
- // 登陆人部门及子部门获取
- $my = Org::find($token['org_id']);
- $orgIdList = Org::where([['path', 'like', $my->path . '%']])->column('id');
- // 查找分享人是否在部门下
- $exit = Employee::where([['org_id', 'in', $orgIdList], ['id', 'in', $employeeIdListArr]])->count();
- if ($exit == 0) return json(['code' => 1, 'msg' => '数据不存在']);
- }
- if (!$had) return json(['code' => 1, 'msg' => '数据不存在']);
- if ($had->died == 2) {
- return json(['code' => 1, 'msg' => '客户死单,暂无法跟踪']);
- }
- // 查询客户电话
- $customerPhone = $had->phone;
- // 查询员工电话
- $employee = Employee::where(['id' => $token['employee_id']])->find();
- if (!empty($params['phone'])) {
- $employeePhone = ($employee->phone == $params['phone'] || strpos($employee->out_call_phone, $params['phone']) !== false) ? $params['phone'] : $employee->phone;
- } else {
- $employeePhone = $employee->phone;
- }
- // 电话绑定
- $outCallSetting = OutCallSetting::where(['type' => 'yhuatong', 'root_id' => $token['root_org']])->find();
- if (empty($outCallSetting)) return json(['code' => 1, 'msg' => '未配置']);
- $yhuatong = new Yhuatong($outCallSetting->config['appid'], $outCallSetting->config['secretKey']);
- $r = $yhuatong->whiteShow($employeePhone);trace($r, 'info');
- if ($r['data'] !== false || $yhuatong->callerType($employeePhone) == false) {
- $rs = $yhuatong->bindv2($employeePhone, $customerPhone);
- } else {
- $telXList = explode(',', $outCallSetting->config['tel_x']);
- $randKey = array_rand($telXList);
- $telX = $telXList[$randKey];
- $rs = $yhuatong->bindv2($employeePhone, $customerPhone, $telX);
- }
- trace($rs, 'info');
- if ($rs['code'] !== 10000) {
- trace($rs['msg'], 'error');
- return json(['code' => 1, 'msg' => $rs['msg']]);
- } else {
- // 添加记录
- $log = OutCallLog::create([
- 'session_id' => $rs['data']['sessionId'],
- 'bind_num' => $rs['data']['telX'],
- 'caller_num' => $employeePhone,
- 'callee_num' => $customerPhone,
- 'employee_id' => $token['employee_id'],
- 'root_id' => $token['root_org'],
- 'customer_id' => $params['customer_id']
- ]);
- }
- $had->updatetime = date('Y-m-d H:i:s');
- $had->save();
- $customerEmployee = Employee::find($had->employee_id);
- // 添加访问记录
- CustomerVisitLog::Create([
- 'customer_id' => $params['customer_id'],
- 'type' => 1,
- 'employee_id' => $token['employee_id'],
- 'user_id' => $employee->uid,
- 'org_id' => $employee->org_id,
- 'customer_employee_id' => $had->employee_id,
- 'customer_org_id' => $customerEmployee->org_id,
- 'data_type' => 'out_call',
- 'data_id' => $log->id,
- 'remark' => '回访跟踪了客户'
- ]);
- return json(['code' => 0, 'msg' => '拨打中,请接听']);
- }
- public function lubanBind($params)
- {
- $token = request()->token;
- $where = [
- ['id', '=', $params['customer_id']],
- ['state', '<>', '无效'],
- ['employee_id', '=', $token['employee_id']]
- ];
- //指派的客户
- $where_or = [['assigned_personnel', 'find in set', $token['employee_id']], ['id', '=', $params['customer_id']]];
- $where_or1 = [['designer_id', '=', $token['employee_id']], ['id', '=', $params['customer_id']]];
- $had = Customer::whereOr([$where, $where_or, $where_or1])->find();
- // 不是共有客户,检测是否是领导领导调用
- if ($had == null && $token['isManager']) {
- $had = Customer::find($params['customer_id']);
- // 检测数据是否存在
- if (!$had) return json(['code' => 1, 'msg' => '数据不存在']);
- $employeeIdListStr = $had->employee_id . ',' . $had->assigned_personnel . ',' . $had->designer_id;
- $employeeIdListArr = explode(',', $employeeIdListStr);
- $employeeIdListArr = array_filter($employeeIdListArr);
- // 登陆人部门及子部门获取
- $my = Org::find($token['org_id']);
- $orgIdList = Org::where([['path', 'like', $my->path . '%']])->column('id');
- // 查找分享人是否在部门下
- $exit = Employee::where([['org_id', 'in', $orgIdList], ['id', 'in', $employeeIdListArr]])->count();
- if ($exit == 0) return json(['code' => 1, 'msg' => '数据不存在']);
- }
- if (!$had) return json(['code' => 1, 'msg' => '数据不存在']);
- if ($had->died == 2) {
- return json(['code' => 1, 'msg' => '客户死单,暂无法跟踪']);
- }
- // 查询客户电话
- $customerPhone = $had->phone;
- // 查询员工电话
- $employee = Employee::where(['id' => $token['employee_id']])->find();
- if (!empty($params['phone'])) {
- $employeePhone = ($employee->phone == $params['phone'] || strpos($employee->out_call_phone, $params['phone']) !== false) ? $params['phone'] : $employee->phone;
- } else {
- $employeePhone = $employee->phone;
- }
- // 电话绑定
- $outCallSetting = OutCallSetting::where(['type' => 'luban', 'root_id' => $token['root_org']])->find();
- if (empty($outCallSetting)) return json(['code' => 1, 'msg' => '未配置']);
- $outcallSetting = new Luban($outCallSetting->config['appid'], $outCallSetting->config['secretKey']);
- // 中间号获取
- $telXList = explode(',', $outCallSetting->config['tel_x']);
- $randKey = array_rand($telXList);
- $telX = $telXList[$randKey];
- $rs = $outcallSetting->bind($employeePhone, $customerPhone, $telX);
- if ($rs['code'] != 0) {
- trace($rs['msg'], 'error');
- return json(['code' => 1, 'msg' => $rs['msg']]);
- } else {
- // 添加记录
- $log = OutCallLog::create([
- 'session_id' => $rs['orderid'],
- 'bind_num' => $telX,
- 'caller_num' => $employeePhone,
- 'callee_num' => $customerPhone,
- 'employee_id' => $token['employee_id'],
- 'root_id' => $token['root_org'],
- 'customer_id' => $params['customer_id']
- ]);
- }
- $had->updatetime = date('Y-m-d H:i:s');
- $had->save();
- $customerEmployee = Employee::find($had->employee_id);
- // 添加访问记录
- CustomerVisitLog::Create([
- 'customer_id' => $params['customer_id'],
- 'type' => 1,
- 'employee_id' => $token['employee_id'],
- 'user_id' => $employee->uid,
- 'org_id' => $employee->org_id,
- 'customer_employee_id' => $had->employee_id,
- 'customer_org_id' => $customerEmployee->org_id,
- 'data_type' => 'out_call',
- 'data_id' => $log->id,
- 'remark' => '回访跟踪了客户'
- ]);
- return json(['code' => 0, 'msg' => '拨打中,请接听']);
- }
- /**
- * 好销云绑定
- */
- public function haoxiaoyunBind($params)
- {
- $token = request()->token;
- $where = [
- ['id', '=', $params['customer_id']],
- ['state', '<>', '无效'],
- ['employee_id', '=', $token['employee_id']]
- ];
- //指派的客户
- $where_or = [['assigned_personnel', 'find in set', $token['employee_id']], ['id', '=', $params['customer_id']]];
- $where_or1 = [['designer_id', '=', $token['employee_id']], ['id', '=', $params['customer_id']]];
- $had = Customer::whereOr([$where, $where_or, $where_or1])->find();
- // 不是共有客户,检测是否是领导领导调用
- if ($had == null && $token['isManager']) {
- $had = Customer::find($params['customer_id']);
- // 检测数据是否存在
- if (!$had) return json(['code' => 1, 'msg' => '数据不存在']);
- $employeeIdListStr = $had->employee_id . ',' . $had->assigned_personnel . ',' . $had->designer_id;
- $employeeIdListArr = explode(',', $employeeIdListStr);
- $employeeIdListArr = array_filter($employeeIdListArr);
- // 登陆人部门及子部门获取
- $my = Org::find($token['org_id']);
- $orgIdList = Org::where([['path', 'like', $my->path . '%']])->column('id');
- // 查找分享人是否在部门下
- $exit = Employee::where([['org_id', 'in', $orgIdList], ['id', 'in', $employeeIdListArr]])->count();
- if ($exit == 0) return json(['code' => 1, 'msg' => '数据不存在']);
- }
- if (!$had) return json(['code' => 1, 'msg' => '数据不存在']);
- if ($had->died == 2) {
- return json(['code' => 1, 'msg' => '客户死单,暂无法跟踪']);
- }
- // 查询客户电话
- $customerPhone = $had->phone;
- // 查询员工电话
- $employee = Employee::where(['id' => $token['employee_id']])->find();
- if (!empty($params['phone'])) {
- $employeePhone = ($employee->phone == $params['phone'] || strpos($employee->out_call_phone, $params['phone']) !== false) ? $params['phone'] : $employee->phone;
- } else {
- $employeePhone = $employee->phone;
- }
- // 电话绑定
- $outCallSetting = OutCallSetting::where(['type' => 'haoxiaoyun', 'root_id' => $token['root_org']])->find();
- if (empty($outCallSetting) || $outCallSetting->config['open'] != 1) return json(['code' => 1, 'msg' => '未配置']);
- $line = isset($outCallSetting->config['line_type']) ? $outCallSetting->config['line_type'] : 1; // 默认AXB线路
- $outcallSetting = new Haoxiaoyun();
- $rs = $outcallSetting->bind($employeePhone, $customerPhone, $line);
- if ($rs['code'] != 1) {
- trace($rs, 'info');
- return json(['code' => 1, 'msg' => $rs['info']]);
- } else {
- // 添加记录
- $logData = [
- 'session_id' => $rs['data']['bind_id'],
- 'bind_num' => '',
- 'caller_num' => $employeePhone,
- 'callee_num' => $customerPhone,
- 'employee_id' => $token['employee_id'],
- 'root_id' => $token['root_org'],
- 'customer_id' => $params['customer_id']
- ];
- if (isset($rs['data']['number'])) {
- $logData['bind_num'] = $rs['data']['number'];
- }
- $log = OutCallLog::create($logData);
- }
- $had->updatetime = date('Y-m-d H:i:s');
- $had->save();
- $customerEmployee = Employee::find($had->employee_id);
- // 添加访问记录
- CustomerVisitLog::Create([
- 'customer_id' => $params['customer_id'],
- 'type' => 1,
- 'employee_id' => $token['employee_id'],
- 'user_id' => $employee->uid,
- 'org_id' => $employee->org_id,
- 'customer_employee_id' => $had->employee_id,
- 'customer_org_id' => $customerEmployee->org_id,
- 'data_type' => 'out_call',
- 'data_id' => $log->id,
- 'remark' => '回访跟踪了客户'
- ]);
- if (isset($rs['data']['number'])) {
- return json(['code' => 0, 'msg' => '拨打中,请接听', 'mobile' => $rs['data']['number']]);
- } else {
- return json(['code' => 0, 'msg' => '拨打中,请接听']);
- }
- }
- /*
- * 设置员工外呼电话
- */
- public function setPhone()
- {
- $params = Request::only(['phones' => '']);
- $token = $this->request->token;
- Employee::where('id', $token['employee_id'])->update(['out_call_phone' => $params['phones']]);
- return json(['code' => 0, 'msg' => '保存成功']);
- }
- /**
- * 手机拨打
- */
- public function mobile($id)
- {
- $token = request()->token;
- $where = [
- ['id', '=', $id],
- ['state', '<>', '无效'],
- ['employee_id', '=', $token['employee_id']]
- ];
- //指派的客户
- $where_or = [['assigned_personnel', 'find in set', $token['employee_id']], ['id', '=', $id]];
- // 指定的设计师
- $where_or1 = [['designer_id', '=', $token['employee_id']], ['id', '=', $id]];
- $had = Customer::whereOr([$where, $where_or, $where_or1])->find();
- // 不是共有客户,检测是否是领导领导调用
- if ($had == null && $token['isManager']) {
- $had = Customer::find($id);
- // 检测数据是否存在
- if (!$had) return json(['code' => 1, 'msg' => '数据不存在']);
- $employeeIdListStr = $had->employee_id . ',' . $had->assigned_personnel . ',' . $had->designer_id;
- $employeeIdListArr = explode(',', $employeeIdListStr);
- $employeeIdListArr = array_filter($employeeIdListArr);
- // 登陆人部门及子部门获取
- $my = Org::find($token['org_id']);
- $orgIdList = Org::where([['path', 'like', $my->path . '%']])->column('id');
- // 查找分享人是否在部门下
- $exit = Employee::where([['org_id', 'in', $orgIdList], ['id', 'in', $employeeIdListArr]])->count();
- if ($exit == 0) return json(['code' => 1, 'msg' => '数据不存在']);
- }
- if (!$had) return json(['code' => 1, 'msg' => '数据不存在']);
- if ($had->died == 2) {
- return json(['code' => 1, 'msg' => '客户死单,暂无法跟踪']);
- }
- $had->updatetime = date('Y-m-d H:i:s');
- $had->save();
- // 添加记录
- if(input('type',0)==1){
- //安卓app打电话 按照外呼的方式处理 方便统计
- $log = OutCallLog::create([
- 'session_id' => 'andiroid'.time(),
- 'employee_id' => $token['employee_id'],
- 'customer_id' => $id,
- 'status' => -1,
- 'root_id' => $token['root_org']
- ]);
- }else{
- $log = OutCallMbLog::create([
- 'employee_id' => $token['employee_id'],
- 'root_id' => $token['root_org'],
- 'customer_id' => $id
- ]);
- }
- $customerEmployee = Employee::find($had->employee_id);
- $employee = Employee::where(['id' => $token['employee_id']])->find();
- // 添加访问记录
- CustomerVisitLog::Create([
- 'customer_id' => $id,
- 'type' => 1,
- 'employee_id' => $token['employee_id'],
- 'user_id' => $employee->uid,
- 'org_id' => $employee->org_id,
- 'customer_employee_id' => $had->employee_id,
- 'customer_org_id' => $customerEmployee->org_id,
- 'data_type' => 'mobile_call',
- 'data_id' => $log->id,
- 'remark' => '回访跟踪了客户'
- ]);
- return json(['code' => 0, 'msg' => '记录添加成功']);
- }
- /**
- * 飞鱼线索外呼
- */
- public function fishOutCall($params,$channel_setting)
- {
- $token = request()->token;
- $where = [
- ['id', '=', $params['customer_id']],
- ['state', '<>', '无效'],
- ['employee_id', '=', $token['employee_id']]
- ];
- //指派的客户
- $where_or = [['assigned_personnel', 'find in set', $token['employee_id']], ['id', '=', $params['customer_id']]];
- $where_or1 = [['designer_id', '=', $token['employee_id']], ['id', '=', $params['customer_id']]];
- $had = Customer::whereOr([$where, $where_or, $where_or1])->find();
- // 不是共有客户,检测是否是领导领导调用
- if ($had == null && $token['isManager']) {
- $had = Customer::find($params['customer_id']);
- // 检测数据是否存在
- if (!$had) return ['code' => 1, 'msg' => '数据不存在'];
- $employeeIdListStr = $had->employee_id . ',' . $had->assigned_personnel . ',' . $had->designer_id;
- $employeeIdListArr = explode(',', $employeeIdListStr);
- $employeeIdListArr = array_filter($employeeIdListArr);
- // 登陆人部门及子部门获取
- $my = Org::find($token['org_id']);
- $orgIdList = Org::where([['path', 'like', $my->path . '%']])->column('id');
- // 查找分享人是否在部门下
- $exit = Employee::where([['org_id', 'in', $orgIdList], ['id', 'in', $employeeIdListArr]])->count();
- if ($exit == 0) return ['code' => 1, 'msg' => '数据不存在'];
- }
- if (!$had) return ['code' => 1, 'msg' => '数据不存在'];
- if ($had->died == 2) {
- return ['code' => 1, 'msg' => '客户死单,暂无法跟踪'];
- }
-
- $fish_data = FishData::where(['customer_id' => $params['customer_id']])->find();
- if (!$fish_data) return ['code' => 1, 'msg' => '数据信息有误'];
- $tmp_data = json_decode($channel_setting, true);
- // 查询客户电话
- $customerPhone = $had->phone;
-
- // 查询员工电话
- $employee = Employee::where(['id' => $token['employee_id']])->find();
- if (!empty($params['phone'])) {
- $employeePhone = ($employee->phone == $params['phone'] || strpos($employee->out_call_phone, $params['phone']) !== false) ? $params['phone'] : $employee->phone;
- } else {
- $employeePhone = $employee->phone;
- }
- $appid = config('app.fish_clue_appid');
- $secret = config('app.fish_clue_secret');
- $fish = new clueFish($appid, $secret);
- $tmp_info = [
- //广告主id
- 'advertiser_id' => $fish_data['advertiser_id'],
- //线索id
- 'clue_id' => $fish_data['clue_id'],
- //主叫号码,必须为11位手机号码,否则呼叫失败
- 'caller_number' => $employeePhone,
- //被叫号码,即线索号码
- 'callee_number' => $customerPhone,
- ];
- $rs = $fish->getCallVirtualNumber($tmp_data['fish_access_token'], $tmp_info);
- if ($rs['code'] != 0) {
- return ['code' => 1, 'msg' => '呼叫失败'];
- } else {
- if($rs['data']['call_result_code'] != 103){
- return ['code' => 1, 'msg' => $rs['data']['call_result_message']];
- }
- // 添加记录
- $logData = [
- 'session_id' => $rs['data']['contact_id'],
- 'bind_num' => $rs['data']['virtual_number'],
- 'caller_num' => $employeePhone,
- 'callee_num' => $customerPhone,
- 'employee_id' => $token['employee_id'],
- 'root_id' => $token['root_org'],
- 'customer_id' => $params['customer_id']
- ];
- $log = OutCallLog::create($logData);
- }
- $had->updatetime = date('Y-m-d H:i:s');
- $had->save();
- $customerEmployee = Employee::find($had->employee_id);
- // 添加访问记录
- CustomerVisitLog::Create([
- 'customer_id' => $params['customer_id'],
- 'type' => 1,
- 'employee_id' => $token['employee_id'],
- 'user_id' => $employee->uid,
- 'org_id' => $employee->org_id,
- 'customer_employee_id' => $had->employee_id,
- 'customer_org_id' => $customerEmployee->org_id,
- 'data_type' => 'out_call',
- 'data_id' => $log->id,
- 'remark' => '回访跟踪了飞鱼线索客户'
- ]);
- if (isset($rs['data']['virtual_number'])) {
- return ['code' => 0, 'msg' => '拨打中,请接听', 'mobile' => $rs['data']['virtual_number']];
- } else {
- return ['code' => 1, 'msg' => '拨打中,请接听'];
- }
- }
- }
|