sentdm 0.38.1 → 0.40.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 (281) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -0
  3. data/README.md +1 -1
  4. data/lib/sentdm/client.rb +3 -20
  5. data/lib/sentdm/internal/voice_agents_page.rb +115 -0
  6. data/lib/sentdm/models/call_event.rb +8 -6
  7. data/lib/sentdm/models/call_event_payload.rb +29 -9
  8. data/lib/sentdm/models/channels/voice_create_params.rb +23 -11
  9. data/lib/sentdm/models/channels/voice_number.rb +23 -1
  10. data/lib/sentdm/models/channels/voice_update_params.rb +12 -1
  11. data/lib/sentdm/models/message_send_params.rb +8 -1
  12. data/lib/sentdm/models/template.rb +6 -5
  13. data/lib/sentdm/models/template_body.rb +8 -8
  14. data/lib/sentdm/models/voice/agent_create_params.rb +142 -0
  15. data/lib/sentdm/models/{calls/participant_list_params.rb → voice/agent_delete_params.rb} +3 -3
  16. data/lib/sentdm/models/voice/agent_list_params.rb +38 -0
  17. data/lib/sentdm/models/{calls/participant_remove_all_params.rb → voice/agent_retrieve_params.rb} +3 -3
  18. data/lib/sentdm/models/voice/agent_rotate_secret_params.rb +34 -0
  19. data/lib/sentdm/models/voice/agent_update_params.rb +141 -0
  20. data/lib/sentdm/models/{calls/api_response_of_list_of_call_participant.rb → voice/api_response_of_call.rb} +7 -7
  21. data/lib/sentdm/models/voice/api_response_of_call_recordings.rb +45 -0
  22. data/lib/sentdm/models/voice/api_response_of_calls_list.rb +44 -0
  23. data/lib/sentdm/models/voice/api_response_of_voice_agent.rb +51 -0
  24. data/lib/sentdm/models/voice/api_response_of_voice_agent_secret.rb +45 -0
  25. data/lib/sentdm/models/voice/api_response_of_voice_agents_list.rb +48 -0
  26. data/lib/sentdm/models/voice/api_response_of_voice_catalogue.rb +49 -0
  27. data/lib/sentdm/models/{channels → voice}/api_response_of_voice_token.rb +5 -5
  28. data/lib/sentdm/models/voice/call.rb +241 -0
  29. data/lib/sentdm/models/{calls/participant_remove_params.rb → voice/call_hangup_params.rb} +8 -8
  30. data/lib/sentdm/models/voice/call_list_params.rb +103 -0
  31. data/lib/sentdm/models/voice/call_list_recordings_params.rb +28 -0
  32. data/lib/sentdm/models/voice/call_party.rb +33 -0
  33. data/lib/sentdm/models/{calls/participant_update_params.rb → voice/call_record_params.rb} +10 -17
  34. data/lib/sentdm/models/voice/call_recording.rb +40 -0
  35. data/lib/sentdm/models/voice/call_recordings.rb +26 -0
  36. data/lib/sentdm/models/voice/call_retrieve_params.rb +28 -0
  37. data/lib/sentdm/models/voice/call_timeline_entry.rb +28 -0
  38. data/lib/sentdm/models/voice/calls/api_response_of_list_of_call_participant.rb +51 -0
  39. data/lib/sentdm/models/voice/calls/call_participant.rb +62 -0
  40. data/lib/sentdm/models/voice/calls/call_participant_target.rb +32 -0
  41. data/lib/sentdm/models/voice/calls/participant_add_params.rb +68 -0
  42. data/lib/sentdm/models/voice/calls/participant_list_params.rb +30 -0
  43. data/lib/sentdm/models/voice/calls/participant_remove_all_params.rb +30 -0
  44. data/lib/sentdm/models/voice/calls/participant_remove_params.rb +36 -0
  45. data/lib/sentdm/models/voice/calls/participant_update_params.rb +66 -0
  46. data/lib/sentdm/models/voice/calls_list.rb +28 -0
  47. data/lib/sentdm/models/voice/catalogue_list_params.rb +22 -0
  48. data/lib/sentdm/models/{channels/voice_create_token_params.rb → voice/token_create_params.rb} +4 -4
  49. data/lib/sentdm/models/voice/voice_agent.rb +138 -0
  50. data/lib/sentdm/models/voice/voice_agent_audio.rb +19 -0
  51. data/lib/sentdm/models/voice/voice_agent_audio_spec.rb +20 -0
  52. data/lib/sentdm/models/voice/voice_agent_limits.rb +31 -0
  53. data/lib/sentdm/models/voice/voice_agent_limits_spec.rb +40 -0
  54. data/lib/sentdm/models/voice/voice_agent_party.rb +25 -0
  55. data/lib/sentdm/models/voice/voice_agent_party_spec.rb +28 -0
  56. data/lib/sentdm/models/voice/voice_agent_secret.rb +27 -0
  57. data/lib/sentdm/models/voice/voice_agent_speech.rb +31 -0
  58. data/lib/sentdm/models/voice/voice_agent_speech_spec.rb +40 -0
  59. data/lib/sentdm/models/voice/voice_agent_transcripts.rb +25 -0
  60. data/lib/sentdm/models/voice/voice_agent_transcripts_spec.rb +32 -0
  61. data/lib/sentdm/models/voice/voice_agents_list.rb +30 -0
  62. data/lib/sentdm/models/voice/voice_catalogue.rb +30 -0
  63. data/lib/sentdm/models/voice/voice_catalogue_voice.rb +43 -0
  64. data/lib/sentdm/models/{channels → voice}/voice_token.rb +9 -3
  65. data/lib/sentdm/models/webhook_create_params.rb +31 -5
  66. data/lib/sentdm/models/webhook_response.rb +66 -4
  67. data/lib/sentdm/models/webhook_update_params.rb +15 -3
  68. data/lib/sentdm/models.rb +2 -30
  69. data/lib/sentdm/resources/channels/voice.rb +43 -63
  70. data/lib/sentdm/resources/channels.rb +2 -2
  71. data/lib/sentdm/resources/profiles/campaigns.rb +3 -2
  72. data/lib/sentdm/resources/voice/agents.rb +319 -0
  73. data/lib/sentdm/resources/voice/calls/participants.rb +244 -0
  74. data/lib/sentdm/resources/voice/calls.rb +269 -0
  75. data/lib/sentdm/resources/voice/catalogue.rb +71 -0
  76. data/lib/sentdm/resources/voice/tokens.rb +86 -0
  77. data/lib/sentdm/resources/voice.rb +142 -0
  78. data/lib/sentdm/resources/webhooks.rb +43 -15
  79. data/lib/sentdm/version.rb +1 -1
  80. data/lib/sentdm.rb +59 -28
  81. data/rbi/sentdm/client.rbi +2 -19
  82. data/rbi/sentdm/internal/voice_agents_page.rbi +71 -0
  83. data/rbi/sentdm/models/call_event.rbi +14 -10
  84. data/rbi/sentdm/models/call_event_payload.rbi +34 -9
  85. data/rbi/sentdm/models/channels/voice_create_params.rbi +33 -17
  86. data/rbi/sentdm/models/channels/voice_number.rbi +31 -0
  87. data/rbi/sentdm/models/channels/voice_update_params.rbi +14 -0
  88. data/rbi/sentdm/models/message_send_params.rbi +16 -2
  89. data/rbi/sentdm/models/template.rbi +12 -10
  90. data/rbi/sentdm/models/template_body.rbi +12 -12
  91. data/rbi/sentdm/models/voice/agent_create_params.rbi +215 -0
  92. data/rbi/sentdm/models/{calls/participant_remove_all_params.rbi → voice/agent_delete_params.rbi} +3 -6
  93. data/rbi/sentdm/models/voice/agent_list_params.rbi +66 -0
  94. data/rbi/sentdm/models/voice/agent_retrieve_params.rbi +48 -0
  95. data/rbi/sentdm/models/{calls/participant_remove_params.rbi → voice/agent_rotate_secret_params.rbi} +11 -8
  96. data/rbi/sentdm/models/voice/agent_update_params.rbi +211 -0
  97. data/rbi/sentdm/models/voice/api_response_of_call.rbi +76 -0
  98. data/rbi/sentdm/models/voice/api_response_of_call_recordings.rbi +81 -0
  99. data/rbi/sentdm/models/{calls/api_response_of_list_of_call_participant.rbi → voice/api_response_of_calls_list.rbi} +12 -9
  100. data/rbi/sentdm/models/voice/api_response_of_voice_agent.rbi +85 -0
  101. data/rbi/sentdm/models/voice/api_response_of_voice_agent_secret.rbi +81 -0
  102. data/rbi/sentdm/models/voice/api_response_of_voice_agents_list.rbi +83 -0
  103. data/rbi/sentdm/models/voice/api_response_of_voice_catalogue.rbi +83 -0
  104. data/rbi/sentdm/models/{channels → voice}/api_response_of_voice_token.rbi +6 -8
  105. data/rbi/sentdm/models/voice/call.rbi +329 -0
  106. data/rbi/sentdm/models/voice/call_hangup_params.rbi +61 -0
  107. data/rbi/sentdm/models/voice/call_list_params.rbi +134 -0
  108. data/rbi/sentdm/models/{calls/participant_list_params.rbi → voice/call_list_recordings_params.rbi} +3 -3
  109. data/rbi/sentdm/models/voice/call_party.rbi +47 -0
  110. data/rbi/sentdm/models/{calls/participant_update_params.rbi → voice/call_record_params.rbi} +12 -21
  111. data/rbi/sentdm/models/voice/call_recording.rbi +63 -0
  112. data/rbi/sentdm/models/voice/call_recordings.rbi +49 -0
  113. data/rbi/sentdm/models/voice/call_retrieve_params.rbi +48 -0
  114. data/rbi/sentdm/models/voice/call_timeline_entry.rbi +44 -0
  115. data/rbi/sentdm/models/voice/calls/api_response_of_list_of_call_participant.rbi +84 -0
  116. data/rbi/sentdm/models/voice/calls/call_participant.rbi +97 -0
  117. data/rbi/sentdm/models/voice/calls/call_participant_target.rbi +49 -0
  118. data/rbi/sentdm/models/voice/calls/participant_add_params.rbi +104 -0
  119. data/rbi/sentdm/models/voice/calls/participant_list_params.rbi +53 -0
  120. data/rbi/sentdm/models/voice/calls/participant_remove_all_params.rbi +53 -0
  121. data/rbi/sentdm/models/voice/calls/participant_remove_params.rbi +63 -0
  122. data/rbi/sentdm/models/voice/calls/participant_update_params.rbi +96 -0
  123. data/rbi/sentdm/models/voice/calls_list.rbi +54 -0
  124. data/rbi/sentdm/models/voice/catalogue_list_params.rbi +40 -0
  125. data/rbi/sentdm/models/{channels/voice_create_token_params.rbi → voice/token_create_params.rbi} +3 -6
  126. data/rbi/sentdm/models/voice/voice_agent.rbi +196 -0
  127. data/rbi/sentdm/models/voice/voice_agent_audio.rbi +30 -0
  128. data/rbi/sentdm/models/voice/voice_agent_audio_spec.rbi +33 -0
  129. data/rbi/sentdm/models/voice/voice_agent_limits.rbi +57 -0
  130. data/rbi/sentdm/models/voice/voice_agent_limits_spec.rbi +62 -0
  131. data/rbi/sentdm/models/voice/voice_agent_party.rbi +36 -0
  132. data/rbi/sentdm/models/voice/voice_agent_party_spec.rbi +45 -0
  133. data/rbi/sentdm/models/voice/voice_agent_secret.rbi +37 -0
  134. data/rbi/sentdm/models/voice/voice_agent_speech.rbi +48 -0
  135. data/rbi/sentdm/models/voice/voice_agent_speech_spec.rbi +62 -0
  136. data/rbi/sentdm/models/voice/voice_agent_transcripts.rbi +43 -0
  137. data/rbi/sentdm/models/voice/voice_agent_transcripts_spec.rbi +51 -0
  138. data/rbi/sentdm/models/voice/voice_agents_list.rbi +55 -0
  139. data/rbi/sentdm/models/voice/voice_catalogue.rbi +59 -0
  140. data/rbi/sentdm/models/voice/voice_catalogue_voice.rbi +75 -0
  141. data/rbi/sentdm/models/{channels → voice}/voice_token.rbi +8 -4
  142. data/rbi/sentdm/models/webhook_create_params.rbi +41 -3
  143. data/rbi/sentdm/models/webhook_response.rbi +112 -3
  144. data/rbi/sentdm/models/webhook_update_params.rbi +18 -3
  145. data/rbi/sentdm/models.rbi +2 -30
  146. data/rbi/sentdm/resources/channels/voice.rbi +57 -67
  147. data/rbi/sentdm/resources/channels.rbi +2 -2
  148. data/rbi/sentdm/resources/messages.rbi +8 -1
  149. data/rbi/sentdm/resources/profiles/campaigns.rbi +3 -2
  150. data/rbi/sentdm/resources/voice/agents.rbi +316 -0
  151. data/rbi/sentdm/resources/voice/calls/participants.rbi +212 -0
  152. data/rbi/sentdm/resources/voice/calls.rbi +244 -0
  153. data/rbi/sentdm/resources/voice/catalogue.rbi +59 -0
  154. data/rbi/sentdm/resources/voice/tokens.rbi +84 -0
  155. data/rbi/sentdm/resources/voice.rbi +136 -0
  156. data/rbi/sentdm/resources/webhooks.rbi +56 -16
  157. data/sig/sentdm/client.rbs +1 -1
  158. data/sig/sentdm/internal/voice_agents_page.rbs +41 -0
  159. data/sig/sentdm/models/call_event_payload.rbs +12 -0
  160. data/sig/sentdm/models/channels/voice_create_params.rbs +9 -4
  161. data/sig/sentdm/models/channels/voice_number.rbs +12 -0
  162. data/sig/sentdm/models/channels/voice_update_params.rbs +5 -0
  163. data/sig/sentdm/models/voice/agent_create_params.rbs +99 -0
  164. data/sig/sentdm/models/{calls/participant_remove_all_params.rbs → voice/agent_delete_params.rbs} +3 -3
  165. data/sig/sentdm/models/voice/agent_list_params.rbs +40 -0
  166. data/sig/sentdm/models/{calls/participant_list_params.rbs → voice/agent_retrieve_params.rbs} +3 -3
  167. data/sig/sentdm/models/{calls/participant_remove_params.rbs → voice/agent_rotate_secret_params.rbs} +8 -8
  168. data/sig/sentdm/models/voice/agent_update_params.rbs +108 -0
  169. data/sig/sentdm/models/{calls/api_response_of_list_of_call_participant.rbs → voice/api_response_of_call.rbs} +7 -7
  170. data/sig/sentdm/models/voice/api_response_of_call_recordings.rbs +41 -0
  171. data/sig/sentdm/models/voice/api_response_of_calls_list.rbs +41 -0
  172. data/sig/sentdm/models/voice/api_response_of_voice_agent.rbs +41 -0
  173. data/sig/sentdm/models/voice/api_response_of_voice_agent_secret.rbs +41 -0
  174. data/sig/sentdm/models/voice/api_response_of_voice_agents_list.rbs +41 -0
  175. data/sig/sentdm/models/voice/api_response_of_voice_catalogue.rbs +41 -0
  176. data/sig/sentdm/models/{channels → voice}/api_response_of_voice_token.rbs +5 -5
  177. data/sig/sentdm/models/voice/call.rbs +175 -0
  178. data/sig/sentdm/models/voice/call_hangup_params.rbs +40 -0
  179. data/sig/sentdm/models/voice/call_list_params.rbs +79 -0
  180. data/sig/sentdm/models/voice/call_list_recordings_params.rbs +32 -0
  181. data/sig/sentdm/models/voice/call_party.rbs +19 -0
  182. data/sig/sentdm/models/{calls/participant_update_params.rbs → voice/call_record_params.rbs} +8 -13
  183. data/sig/sentdm/models/voice/call_recording.rbs +34 -0
  184. data/sig/sentdm/models/voice/call_recordings.rbs +22 -0
  185. data/sig/sentdm/models/voice/call_retrieve_params.rbs +32 -0
  186. data/sig/sentdm/models/voice/call_timeline_entry.rbs +21 -0
  187. data/sig/sentdm/models/voice/calls/api_response_of_list_of_call_participant.rbs +43 -0
  188. data/sig/sentdm/models/voice/calls/call_participant.rbs +54 -0
  189. data/sig/sentdm/models/voice/calls/call_participant_target.rbs +25 -0
  190. data/sig/sentdm/models/voice/calls/participant_add_params.rbs +65 -0
  191. data/sig/sentdm/models/voice/calls/participant_list_params.rbs +34 -0
  192. data/sig/sentdm/models/voice/calls/participant_remove_all_params.rbs +36 -0
  193. data/sig/sentdm/models/voice/calls/participant_remove_params.rbs +42 -0
  194. data/sig/sentdm/models/voice/calls/participant_update_params.rbs +63 -0
  195. data/sig/sentdm/models/voice/calls_list.rbs +33 -0
  196. data/sig/sentdm/models/voice/catalogue_list_params.rbs +27 -0
  197. data/sig/sentdm/models/{channels/voice_create_token_params.rbs → voice/token_create_params.rbs} +3 -3
  198. data/sig/sentdm/models/voice/voice_agent.rbs +116 -0
  199. data/sig/sentdm/models/voice/voice_agent_audio.rbs +19 -0
  200. data/sig/sentdm/models/voice/voice_agent_audio_spec.rbs +17 -0
  201. data/sig/sentdm/models/voice/voice_agent_limits.rbs +38 -0
  202. data/sig/sentdm/models/voice/voice_agent_limits_spec.rbs +34 -0
  203. data/sig/sentdm/models/{calls/call_participant_target.rbs → voice/voice_agent_party.rbs} +4 -4
  204. data/sig/sentdm/models/voice/voice_agent_party_spec.rbs +19 -0
  205. data/sig/sentdm/models/voice/voice_agent_secret.rbs +19 -0
  206. data/sig/sentdm/models/voice/voice_agent_speech.rbs +32 -0
  207. data/sig/sentdm/models/voice/voice_agent_speech_spec.rbs +26 -0
  208. data/sig/sentdm/models/voice/voice_agent_transcripts.rbs +23 -0
  209. data/sig/sentdm/models/voice/voice_agent_transcripts_spec.rbs +20 -0
  210. data/sig/sentdm/models/voice/voice_agents_list.rbs +35 -0
  211. data/sig/sentdm/models/voice/voice_catalogue.rbs +35 -0
  212. data/sig/sentdm/models/voice/voice_catalogue_voice.rbs +42 -0
  213. data/sig/sentdm/models/{channels → voice}/voice_token.rbs +3 -1
  214. data/sig/sentdm/models/webhook_create_params.rbs +12 -0
  215. data/sig/sentdm/models/webhook_response.rbs +46 -3
  216. data/sig/sentdm/models/webhook_update_params.rbs +5 -0
  217. data/sig/sentdm/models.rbs +2 -30
  218. data/sig/sentdm/resources/channels/voice.rbs +3 -11
  219. data/sig/sentdm/resources/voice/agents.rbs +74 -0
  220. data/sig/sentdm/resources/voice/calls/participants.rbs +52 -0
  221. data/sig/sentdm/resources/{calls/participants.rbs → voice/calls.rbs} +25 -21
  222. data/sig/sentdm/resources/voice/catalogue.rbs +14 -0
  223. data/sig/sentdm/resources/voice/tokens.rbs +19 -0
  224. data/sig/sentdm/resources/voice.rbs +15 -0
  225. data/sig/sentdm/resources/webhooks.rbs +3 -0
  226. metadata +176 -83
  227. data/lib/sentdm/models/api_response_of_call.rb +0 -43
  228. data/lib/sentdm/models/api_response_of_call_recordings.rb +0 -43
  229. data/lib/sentdm/models/api_response_of_calls_list.rb +0 -42
  230. data/lib/sentdm/models/call.rb +0 -134
  231. data/lib/sentdm/models/call_hangup_params.rb +0 -32
  232. data/lib/sentdm/models/call_list_params.rb +0 -83
  233. data/lib/sentdm/models/call_list_recordings_params.rb +0 -26
  234. data/lib/sentdm/models/call_party.rb +0 -31
  235. data/lib/sentdm/models/call_record_params.rb +0 -55
  236. data/lib/sentdm/models/call_recording.rb +0 -38
  237. data/lib/sentdm/models/call_recordings.rb +0 -24
  238. data/lib/sentdm/models/call_retrieve_params.rb +0 -26
  239. data/lib/sentdm/models/call_timeline_entry.rb +0 -26
  240. data/lib/sentdm/models/calls/call_participant.rb +0 -60
  241. data/lib/sentdm/models/calls/call_participant_target.rb +0 -30
  242. data/lib/sentdm/models/calls/participant_add_params.rb +0 -66
  243. data/lib/sentdm/models/calls_list.rb +0 -26
  244. data/lib/sentdm/resources/calls/participants.rb +0 -231
  245. data/lib/sentdm/resources/calls.rb +0 -236
  246. data/rbi/sentdm/models/api_response_of_call.rbi +0 -74
  247. data/rbi/sentdm/models/api_response_of_call_recordings.rbi +0 -74
  248. data/rbi/sentdm/models/api_response_of_calls_list.rbi +0 -74
  249. data/rbi/sentdm/models/call.rbi +0 -179
  250. data/rbi/sentdm/models/call_hangup_params.rbi +0 -59
  251. data/rbi/sentdm/models/call_list_params.rbi +0 -112
  252. data/rbi/sentdm/models/call_list_recordings_params.rbi +0 -46
  253. data/rbi/sentdm/models/call_party.rbi +0 -41
  254. data/rbi/sentdm/models/call_record_params.rbi +0 -83
  255. data/rbi/sentdm/models/call_recording.rbi +0 -59
  256. data/rbi/sentdm/models/call_recordings.rbi +0 -39
  257. data/rbi/sentdm/models/call_retrieve_params.rbi +0 -46
  258. data/rbi/sentdm/models/call_timeline_entry.rbi +0 -40
  259. data/rbi/sentdm/models/calls/call_participant.rbi +0 -92
  260. data/rbi/sentdm/models/calls/call_participant_target.rbi +0 -47
  261. data/rbi/sentdm/models/calls/participant_add_params.rbi +0 -98
  262. data/rbi/sentdm/models/calls_list.rbi +0 -47
  263. data/rbi/sentdm/resources/calls/participants.rbi +0 -199
  264. data/rbi/sentdm/resources/calls.rbi +0 -207
  265. data/sig/sentdm/models/api_response_of_call.rbs +0 -39
  266. data/sig/sentdm/models/api_response_of_call_recordings.rbs +0 -39
  267. data/sig/sentdm/models/api_response_of_calls_list.rbs +0 -39
  268. data/sig/sentdm/models/call.rbs +0 -101
  269. data/sig/sentdm/models/call_hangup_params.rbs +0 -38
  270. data/sig/sentdm/models/call_list_params.rbs +0 -67
  271. data/sig/sentdm/models/call_list_recordings_params.rbs +0 -30
  272. data/sig/sentdm/models/call_party.rbs +0 -17
  273. data/sig/sentdm/models/call_record_params.rbs +0 -54
  274. data/sig/sentdm/models/call_recording.rbs +0 -32
  275. data/sig/sentdm/models/call_recordings.rbs +0 -17
  276. data/sig/sentdm/models/call_retrieve_params.rbs +0 -30
  277. data/sig/sentdm/models/call_timeline_entry.rbs +0 -19
  278. data/sig/sentdm/models/calls/call_participant.rbs +0 -52
  279. data/sig/sentdm/models/calls/participant_add_params.rbs +0 -63
  280. data/sig/sentdm/models/calls_list.rbs +0 -26
  281. data/sig/sentdm/resources/calls.rbs +0 -50
