Some checks failed
Lock Threads / action (push) Has been cancelled
Mark stale issues and pull requests / stale (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot EE docker images / merge (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot CE docker images / merge (push) Has been cancelled
Run Chatwoot CE spec / lint-backend (push) Has been cancelled
Run Chatwoot CE spec / lint-frontend (push) Has been cancelled
Run Chatwoot CE spec / frontend-tests (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (0, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (1, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (10, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (11, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (12, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (13, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (14, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (15, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (2, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (3, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (4, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (5, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (6, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (7, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (8, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (9, 16) (push) Has been cancelled
Run Linux nightly installer / nightly (push) Has been cancelled
- Add Logistics component with progress tracking - Add OrderDetail component for order information - Support data-driven steps and actions - Add blue color scale to widget SCSS - Fix node overflow and progress bar rendering issues - Add English translations for dashboard components Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
61 lines
1.4 KiB
Ruby
61 lines
1.4 KiB
Ruby
class Voice::StatusUpdateService
|
|
pattr_initialize [:account!, :call_sid!, :call_status, { payload: {} }]
|
|
|
|
TWILIO_STATUS_MAP = {
|
|
'queued' => 'ringing',
|
|
'initiated' => 'ringing',
|
|
'ringing' => 'ringing',
|
|
'in-progress' => 'in-progress',
|
|
'inprogress' => 'in-progress',
|
|
'answered' => 'in-progress',
|
|
'completed' => 'completed',
|
|
'busy' => 'no-answer',
|
|
'no-answer' => 'no-answer',
|
|
'failed' => 'failed',
|
|
'canceled' => 'failed'
|
|
}.freeze
|
|
|
|
def perform
|
|
normalized_status = normalize_status(call_status)
|
|
return if normalized_status.blank?
|
|
|
|
conversation = account.conversations.find_by(identifier: call_sid)
|
|
return unless conversation
|
|
|
|
Voice::CallStatus::Manager.new(
|
|
conversation: conversation,
|
|
call_sid: call_sid
|
|
).process_status_update(
|
|
normalized_status,
|
|
duration: payload_duration,
|
|
timestamp: payload_timestamp
|
|
)
|
|
end
|
|
|
|
private
|
|
|
|
def normalize_status(status)
|
|
return if status.to_s.strip.empty?
|
|
|
|
TWILIO_STATUS_MAP[status.to_s.downcase]
|
|
end
|
|
|
|
def payload_duration
|
|
return unless payload.is_a?(Hash)
|
|
|
|
duration = payload['CallDuration'] || payload['call_duration']
|
|
duration&.to_i
|
|
end
|
|
|
|
def payload_timestamp
|
|
return unless payload.is_a?(Hash)
|
|
|
|
ts = payload['Timestamp'] || payload['timestamp']
|
|
return unless ts
|
|
|
|
Time.zone.parse(ts).to_i
|
|
rescue ArgumentError
|
|
nil
|
|
end
|
|
end
|