models:
  SipTrunk:
    id: id
    company_id: integer nullable
    provider_name: string:100 nullable
    account_id: string:100 nullable
    did: string:30 nullable
    password: string:191 nullable
    host: string:100 nullable
    port: integer nullable default 5060
    position: integer default:1000 nullable
    access_key: string:255 nullable
    secret_key: string:255 nullable
    is_active: boolean default:true
    created_by: id foreign:users.id nullable
    updated_by: id foreign:users.id nullable
    ip: string:50 nullable
    browser: text nullable
    softDeletes

  SipExtension:
    id: id
    company_id: integer nullable
    sip_trunk_id: id foreign:sip_trunks.id nullable
    name: string:100 nullable
    account_id: string:100 nullable
    password: string:191 nullable
    position: integer default:1000 nullable
    is_active: boolean default:true
    created_by: id foreign:users.id nullable
    updated_by: id foreign:users.id nullable
    ip: string:50 nullable
    browser: text nullable
    softDeletes

  SipCall:
    id: id
    company_id: integer nullable
    sip_trunk_id: id foreign:sip_trunks.id nullable
    sip_extension_id: id foreign:sip_extensions.id nullable
    cld: string:30 nullable
    cli: string:30 nullable
    call_id: string:191 nullable
    connect_time: timestamp nullable
    disconnect_time: timestamp nullable
    disconnect_reason: string:255 nullable
    description: string:255 nullable
    destination: string:30 nullable
    xdr: string:100 nullable
    recording_url: string:191 nullable
    charged_quantity: integer nullable
    charged_amount: integer nullable
    other: json nullable
    is_active: boolean default:true
    created_by: id foreign:users.id nullable
    updated_by: id foreign:users.id nullable
    ip: string:50 nullable
    browser: text nullable
    softDeletes


#seeders: Post, Comment

controllers:
  SipTrunk:
    resource: web
  SipExtension:
    resource: web
  SipCall:
    resource: web