@@ -20,6 +20,10 @@ module Sentdm
20
20
  sig { params(account_id: String).void }
21
21
  attr_writer :account_id
22
22
 
23
+ # The voice agent that answers the call, agent\_…. Only on an agent call.
24
+ sig { returns(T.nilable(String)) }
25
+ attr_accessor :agent_id
26
+
23
27
  # Always voice.
24
28
  sig { returns(T.nilable(String)) }
25
29
  attr_reader :channel
@@ -31,6 +35,14 @@ module Sentdm
31
35
  sig { returns(T.nilable(Integer)) }
32
36
  attr_accessor :duration_seconds
33
37
 
38
+ # inapp, a call routed by the number's callback URL, or agent, a call one of the
39
+ # account's voice agents answers. The same value GET /v3/voice/calls returns.
40
+ sig { returns(T.nilable(String)) }
41
+ attr_reader :mode
42
+
43
+ sig { params(mode: String).void }
44
+ attr_writer :mode
45
+
34
46
  # The customer number that owns the call, in E.164 format.
35
47
  sig { returns(T.nilable(String)) }
36
48
  attr_reader :number
@@ -48,8 +60,9 @@ module Sentdm
48
60
  sig { returns(T.nilable(String)) }
49
61
  attr_accessor :reason
50
62
 
