Viewing file: ScheduleController.php (2.78 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\Http\Controllers;
use App\Events\SendMail;
use App\Models\Contact;
use App\Models\Message;
use App\Models\Number;
use App\Models\SmsQueue;
use App\Models\MessageLog;
use App\SmsProvider\SendSMS;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Http;
class ScheduleController extends Controller
{
public function processEmail(){
Artisan::call("queue:work",['--stop-when-empty'=>true]);
}
public function checkSchedule(){
$totalNewQueueCount=10;
$messages = SmsQueue::where(['schedule_completed' => 'no'])
->whereNotNull('schedule_datetime')
->whereNull('delivered_at')
->where('schedule_datetime', '<', now())
->where('status','running')
->where('send_type','whatsapp')
->orderBy('schedule_datetime')
->limit($totalNewQueueCount)
->get();
$queueIds=[];
foreach ($messages as $message) {
$queueIds[]=$message->id;
}
if(!$queueIds){
Log::info("No queue found");
return 0;
}
SmsQueue::whereIn('id', $queueIds)->update(['status'=>'fetched','schedule_completed'=>'yes']);
$failedQueueIds=[];
foreach ($messages as $message) {
$from=$message->device_unique_id;
$to=$message->to;
$body=$message->body;
try{
$response=Http::post(config('pico.wa_server_host').'/send',[
'from'=>$from,
'to'=>$to,
'body'=>$body,
]);
if(isset($response['status']) && $response['status']=='failed'){
$failedQueueIds[]=$message->id;
}
if(isset($response['data']) && isset($response['data']['key']) && isset($response['data']['key']['id'])){
$fromMe=$response['data']['key']['fromMe'];
//Log::info($fromMe);
if($fromMe=='true'){
$id=$response['data']['key']['id'];
//TODO:: Need to move in a queue from this loop
SmsQueue::where('id',$message->id)->update(['response_id'=>$id]);
// MessageLog::where('unique_reference',$message->unique_reference)->update(['queue_id'=>$message->id,'response_id'=>$id]);
}
}
}catch(\Exception $ex){
Log::error($ex->getMessage());
}
}
if($failedQueueIds){
SmsQueue::whereIn('id',$failedQueueIds)->update(['status'=>'failed']);
}
}
}
|