revox 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +26 -0
  3. data/README.md +38 -38
  4. data/lib/revox/models/assistant_clone_response.rb +87 -65
  5. data/lib/revox/models/assistant_create_params.rb +90 -66
  6. data/lib/revox/models/assistant_create_response.rb +87 -65
  7. data/lib/revox/models/assistant_list_response.rb +87 -65
  8. data/lib/revox/models/assistant_retrieve_response.rb +86 -65
  9. data/lib/revox/models/assistant_update_params.rb +90 -66
  10. data/lib/revox/models/assistant_update_response.rb +87 -65
  11. data/lib/revox/models/call_create_params.rb +117 -90
  12. data/lib/revox/models/call_create_response.rb +670 -90
  13. data/lib/revox/models/call_export_params.rb +1 -3
  14. data/lib/revox/models/call_phone_history_response.rb +0 -3
  15. data/lib/revox/models/call_retrieve_response.rb +671 -90
  16. data/lib/revox/models/call_search_params.rb +1 -3
  17. data/lib/revox/models/call_search_response.rb +670 -90
  18. data/lib/revox/models/campaign_create_params.rb +7 -57
  19. data/lib/revox/models/campaign_create_response.rb +108 -119
  20. data/lib/revox/models/campaign_get_rows_response.rb +672 -90
  21. data/lib/revox/models/campaign_list_response.rb +108 -119
  22. data/lib/revox/models/campaign_retrieve_response.rb +108 -119
  23. data/lib/revox/models/campaign_statistics_response.rb +51 -23
  24. data/lib/revox/models/campaign_update_params.rb +9 -78
  25. data/lib/revox/models/campaign_update_response.rb +108 -119
  26. data/lib/revox/models/phone_number_list_response.rb +87 -65
  27. data/lib/revox/models/phone_number_update_response.rb +87 -65
  28. data/lib/revox/models/voice_list_response.rb +1 -0
  29. data/lib/revox/models/voice_preview_params.rb +1 -0
  30. data/lib/revox/models/voice_retrieve_params.rb +1 -0
  31. data/lib/revox/models.rb +0 -2
  32. data/lib/revox/resources/assistants.rb +10 -10
  33. data/lib/revox/resources/call.rb +4 -4
  34. data/lib/revox/resources/campaigns.rb +13 -45
  35. data/lib/revox/version.rb +1 -1
  36. data/lib/revox.rb +0 -2
  37. data/rbi/revox/models/assistant_clone_response.rbi +157 -147
  38. data/rbi/revox/models/assistant_create_params.rbi +148 -162
  39. data/rbi/revox/models/assistant_create_response.rbi +157 -147
  40. data/rbi/revox/models/assistant_list_response.rbi +157 -147
  41. data/rbi/revox/models/assistant_retrieve_response.rbi +153 -147
  42. data/rbi/revox/models/assistant_update_params.rbi +148 -162
  43. data/rbi/revox/models/assistant_update_response.rbi +157 -147
  44. data/rbi/revox/models/call_create_params.rbi +190 -187
  45. data/rbi/revox/models/call_create_response.rbi +1138 -227
  46. data/rbi/revox/models/call_export_params.rbi +5 -15
  47. data/rbi/revox/models/call_phone_history_response.rbi +0 -15
  48. data/rbi/revox/models/call_retrieve_response.rbi +1138 -227
  49. data/rbi/revox/models/call_search_params.rbi +2 -9
  50. data/rbi/revox/models/call_search_response.rbi +1138 -227
  51. data/rbi/revox/models/campaign_create_params.rbi +9 -87
  52. data/rbi/revox/models/campaign_create_response.rbi +188 -266
  53. data/rbi/revox/models/campaign_get_rows_response.rbi +1138 -225
  54. data/rbi/revox/models/campaign_list_response.rbi +188 -262
  55. data/rbi/revox/models/campaign_retrieve_response.rbi +188 -266
  56. data/rbi/revox/models/campaign_statistics_response.rbi +94 -36
  57. data/rbi/revox/models/campaign_update_params.rbi +10 -128
  58. data/rbi/revox/models/campaign_update_response.rbi +188 -266
  59. data/rbi/revox/models/phone_number_list_response.rbi +157 -147
  60. data/rbi/revox/models/phone_number_update_response.rbi +157 -147
  61. data/rbi/revox/models/voice_list_response.rbi +5 -0
  62. data/rbi/revox/models/voice_preview_params.rbi +2 -0
  63. data/rbi/revox/models/voice_retrieve_params.rbi +2 -0
  64. data/rbi/revox/models.rbi +0 -2
  65. data/rbi/revox/resources/assistants.rbi +40 -22
  66. data/rbi/revox/resources/call.rbi +7 -4
  67. data/rbi/revox/resources/campaigns.rbi +12 -44
  68. data/sig/revox/models/assistant_clone_response.rbs +46 -54
  69. data/sig/revox/models/assistant_create_params.rbs +39 -58
  70. data/sig/revox/models/assistant_create_response.rbs +46 -54
  71. data/sig/revox/models/assistant_list_response.rbs +46 -54
  72. data/sig/revox/models/assistant_retrieve_response.rbs +46 -54
  73. data/sig/revox/models/assistant_update_params.rbs +39 -58
  74. data/sig/revox/models/assistant_update_response.rbs +46 -54
  75. data/sig/revox/models/call_create_params.rbs +50 -71
  76. data/sig/revox/models/call_create_response.rbs +468 -77
  77. data/sig/revox/models/call_export_params.rbs +2 -6
  78. data/sig/revox/models/call_phone_history_response.rbs +1 -10
  79. data/sig/revox/models/call_retrieve_response.rbs +468 -77
  80. data/sig/revox/models/call_search_params.rbs +2 -6
  81. data/sig/revox/models/call_search_response.rbs +468 -77
  82. data/sig/revox/models/campaign_create_params.rbs +5 -50
  83. data/sig/revox/models/campaign_create_response.rbs +62 -98
  84. data/sig/revox/models/campaign_get_rows_response.rbs +467 -73
  85. data/sig/revox/models/campaign_list_response.rbs +62 -98
  86. data/sig/revox/models/campaign_retrieve_response.rbs +62 -98
  87. data/sig/revox/models/campaign_statistics_response.rbs +55 -24
  88. data/sig/revox/models/campaign_update_params.rbs +1 -69
  89. data/sig/revox/models/campaign_update_response.rbs +62 -98
  90. data/sig/revox/models/phone_number_list_response.rbs +46 -54
  91. data/sig/revox/models/phone_number_update_response.rbs +46 -54
  92. data/sig/revox/models/voice_list_response.rbs +2 -1
  93. data/sig/revox/models/voice_preview_params.rbs +2 -1
  94. data/sig/revox/models/voice_retrieve_params.rbs +2 -1
  95. data/sig/revox/models.rbs +0 -2
  96. data/sig/revox/resources/assistants.rbs +4 -4
  97. data/sig/revox/resources/call.rbs +1 -1
  98. data/sig/revox/resources/campaigns.rbs +0 -12
  99. metadata +2 -8
  100. data/lib/revox/models/campaign_launch_params.rb +0 -20
  101. data/lib/revox/models/campaign_launch_response.rb +0 -2030
  102. data/rbi/revox/models/campaign_launch_params.rbi +0 -33
  103. data/rbi/revox/models/campaign_launch_response.rbi +0 -4170
  104. data/sig/revox/models/campaign_launch_params.rbs +0 -20
  105. data/sig/revox/models/campaign_launch_response.rbs +0 -1694