51
- # The recording that became available, the same id GET /v3/calls/{id}/recordings
52
- # lists it under. Only on call.recording_ready, which is sent once per recording.
63
+ # The recording that became available, the same id GET
64
+ # /v3/voice/calls/{id}/recordings lists it under. Only on call.recording_ready,
65
+ # which is sent once per recording.
53
66
  sig { returns(T.nilable(String)) }
54
67
  attr_accessor :recording_id
55
68
 
@@ -60,15 +73,17 @@ module Sentdm
60
73
  sig { params(updated_at: String).void }
61
74
  attr_writer :updated_at
62
75
 
63
- # Body of a call.initiated, call.answered, call.completed, call.failed or
64
- # call.recording_ready event. Which of them occurred is the envelope's event.
76
+ # Body of a call.initiated, call.answered, call.agent_connected, call.completed,
77
+ # call.failed or call.recording_ready event. Which of them occurred is the
78
+ # envelope's event.
65
79
  #
66
80
  # Shaped like the message, inbound, template and channel payloads: account_id
67
81
  # names the account the event is about, channel names the channel, and updated_at
68
82
  # is when the change happened on the call, in the same yyyy-MM-ddTHH:mm:ssZ form.
69
- # duration_seconds and price are added on call.completed, reason on call.failed
70
- # and recording_id on call.recording_ready; each is omitted rather than sent as
71
- # null when it does not apply.
83
+ # Every event says how the call is handled in mode, and an agent call names its
84
+ # agent in agent_id. duration_seconds and price are added on call.completed,
85
+ # reason on call.failed and recording_id on call.recording_ready; each is omitted
86
+ # rather than sent as null when it does not apply.
72
87
  #