@@ -359,14 +359,6 @@ module Revox
359
359
  sig { returns(T.nilable(String)) }
360
360
  attr_accessor :email_notification_address
361
361
 
362
- # The language used for the notification email content. One of "en" or "fr".
363
- sig do
364
- returns(
365
- Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::EmailNotificationLanguage::TaggedSymbol
366
- )
367
- end
368
- attr_accessor :email_notification_language
369
-
370
362
  # Which call outcomes trigger an email notification. E.g. ["interested",
371
363
  # "completed", "none"]. Use "none" when outcome is null.
372
364
  sig do
@@ -402,8 +394,8 @@ module Revox
402
394
  sig { returns(T.nilable(String)) }
403
395
  attr_accessor :from_phone_number
404
396
 
405
- # Warm or cold transfer when transfer_phone_number is set; null when transfer is
406
- # not configured.
397
+ # Warm or cold transfer when transfer_destinations is non-empty; null when
398
+ # transfer is not configured.
407
399
  sig do
408
400
  returns(
409
401
  T.nilable(
@@ -466,6 +458,11 @@ module Revox
466
458
  end
467
459
  attr_writer :position
468
460
 
461
+ # URL fetched before an inbound call is answered to resolve the assistant's prompt
462
+ # variables. Null when no lookup is configured.
463
+ sig { returns(T.nilable(String)) }
464
+ attr_accessor :precall_lookup_url
465
+
469
466
  sig { returns(String) }
470
467
  attr_accessor :prompt
471
468
 
@@ -587,9 +584,18 @@ module Revox
587
584
  sig { returns(Float) }
588
585
  attr_accessor :thinking_sound_volume
589
586
 
590
- # Phone number to transfer calls to when users request to speak to a human agent.
591
- sig { returns(T.nilable(String)) }
592
- attr_accessor :transfer_phone_number
587
+ # Where calls can be transferred to when users ask to speak to a human. Null or
588
+ # empty when transfer is not configured.
589
+ sig do
590
+ returns(
591
+ T.nilable(
592
+ T::Array[
593
+ Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::TransferDestination
594
+ ]
595
+ )
596
+ )
597
+ end
598
+ attr_accessor :transfer_destinations
593
599
 
594
600
  sig do
595
601
  returns(
@@ -699,6 +705,12 @@ module Revox
699
705
  end
700
706
  attr_writer :faq_items
701
707
 
708
+ sig { returns(T.nilable(T::Boolean)) }
709
+ attr_reader :is_inbound_receptionist
710
+
711
+ sig { params(is_inbound_receptionist: T::Boolean).void }
712
+ attr_writer :is_inbound_receptionist
713
+
702
714
  sig { returns(T.nilable(T::Boolean)) }
703
715
  attr_reader :is_realestate_assistant
704
716
 
@@ -743,8 +755,6 @@ module Revox
743
755
  ]
744
756
  ),
745
757
  email_notification_address: T.nilable(String),
746
- email_notification_language:
747
- Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::EmailNotificationLanguage::OrSymbol,
748
758
  email_notification_outcomes:
749
759
  T.nilable(
750
760
  T::Array[
@@ -778,6 +788,7 @@ module Revox
778
788
  T.nilable(
779
789
  Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::Position::OrHash
780
790
  ),
791
+ precall_lookup_url: T.nilable(String),
781
792
  prompt: String,
782
793
  prompt_flow:
783
794
  T.nilable(
@@ -808,7 +819,12 @@ module Revox
808
819
  ),
809
820
  thinking_sound_probability: Float,
810
821
  thinking_sound_volume: Float,
811
- transfer_phone_number: T.nilable(String),
822
+ transfer_destinations:
823
+ T.nilable(
824
+ T::Array[
825
+ Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::TransferDestination::OrHash
826
+ ]
827
+ ),
812
828
  type:
813
829
  Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::Type::OrSymbol,
814
830
  updated_at: T.anything,
@@ -832,6 +848,7 @@ module Revox
832
848
  T::Array[
833
849
  Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::FaqItem::OrHash
834
850
  ],
851
+ is_inbound_receptionist: T::Boolean,
835
852
  is_realestate_assistant: T::Boolean,
836
853
  pending_faq_count: Float
837
854
  ).returns(T.attached_class)
@@ -860,8 +877,6 @@ module Revox
860
877
  # outcome. Accepts a single email or a comma-separated list (e.g. "alice@x.com,
861
878
  # bob@y.com").
862
879
  email_notification_address:,
863
- # The language used for the notification email content. One of "en" or "fr".
864
- email_notification_language:,
865
880
  # Which call outcomes trigger an email notification. E.g. ["interested",
866
881
  # "completed", "none"]. Use "none" when outcome is null.
867
882
  email_notification_outcomes:,
@@ -873,8 +888,8 @@ module Revox
873
888
  # Override the default outbound phone number for calls placed with this assistant.
874
889
  # When null, the organization's default phone number is used.
875
890
  from_phone_number:,
876
- # Warm or cold transfer when transfer_phone_number is set; null when transfer is
877
- # not configured.
891
+ # Warm or cold transfer when transfer_destinations is non-empty; null when
892
+ # transfer is not configured.
878
893
  human_transfer_mode:,
879
894
  # Enable IVR navigation tools. When enabled, the assistant can send DTMF tones and
880
895
  # skip turns to navigate phone menus.
@@ -893,6 +908,9 @@ module Revox
893
908
  name:,
894
909
  organization_id:,
895
910
  position:,
911
+ # URL fetched before an inbound call is answered to resolve the assistant's prompt
912
+ # variables. Null when no lookup is configured.
913
+ precall_lookup_url:,
896
914
  prompt:,
897
915
  prompt_flow:,
898
916
  slack:,
@@ -924,8 +942,9 @@ module Revox
924
942
  thinking_sound_probability:,
925
943
  # Volume of the thinking sound (0 = silent, 1 = max).
926
944
  thinking_sound_volume:,
927
- # Phone number to transfer calls to when users request to speak to a human agent.
928
- transfer_phone_number:,
945
+ # Where calls can be transferred to when users ask to speak to a human. Null or
946
+ # empty when transfer is not configured.
947
+ transfer_destinations:,
929
948
  type:,
930
949
  updated_at:,
931
950
  voice:,
@@ -944,6 +963,7 @@ module Revox
944
963
  # The user who created the assistant.
945
964
  created_by: nil,
946
965
  faq_items: nil,
966
+ is_inbound_receptionist: nil,
947
967
  is_realestate_assistant: nil,
948
968
  pending_faq_count: nil
949
969
  )
@@ -982,8 +1002,6 @@ module Revox
982
1002
  ]
983
1003
  ),
984
1004
  email_notification_address: T.nilable(String),
985
- email_notification_language:
986
- Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::EmailNotificationLanguage::TaggedSymbol,
987
1005
  email_notification_outcomes:
988
1006
  T.nilable(
989
1007
  T::Array[
@@ -1012,6 +1030,7 @@ module Revox
1012
1030
  T.nilable(
1013
1031
  Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::Position
1014
1032
  ),
1033
+ precall_lookup_url: T.nilable(String),
1015
1034
  prompt: String,
1016
1035
  prompt_flow:
1017
1036
  T.nilable(
@@ -1042,7 +1061,12 @@ module Revox
1042
1061
  ),
1043
1062
  thinking_sound_probability: Float,
1044
1063
  thinking_sound_volume: Float,
1045
- transfer_phone_number: T.nilable(String),
1064
+ transfer_destinations:
1065
+ T.nilable(
1066
+ T::Array[
1067
+ Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::TransferDestination
1068
+ ]
1069
+ ),
1046
1070
  type:
1047
1071
  Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::Type::TaggedSymbol,
1048
1072
  updated_at: T.anything,
@@ -1066,6 +1090,7 @@ module Revox
1066
1090
  T::Array[
1067
1091
  Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::FaqItem
1068
1092
  ],
1093
+ is_inbound_receptionist: T::Boolean,
1069
1094
  is_realestate_assistant: T::Boolean,
1070
1095
  pending_faq_count: Float
1071
1096
  }
@@ -1106,21 +1131,6 @@ module Revox
1106
1131
  :requested_callback_later,
1107
1132
  Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::AfterCallSMSOutcome::TaggedSymbol
1108
1133
  )
1109
- REQUESTED_CALLBACK_NEW_NUMBER =
1110
- T.let(
1111
- :requested_callback_new_number,
1112
- Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::AfterCallSMSOutcome::TaggedSymbol
1113
- )
1114
- DO_NOT_CONTACT =
1115
- T.let(
1116
- :do_not_contact,
1117
- Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::AfterCallSMSOutcome::TaggedSymbol
1118
- )
1119
- AI_AVERSE =
1120
- T.let(
1121
- :ai_averse,
1122
- Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::AfterCallSMSOutcome::TaggedSymbol
1123
- )
1124
1134
  NONE =
1125
1135
  T.let(
1126
1136
  :none,
@@ -1389,7 +1399,8 @@ module Revox
1389
1399
  sig { returns(String) }
1390
1400
  attr_accessor :calling_window_start_time
1391
1401
 
1392
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
1402
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
1403
+ # allows. Default: 7200 (2 hours).
1393
1404
  sig { returns(Integer) }
1394
1405
  attr_accessor :retry_delay_seconds
1395
1406
 
@@ -1409,7 +1420,8 @@ module Revox
1409
1420
  # timezone_override if provided). Format: 'HH:mm' (24-hour) or 'H:mma' (12-hour).
1410
1421
  # Examples: '09:00', '10am'. Default: '10:00'.
1411
1422
  calling_window_start_time:,
1412
- # Delay between retry attempts in seconds. Default: 7200 (2 hours).
1423
+ # Delay between retry attempts in seconds. 0 retries as soon as the calling window
1424
+ # allows. Default: 7200 (2 hours).
1413
1425
  retry_delay_seconds:
1414
1426
  )
1415
1427
  end
@@ -1796,41 +1808,6 @@ module Revox
1796
1808
  end
1797
1809
  end
1798
1810
 
1799
- # The language used for the notification email content. One of "en" or "fr".
1800
- module EmailNotificationLanguage
1801
- extend Revox::Internal::Type::Enum
1802
-
1803
- TaggedSymbol =
1804
- T.type_alias do
1805
- T.all(
1806
- Symbol,
1807
- Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::EmailNotificationLanguage
1808
- )
1809
- end
1810
- OrSymbol = T.type_alias { T.any(Symbol, String) }
1811
-
1812
- EN =
1813
- T.let(
1814
- :en,
1815
- Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::EmailNotificationLanguage::TaggedSymbol
1816
- )
1817
- FR =
1818
- T.let(
1819
- :fr,
1820
- Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::EmailNotificationLanguage::TaggedSymbol
1821
- )
1822
-
1823
- sig do
1824
- override.returns(
1825
- T::Array[
1826
- Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::EmailNotificationLanguage::TaggedSymbol
1827
- ]
1828
- )
1829
- end
1830
- def self.values
1831
- end
1832
- end
1833
-
1834
1811
  module EmailNotificationOutcome
1835
1812
  extend Revox::Internal::Type::Enum
1836
1813
 
@@ -1863,21 +1840,6 @@ module Revox
1863
1840
  :requested_callback_later,
1864
1841
  Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::EmailNotificationOutcome::TaggedSymbol
1865
1842
  )
1866
- REQUESTED_CALLBACK_NEW_NUMBER =
1867
- T.let(
1868
- :requested_callback_new_number,
1869
- Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::EmailNotificationOutcome::TaggedSymbol
1870
- )
1871
- DO_NOT_CONTACT =
1872
- T.let(
1873
- :do_not_contact,
1874
- Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::EmailNotificationOutcome::TaggedSymbol
1875
- )
1876
- AI_AVERSE =
1877
- T.let(
1878
- :ai_averse,
1879
- Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::EmailNotificationOutcome::TaggedSymbol
1880
- )
1881
1843
  NONE =
1882
1844
  T.let(
1883
1845
  :none,
@@ -1934,8 +1896,8 @@ module Revox
1934
1896
  end
1935
1897
  end
1936
1898
 
1937
- # Warm or cold transfer when transfer_phone_number is set; null when transfer is
1938
- # not configured.
1899
+ # Warm or cold transfer when transfer_destinations is non-empty; null when
1900
+ # transfer is not configured.
1939
1901
  module HumanTransferMode
1940
1902
  extend Revox::Internal::Type::Enum
1941
1903
 
@@ -2533,9 +2495,17 @@ module Revox
2533
2495
  )
2534
2496
  end
2535
2497
 
2536
- # The Slack channel ID where the notification will be posted.
2537
- sig { returns(String) }
2538
- attr_accessor :channel_id
2498
+ # The Slack channels eligible to receive the notification. When more than one is
2499
+ # configured, the agent prompt may define routing rules to narrow it down per
2500
+ # call; with no such rules every channel here is notified.
2501
+ sig do
2502
+ returns(
2503
+ T::Array[
2504
+ Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::Slack::Channel
2505
+ ]
2506
+ )
2507
+ end
2508
+ attr_accessor :channels
2539
2509
 
2540
2510
  # The Nango connection ID linking the org's Slack workspace to Revox.
2541
2511
  sig { returns(String) }
@@ -2552,45 +2522,43 @@ module Revox
2552
2522
  end
2553
2523
  attr_accessor :outcomes
2554
2524
 
2555
- # Human-readable Slack channel name, cached for display in the UI.
2556
- sig { returns(T.nilable(String)) }
2557
- attr_accessor :channel_name
2558
-
2559
2525
  # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2560
2526
  # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
2561
- # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
2562
- # prompt_variables and structured_output keys. When null/empty a default template
2563
- # is used.
2527
+ # {{last_name}}, {{email}}, {{company}}, {{job_title}}, {{contact_name}},
2528
+ # {{contact_line}}, plus prompt_variables and structured_output keys. When
2529
+ # null/empty a default template is used.
2564
2530
  sig { returns(T.nilable(String)) }
2565
2531
  attr_accessor :template
2566
2532
 
2567
2533
  sig do
2568
2534
  params(
2569
- channel_id: String,
2535
+ channels:
2536
+ T::Array[
2537
+ Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::Slack::Channel::OrHash
2538
+ ],
2570
2539
  connection_id: String,
2571
2540
  outcomes:
2572
2541
  T::Array[
2573
2542
  Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::Slack::Outcome::OrSymbol
2574
2543
  ],
2575
- channel_name: T.nilable(String),
2576
2544
  template: T.nilable(String)
2577
2545
  ).returns(T.attached_class)
2578
2546
  end
2579
2547
  def self.new(
2580
- # The Slack channel ID where the notification will be posted.
2581
- channel_id:,
2548
+ # The Slack channels eligible to receive the notification. When more than one is
2549
+ # configured, the agent prompt may define routing rules to narrow it down per
2550
+ # call; with no such rules every channel here is notified.
2551
+ channels:,
2582
2552
  # The Nango connection ID linking the org's Slack workspace to Revox.
2583
2553
  connection_id:,
2584
2554
  # Which call outcomes trigger a Slack notification (e.g. ['interested', 'none']).
2585
2555
  # Use 'none' to notify when outcome is null.
2586
2556
  outcomes:,
2587
- # Human-readable Slack channel name, cached for display in the UI.
2588
- channel_name: nil,
2589
2557
  # Optional message template. Supports {{summary}}, {{outcome}}, {{phone}},
2590
2558
  # {{call_url}}, {{assistant_name}}, {{campaign_name}}, {{first_name}},
2591
- # {{last_name}}, {{email}}, {{company}}, {{contact_name}}, {{contact_line}}, plus
2592
- # prompt_variables and structured_output keys. When null/empty a default template
2593
- # is used.
2559
+ # {{last_name}}, {{email}}, {{company}}, {{job_title}}, {{contact_name}},
2560
+ # {{contact_line}}, plus prompt_variables and structured_output keys. When
2561
+ # null/empty a default template is used.
2594
2562
  template: nil
2595
2563
  )
2596
2564
  end
@@ -2598,13 +2566,15 @@ module Revox
2598
2566
  sig do
2599
2567
  override.returns(
2600
2568
  {
2601
- channel_id: String,
2569
+ channels:
2570
+ T::Array[
2571
+ Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::Slack::Channel
2572
+ ],
2602
2573
  connection_id: String,
2603
2574
  outcomes:
2604
2575
  T::Array[
2605
2576
  Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::Slack::Outcome::TaggedSymbol
2606
2577
  ],
2607
- channel_name: T.nilable(String),
2608
2578
  template: T.nilable(String)
2609
2579
  }
2610
2580
  )
@@ -2612,6 +2582,43 @@ module Revox
2612
2582
  def to_hash
2613
2583
  end
2614
2584
 
2585
+ class Channel < Revox::Internal::Type::BaseModel
2586
+ OrHash =
2587
+ T.type_alias do
2588
+ T.any(
2589
+ Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::Slack::Channel,
2590
+ Revox::Internal::AnyHash
2591
+ )
2592
+ end
2593
+
2594
+ # The Slack channel ID (e.g. 'C01234567').
2595
+ sig { returns(String) }
2596
+ attr_accessor :id
2597
+
2598
+ # Human-readable Slack channel name, cached for display in the UI and given to the
2599
+ # LLM when the agent prompt routes by channel name.
2600
+ sig { returns(T.nilable(String)) }
2601
+ attr_accessor :name
2602
+
2603
+ sig do
2604
+ params(id: String, name: T.nilable(String)).returns(
2605
+ T.attached_class
2606
+ )
2607
+ end
2608
+ def self.new(
2609
+ # The Slack channel ID (e.g. 'C01234567').
2610
+ id:,
2611
+ # Human-readable Slack channel name, cached for display in the UI and given to the
2612
+ # LLM when the agent prompt routes by channel name.
2613
+ name: nil
2614
+ )
2615
+ end
2616
+
2617
+ sig { override.returns({ id: String, name: T.nilable(String) }) }
2618
+ def to_hash
2619
+ end
2620
+ end
2621
+
2615
2622
  module Outcome
2616
2623
  extend Revox::Internal::Type::Enum
2617
2624
 
@@ -2644,21 +2651,6 @@ module Revox
2644
2651
  :requested_callback_later,
2645
2652
  Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::Slack::Outcome::TaggedSymbol
2646
2653
  )
2647
- REQUESTED_CALLBACK_NEW_NUMBER =
2648
- T.let(
2649
- :requested_callback_new_number,
2650
- Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::Slack::Outcome::TaggedSymbol
2651
- )
2652
- DO_NOT_CONTACT =
2653
- T.let(
2654
- :do_not_contact,
2655
- Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::Slack::Outcome::TaggedSymbol
2656
- )
2657
- AI_AVERSE =
2658
- T.let(
2659
- :ai_averse,
2660
- Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::Slack::Outcome::TaggedSymbol
2661
- )
2662
2654
  NONE =
2663
2655
  T.let(
2664
2656
  :none,
@@ -2973,6 +2965,34 @@ module Revox
2973
2965
  end
2974
2966
  end
2975
2967
 
2968
+ class TransferDestination < Revox::Internal::Type::BaseModel
2969
+ OrHash =
2970
+ T.type_alias do
2971
+ T.any(
2972
+ Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::TransferDestination,
2973
+ Revox::Internal::AnyHash
2974
+ )
2975
+ end
2976
+
2977
+ sig { returns(String) }
2978
+ attr_accessor :label
2979
+
2980
+ sig { returns(String) }
2981
+ attr_accessor :phone_number
2982
+
2983
+ sig do
2984
+ params(label: String, phone_number: String).returns(
2985
+ T.attached_class
2986
+ )
2987
+ end
2988
+ def self.new(label:, phone_number:)
2989
+ end
2990
+
2991
+ sig { override.returns({ label: String, phone_number: String }) }
2992
+ def to_hash
2993
+ end
2994
+ end
2995
+
2976
2996
  module Type
2977
2997
  extend Revox::Internal::Type::Enum
2978
2998
 
@@ -3053,7 +3073,7 @@ module Revox
3053
3073
  attr_writer :model
3054
3074
 
3055
3075
  # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
3056
- # 0.7–1.2. Default is 1.0.
3076
+ # 0.7–1.2, Gradium 0.6–1.5. Default is 1.0.
3057
3077
  sig { returns(T.nilable(Float)) }
3058
3078
  attr_reader :speed
3059
3079
 
@@ -3088,7 +3108,7 @@ module Revox
3088
3108
  # for other providers.
3089
3109
  model: nil,
3090
3110
  # The speed of the voice. Range depends on provider: Cartesia 0.6–1.5, ElevenLabs
3091
- # 0.7–1.2. Default is 1.0.
3111
+ # 0.7–1.2, Gradium 0.6–1.5. Default is 1.0.
3092
3112
  speed: nil,
3093
3113
  # Volume of the voice (Cartesia only). 0.5–2.0, default 1.0. Ignored for other
3094
3114
  # providers.
@@ -3135,6 +3155,11 @@ module Revox
3135
3155
  :elevenlabs,
3136
3156
  Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::Voice::Provider::TaggedSymbol
3137
3157
  )
3158
+ GRADIUM =
3159
+ T.let(
3160
+ :gradium,
3161
+ Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::Voice::Provider::TaggedSymbol
3162
+ )
3138
3163
 
3139
3164
  sig do
3140
3165
  override.returns(
@@ -3365,21 +3390,6 @@ module Revox
3365
3390
  :requested_callback_later,
3366
3391
  Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::Zoho::Outcome::TaggedSymbol
3367
3392
  )
3368
- REQUESTED_CALLBACK_NEW_NUMBER =
3369
- T.let(
3370
- :requested_callback_new_number,
3371
- Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::Zoho::Outcome::TaggedSymbol
3372
- )
3373
- DO_NOT_CONTACT =
3374
- T.let(
3375
- :do_not_contact,
3376
- Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::Zoho::Outcome::TaggedSymbol
3377
- )
3378
- AI_AVERSE =
3379
- T.let(
3380
- :ai_averse,
3381
- Revox::Models::PhoneNumberUpdateResponse::PhoneNumber::InboundAssistant::Zoho::Outcome::TaggedSymbol
3382
- )
3383
3393
  NONE =
3384
3394
  T.let(
3385
3395
  :none,
@@ -248,6 +248,11 @@ module Revox
248
248
  :elevenlabs,
249
249
  Revox::Models::VoiceListResponse::Voice::Provider::TaggedSymbol
250
250
  )
251
+ GRADIUM =
252
+ T.let(
253
+ :gradium,
254
+ Revox::Models::VoiceListResponse::Voice::Provider::TaggedSymbol
255
+ )
251
256
 
252
257
  sig do
253
258
  override.returns(
@@ -105,6 +105,8 @@ module Revox
105
105
  T.let(:cartesia, Revox::VoicePreviewParams::Provider::TaggedSymbol)
106
106
  ELEVENLABS =
107
107
  T.let(:elevenlabs, Revox::VoicePreviewParams::Provider::TaggedSymbol)
108
+ GRADIUM =
109
+ T.let(:gradium, Revox::VoicePreviewParams::Provider::TaggedSymbol)
108
110
 
109
111
  sig do
110
112
  override.returns(
@@ -50,6 +50,8 @@ module Revox
50
50
  T.let(:cartesia, Revox::VoiceRetrieveParams::Provider::TaggedSymbol)
51
51
  ELEVENLABS =
52
52
  T.let(:elevenlabs, Revox::VoiceRetrieveParams::Provider::TaggedSymbol)
53
+ GRADIUM =
54
+ T.let(:gradium, Revox::VoiceRetrieveParams::Provider::TaggedSymbol)
53
55
 
54
56
  sig do
55
57
  override.returns(
data/rbi/revox/models.rbi CHANGED
@@ -41,8 +41,6 @@ module Revox
41
41
 
42
42
  CampaignGetRowsParams = Revox::Models::CampaignGetRowsParams
43
43
 
44
- CampaignLaunchParams = Revox::Models::CampaignLaunchParams
45
-
46
44
  CampaignListParams = Revox::Models::CampaignListParams
47
45
 
48
46
  CampaignPauseParams = Revox::Models::CampaignPauseParams