73
88
  # Casing is snake_case because these ride the same webhook stream customers
74
89
  # already parse message_id from; the question/answer contract is a separate
@@ -78,8 +93,10 @@ module Sentdm
78
93
  params(
79
94
  call_id: String,
80
95
  account_id: String,
96
+ agent_id: T.nilable(String),
81
97
  channel: String,
82
98
  duration_seconds: T.nilable(Integer),
99
+ mode: String,
83
100
  number: String,
84
101
  price: T.nilable(Float),
85
102
  reason: T.nilable(String),
@@ -93,10 +110,15 @@ module Sentdm
93
110
  # The account the call belongs to: the key's own customer, or the sender profile
94
111
  # it acted as.
95
112
  account_id: nil,
113
+ # The voice agent that answers the call, agent\_…. Only on an agent call.
114
+ agent_id: nil,
96
115
  # Always voice.
97
116
  channel: nil,
98
117
  # How long the call lasted. Only on call.completed.
99
118
  duration_seconds: nil,
119
+ # inapp, a call routed by the number's callback URL, or agent, a call one of the
120
+ # account's voice agents answers. The same value GET /v3/voice/calls returns.
121
+ mode: nil,
100
122
  # The customer number that owns the call, in E.164 format.
101
123
  number: nil,
102
124
  # What the call was charged. Only on call.completed, and omitted there until
@@ -105,8 +127,9 @@ module Sentdm
105
127
  # The machine-readable reason the call did not complete. Only on call.failed, and
106
128
  # omitted when no reason was recorded.
107
129
  reason: nil,
108
- # The recording that became available, the same id GET /v3/calls/{id}/recordings
109
- # lists it under. Only on call.recording_ready, which is sent once per recording.
130
+ # The recording that became available, the same id GET
131
+ # /v3/voice/calls/{id}/recordings lists it under. Only on call.recording_ready,
132
+ # which is sent once per recording.
110
133
  recording_id: nil,
111
134
  # When the change happened on the call, as opposed to when the event was emitted.
112
135
  updated_at: nil
@@ -118,8 +141,10 @@ module Sentdm
118
141
  {
119
142
  call_id: String,
120
143
  account_id: String,
144
+ agent_id: T.nilable(String),
121
145
  channel: String,
122
146
  duration_seconds: T.nilable(Integer),
147
+ mode: String,
123
148
  number: String,
124
149
  price: T.nilable(Float),
125
150
  reason: T.nilable(String),
@@ -15,14 +15,13 @@ module Sentdm
15
15
  )
16
16
  end
17
17
 
18
- # Where Sent asks what to do with each call on this number: an absolute HTTP or
19
- # HTTPS URL on a public host. A signed question is POSTed here when a call arrives
20
- # or a caller presses a key, and the answer decides the call. Every question is
21
- # signed with the callback_secret the response returns, the same way your webhooks
22
- # are signed. Turning the number on again with a different URL replaces it and
23
- # keeps the secret.
24
- sig { returns(String) }
25
- attr_accessor :callback_url
18
+ # One of your voice agents (GET /v3/voice/agents), such as
19
+ # agent_9f2ab000-0000-4000-8000-000000000001, to answer calls to this number. It
20
+ # wins over callback_url for calls to the number, and both may be sent; calls your
21
+ # app places from the number still follow your app. Send it instead of
22
+ # callback_url for a number only an agent answers.
23
+ sig { returns(T.nilable(String)) }
24
+ attr_accessor :agent_id
26
25
 
27
26
  # The US area code a new number should be in, as 212. Only for a request that
28
27
  # leaves number out — sending both says two different things about which number to
@@ -31,6 +30,15 @@ module Sentdm
31
30
  sig { returns(T.nilable(String)) }
32
31
  attr_accessor :area_code
33
32
 
33
+ # Where Sent asks what to do with each call on this number: an absolute HTTP or
34
+ # HTTPS URL on a public host. A signed question is POSTed here when a call arrives
35
+ # or a caller presses a key, and the answer decides the call. Every question is
36
+ # signed with the callback_secret the response returns, the same way your webhooks
37
+ # are signed. Turning the number on again with a different URL replaces it and
38
+ # keeps the secret. Required unless agent_id is sent.
39
+ sig { returns(T.nilable(String)) }
40
+ attr_accessor :callback_url
41
+
34
42
  # Make this the line app-originated calls are placed from when a voice token names
35
43
  # no number. Omit it and your first voice number takes that role; a later one
36
44
  # leaves it where it is.
@@ -65,8 +73,9 @@ module Sentdm
65
73
 
66
74
  sig do
67
75
  params(
68
- callback_url: String,
76
+ agent_id: T.nilable(String),
69
77
  area_code: T.nilable(String),
78
+ callback_url: T.nilable(String),
70
79
  default_for_app_calls: T.nilable(T::Boolean),
71
80
  number: T.nilable(String),
72
81
  sandbox: T::Boolean,
@@ -76,18 +85,24 @@ module Sentdm
76
85
  ).returns(T.attached_class)
77
86
  end
78
87
  def self.new(
79
- # Where Sent asks what to do with each call on this number: an absolute HTTP or
80
- # HTTPS URL on a public host. A signed question is POSTed here when a call arrives
81
- # or a caller presses a key, and the answer decides the call. Every question is
82
- # signed with the callback_secret the response returns, the same way your webhooks
83
- # are signed. Turning the number on again with a different URL replaces it and
84
- # keeps the secret.
85
- callback_url:,
88
+ # One of your voice agents (GET /v3/voice/agents), such as
89
+ # agent_9f2ab000-0000-4000-8000-000000000001, to answer calls to this number. It
90
+ # wins over callback_url for calls to the number, and both may be sent; calls your
91
+ # app places from the number still follow your app. Send it instead of
92
+ # callback_url for a number only an agent answers.
93
+ agent_id: nil,
86
94
  # The US area code a new number should be in, as 212. Only for a request that
87
95
  # leaves number out — sending both says two different things about which number to
88
96
  # use, and is refused. Omit it too and the number comes from anywhere in the
89
97
  # country.
90
98
  area_code: nil,
99
+ # Where Sent asks what to do with each call on this number: an absolute HTTP or
100
+ # HTTPS URL on a public host. A signed question is POSTed here when a call arrives
101
+ # or a caller presses a key, and the answer decides the call. Every question is
102
+ # signed with the callback_secret the response returns, the same way your webhooks
103
+ # are signed. Turning the number on again with a different URL replaces it and
104
+ # keeps the secret. Required unless agent_id is sent.
105
+ callback_url: nil,
91
106
  # Make this the line app-originated calls are placed from when a voice token names
92
107
  # no number. Omit it and your first voice number takes that role; a later one
93
108
  # leaves it where it is.
@@ -108,8 +123,9 @@ module Sentdm
108
123
  sig do
109
124
  override.returns(
110
125
  {
111
- callback_url: String,
126
+ agent_id: T.nilable(String),
112
127
  area_code: T.nilable(String),
128
+ callback_url: T.nilable(String),
113
129
  default_for_app_calls: T.nilable(T::Boolean),
114
130
  number: T.nilable(String),
115
131
  sandbox: T::Boolean,
@@ -9,6 +9,13 @@ module Sentdm
9
9
  T.any(Sentdm::Channels::VoiceNumber, Sentdm::Internal::AnyHash)
10
10
  end
11
11
 
12
+ # The voice agent calls to this number go to, such as
13
+ # agent_9f2ab000-0000-4000-8000-000000000001. It wins over callback_url for calls
14
+ # to the number; calls your app places from the number still follow your app. Null
15
+ # when no agent answers the number.
16
+ sig { returns(T.nilable(String)) }
17
+ attr_accessor :agent_id
18
+
12
19
  # Where Sent asks what to do with each call on this number: a signed question is
13
20
  # POSTed here when a call arrives or a caller presses a key, and the answer
14
21
  # decides the call. The signing secret is not on this read; it is shown when voice
@@ -38,6 +45,16 @@ module Sentdm
38
45
  sig { params(number: String).void }
39
46
  attr_writer :number
40
47
 
48
+ # Who answers calls to this number: agent, the voice agent in agent_id;
49
+ # agent_pending, that agent once the number has finished moving to it, with calls
50
+ # possibly unanswered until then; callback, your callback_url; or none, in which
51
+ # case calls to it are declined.
52
+ sig { returns(T.nilable(String)) }
53
+ attr_reader :routes_to
54
+
55
+ sig { params(routes_to: String).void }
56
+ attr_writer :routes_to
57
+
41
58
  # ACTIVE while the number carries calls, INACTIVE once it was turned off. Nothing
42
59
  # provisions: a number the customer holds can carry calls the moment voice is
43
60
  # turned on for it.
@@ -56,15 +73,22 @@ module Sentdm
56
73
  # One number the profile carries phone calls on.
57
74
  sig do
58
75
  params(
76
+ agent_id: T.nilable(String),
59
77
  callback_url: T.nilable(String),
60
78
  created_at: Time,
61
79
  default_for_app_calls: T::Boolean,
62
80
  number: String,
81
+ routes_to: String,
63
82
  status: String,
64
83
  updated_at: Time
65
84
  ).returns(T.attached_class)
66
85
  end
67
86
  def self.new(
87
+ # The voice agent calls to this number go to, such as
88
+ # agent_9f2ab000-0000-4000-8000-000000000001. It wins over callback_url for calls
89
+ # to the number; calls your app places from the number still follow your app. Null
90
+ # when no agent answers the number.
91
+ agent_id: nil,
68
92
  # Where Sent asks what to do with each call on this number: a signed question is
69
93
  # POSTed here when a call arrives or a caller presses a key, and the answer
70
94
  # decides the call. The signing secret is not on this read; it is shown when voice
@@ -77,6 +101,11 @@ module Sentdm
77
101
  default_for_app_calls: nil,
78
102
  # The number, in E.164.
79
103
  number: nil,
104
+ # Who answers calls to this number: agent, the voice agent in agent_id;
105
+ # agent_pending, that agent once the number has finished moving to it, with calls
106
+ # possibly unanswered until then; callback, your callback_url; or none, in which
107
+ # case calls to it are declined.
108
+ routes_to: nil,
80
109
  # ACTIVE while the number carries calls, INACTIVE once it was turned off. Nothing
81
110
  # provisions: a number the customer holds can carry calls the moment voice is
82
111
  # turned on for it.
@@ -88,10 +117,12 @@ module Sentdm
88
117
  sig do
89
118
  override.returns(
90
119
  {
120
+ agent_id: T.nilable(String),
91
121
  callback_url: T.nilable(String),
92
122
  created_at: Time,
93
123
  default_for_app_calls: T::Boolean,
94
124
  number: String,
125
+ routes_to: String,
95
126
  status: String,
96
127
  updated_at: Time
97
128
  }
@@ -18,6 +18,13 @@ module Sentdm
18
18
  sig { returns(String) }
19
19
  attr_accessor :number
20
20
 
21
+ # One of your voice agents, such as agent_9f2ab000-0000-4000-8000-000000000001, to
22
+ # answer calls to the number, or null to unbind it so the callback URL answers
23
+ # them again. The agent wins over callback_url for calls to the number; calls your
24
+ # app places from it still follow your app.
25
+ sig { returns(T.nilable(String)) }
26
+ attr_accessor :agent_id
27
+
21
28
  # A new callback URL for the number, active or not: an absolute HTTP or HTTPS URL
22
29
  # on a public host, where Sent asks what to do with each call. The signing secret
23
30
  # is kept.
@@ -63,6 +70,7 @@ module Sentdm
63
70
  sig do
64
71
  params(
65
72
  number: String,
73
+ agent_id: T.nilable(String),
66
74
  callback_url: T.nilable(String),
67
75
  default_for_app_calls: T.nilable(T::Boolean),
68
76
  sandbox: T::Boolean,
@@ -75,6 +83,11 @@ module Sentdm
75
83
  end
76
84
  def self.new(
77
85
  number:,
86
+ # One of your voice agents, such as agent_9f2ab000-0000-4000-8000-000000000001, to
87
+ # answer calls to the number, or null to unbind it so the callback URL answers
88
+ # them again. The agent wins over callback_url for calls to the number; calls your
89
+ # app places from it still follow your app.
90
+ agent_id: nil,
78
91
  # A new callback URL for the number, active or not: an absolute HTTP or HTTPS URL
79
92
  # on a public host, where Sent asks what to do with each call. The signing secret
80
93
  # is kept.
@@ -100,6 +113,7 @@ module Sentdm
100
113
  override.returns(
101
114
  {
102
115
  number: String,
116
+ agent_id: T.nilable(String),
103
117
  callback_url: T.nilable(String),
104
118
  default_for_app_calls: T.nilable(T::Boolean),
105
119
  sandbox: T::Boolean,
@@ -31,6 +31,11 @@ module Sentdm
31
31
  # itself is unchanged: the same rules are scored and ranked the same way, with
32
32
  # routes pinned to numbers you did not list removed from the running.
33
33
  #
34
+ # Each channel's list is independent: an sms list does not restrict MMS. To choose
35
+ # the numbers a message may go out from as MMS, name them under mms. MMS sends
36
+ # from your SMS numbers, so an mms list may name any of your active SMS numbers
37
+ # whose market carries MMS — the ones listed under mms in your channels.
38
+ #
34
39
  # Every number must be an active sender on your account. The request itself is
35
40
  # still accepted (202) if one is not — like every other send-time rule, that is
36
41
  # decided per message, so each affected message is recorded BLOCKED with error
@@ -53,7 +58,9 @@ module Sentdm
53
58
  #
54
59
  # Their presence is also what makes a message eligible for MMS on an auto-detect
55
60
  # send: a message with nothing attached is delivered as SMS, because an MMS with
56
- # no media is a more expensive text message.
61
+ # no media is a more expensive text message. For the same reason a send that names
62
+ # mms in channel with nothing attached, here or on the template, is refused with
63
+ # a 400.
57
64
  #
58
65
  # The recipient's carrier fetches each URL after the send is accepted, so it must
59
66
  # stay publicly reachable — a link that expires, or one behind auth, arrives as a
@@ -164,6 +171,11 @@ module Sentdm
164
171
  # itself is unchanged: the same rules are scored and ranked the same way, with
165
172
  # routes pinned to numbers you did not list removed from the running.
166
173
  #
174
+ # Each channel's list is independent: an sms list does not restrict MMS. To choose
175
+ # the numbers a message may go out from as MMS, name them under mms. MMS sends
176
+ # from your SMS numbers, so an mms list may name any of your active SMS numbers
177
+ # whose market carries MMS — the ones listed under mms in your channels.
178
+ #
167
179
  # Every number must be an active sender on your account. The request itself is
168
180
  # still accepted (202) if one is not — like every other send-time rule, that is
169
181
  # decided per message, so each affected message is recorded BLOCKED with error
@@ -178,7 +190,9 @@ module Sentdm
178
190
  #
179
191
  # Their presence is also what makes a message eligible for MMS on an auto-detect
180
192
  # send: a message with nothing attached is delivered as SMS, because an MMS with
181
- # no media is a more expensive text message.
193
+ # no media is a more expensive text message. For the same reason a send that names
194
+ # mms in channel with nothing attached, here or on the template, is refused with
195
+ # a 400.
182
196
  #
183
197
  # The recipient's carrier fetches each URL after the send is accepted, so it must
184
198
  # stay publicly reachable — a link that expires, or one behind auth, arrives as a
@@ -41,17 +41,18 @@ module Sentdm
41
41
  attr_writer :category
42
42
 
43
43
  # The channels this template's definition can render on, in canonical order: sms,
44
- # whatsapp, rcs.
44
+ # whatsapp, rcs, mms.
45
45
  #
46
46
  # Derived from the definition's body, mirroring each channel's send-time fallback
47
47
  # chain, so a channel is listed only when a real body would be produced for it:
48
48
  # SMS reads sms ?? multiChannel, WhatsApp reads whatsapp ?? multiChannel, and RCS
49
- # reads rcs ?? multiChannel ?? sms. A multiChannel body therefore reports all
50
- # three, and the extra SMS fallback on RCS is why an sms/whatsapp pair reports RCS
51
- # too.
49
+ # and MMS read rcs ?? multiChannel ?? sms and mms ?? multiChannel ?? sms. A
50
+ # multiChannel body therefore reports all four, and the extra SMS fallback is why
51
+ # an sms/whatsapp pair reports RCS and MMS too.
52
52
  #
53
53
  # This says what the content can render on, not what may be sent: sending also
54
- # needs the template approved for that channel.
54
+ # needs the template approved for that channel, and MMS needs an attachment, from
55
+ # media_urls or the template's mms body.
55
56
  sig { returns(T.nilable(T::Array[String])) }
56
57
  attr_accessor :channels
57
58
 
@@ -138,17 +139,18 @@ module Sentdm
138
139
  # Template category: MARKETING, UTILITY, AUTHENTICATION
139
140
  category: nil,
140
141
  # The channels this template's definition can render on, in canonical order: sms,
141
- # whatsapp, rcs.
142
+ # whatsapp, rcs, mms.
142
143
  #
143
144
  # Derived from the definition's body, mirroring each channel's send-time fallback
144
145
  # chain, so a channel is listed only when a real body would be produced for it:
145
146
  # SMS reads sms ?? multiChannel, WhatsApp reads whatsapp ?? multiChannel, and RCS
146
- # reads rcs ?? multiChannel ?? sms. A multiChannel body therefore reports all
147
- # three, and the extra SMS fallback on RCS is why an sms/whatsapp pair reports RCS
148
- # too.
147
+ # and MMS read rcs ?? multiChannel ?? sms and mms ?? multiChannel ?? sms. A
148
+ # multiChannel body therefore reports all four, and the extra SMS fallback is why
149
+ # an sms/whatsapp pair reports RCS and MMS too.
149
150
  #
150
151
  # This says what the content can render on, not what may be sent: sending also
151
- # needs the template approved for that channel.
152
+ # needs the template approved for that channel, and MMS needs an attachment, from
153
+ # media_urls or the template's mms body.
152
154
  channels: nil,
153
155
  # When the template was created
154
156
  created_at: nil,
@@ -9,10 +9,10 @@ module Sentdm
9
9
  # MMS-specific content — subject, text and attachments.
10
10
  #
11
11
  # Like Rcs, an override that cannot stand on its own: a template still needs a
12
- # MultiChannel body or the Sms + Whatsapp pair to be deliverable at all. Unlike
13
- # Rcs, it has no fallback at send time — MMS with no media is a more expensive
14
- # SMS, so a template without this slot is deliberately not MMS-capable and never
15
- # produces an MMS route candidate.
12
+ # MultiChannel body or the Sms + Whatsapp pair to be deliverable at all. Without
13
+ # this slot MMS renders the shared or SMS body, so it is only needed for
14
+ # MMS-specific copy, a subject or attachments. When present it replaces that body
15
+ # on MMS rather than adding to it.
16
16
  sig { returns(T.nilable(Sentdm::TemplateBody::Mms)) }
17
17
  attr_reader :mms
18
18
 
@@ -78,10 +78,10 @@ module Sentdm
78
78
  # MMS-specific content — subject, text and attachments.
79
79
  #
80
80
  # Like Rcs, an override that cannot stand on its own: a template still needs a
81
- # MultiChannel body or the Sms + Whatsapp pair to be deliverable at all. Unlike
82
- # Rcs, it has no fallback at send time — MMS with no media is a more expensive
83
- # SMS, so a template without this slot is deliberately not MMS-capable and never
84
- # produces an MMS route candidate.
81
+ # MultiChannel body or the Sms + Whatsapp pair to be deliverable at all. Without
82
+ # this slot MMS renders the shared or SMS body, so it is only needed for
83
+ # MMS-specific copy, a subject or attachments. When present it replaces that body
84
+ # on MMS rather than adding to it.
85
85
  mms: nil,
86
86
  # The shared body, used for every channel. One half of the choice described above.
87
87
  multi_channel: nil,
@@ -134,10 +134,10 @@ module Sentdm
134
134
  # MMS-specific content — subject, text and attachments.
135
135
  #
136
136
  # Like Rcs, an override that cannot stand on its own: a template still needs a
137
- # MultiChannel body or the Sms + Whatsapp pair to be deliverable at all. Unlike
138
- # Rcs, it has no fallback at send time — MMS with no media is a more expensive
139
- # SMS, so a template without this slot is deliberately not MMS-capable and never
140
- # produces an MMS route candidate.
137
+ # MultiChannel body or the Sms + Whatsapp pair to be deliverable at all. Without
138
+ # this slot MMS renders the shared or SMS body, so it is only needed for
139
+ # MMS-specific copy, a subject or attachments. When present it replaces that body
140
+ # on MMS rather than adding to it.
141
141
  sig do
142
142
  params(
143
143
  media: