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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -0
- data/README.md +1 -1
- data/lib/sentdm/client.rb +3 -20
- data/lib/sentdm/internal/voice_agents_page.rb +115 -0
- data/lib/sentdm/models/call_event.rb +8 -6
- data/lib/sentdm/models/call_event_payload.rb +29 -9
- data/lib/sentdm/models/channels/voice_create_params.rb +23 -11
- data/lib/sentdm/models/channels/voice_number.rb +23 -1
- data/lib/sentdm/models/channels/voice_update_params.rb +12 -1
- data/lib/sentdm/models/message_send_params.rb +8 -1
- data/lib/sentdm/models/template.rb +6 -5
- data/lib/sentdm/models/template_body.rb +8 -8
- data/lib/sentdm/models/voice/agent_create_params.rb +142 -0
- data/lib/sentdm/models/{calls/participant_list_params.rb → voice/agent_delete_params.rb} +3 -3
- data/lib/sentdm/models/voice/agent_list_params.rb +38 -0
- data/lib/sentdm/models/{calls/participant_remove_all_params.rb → voice/agent_retrieve_params.rb} +3 -3
- data/lib/sentdm/models/voice/agent_rotate_secret_params.rb +34 -0
- data/lib/sentdm/models/voice/agent_update_params.rb +141 -0
- data/lib/sentdm/models/{calls/api_response_of_list_of_call_participant.rb → voice/api_response_of_call.rb} +7 -7
- data/lib/sentdm/models/voice/api_response_of_call_recordings.rb +45 -0
- data/lib/sentdm/models/voice/api_response_of_calls_list.rb +44 -0
- data/lib/sentdm/models/voice/api_response_of_voice_agent.rb +51 -0
- data/lib/sentdm/models/voice/api_response_of_voice_agent_secret.rb +45 -0
- data/lib/sentdm/models/voice/api_response_of_voice_agents_list.rb +48 -0
- data/lib/sentdm/models/voice/api_response_of_voice_catalogue.rb +49 -0
- data/lib/sentdm/models/{channels → voice}/api_response_of_voice_token.rb +5 -5
- data/lib/sentdm/models/voice/call.rb +241 -0
- data/lib/sentdm/models/{calls/participant_remove_params.rb → voice/call_hangup_params.rb} +8 -8
- data/lib/sentdm/models/voice/call_list_params.rb +103 -0
- data/lib/sentdm/models/voice/call_list_recordings_params.rb +28 -0
- data/lib/sentdm/models/voice/call_party.rb +33 -0
- data/lib/sentdm/models/{calls/participant_update_params.rb → voice/call_record_params.rb} +10 -17
- data/lib/sentdm/models/voice/call_recording.rb +40 -0
- data/lib/sentdm/models/voice/call_recordings.rb +26 -0
- data/lib/sentdm/models/voice/call_retrieve_params.rb +28 -0
- data/lib/sentdm/models/voice/call_timeline_entry.rb +28 -0
- data/lib/sentdm/models/voice/calls/api_response_of_list_of_call_participant.rb +51 -0
- data/lib/sentdm/models/voice/calls/call_participant.rb +62 -0
- data/lib/sentdm/models/voice/calls/call_participant_target.rb +32 -0
- data/lib/sentdm/models/voice/calls/participant_add_params.rb +68 -0
- data/lib/sentdm/models/voice/calls/participant_list_params.rb +30 -0
- data/lib/sentdm/models/voice/calls/participant_remove_all_params.rb +30 -0
- data/lib/sentdm/models/voice/calls/participant_remove_params.rb +36 -0
- data/lib/sentdm/models/voice/calls/participant_update_params.rb +66 -0
- data/lib/sentdm/models/voice/calls_list.rb +28 -0
- data/lib/sentdm/models/voice/catalogue_list_params.rb +22 -0
- data/lib/sentdm/models/{channels/voice_create_token_params.rb → voice/token_create_params.rb} +4 -4
- data/lib/sentdm/models/voice/voice_agent.rb +138 -0
- data/lib/sentdm/models/voice/voice_agent_audio.rb +19 -0
- data/lib/sentdm/models/voice/voice_agent_audio_spec.rb +20 -0
- data/lib/sentdm/models/voice/voice_agent_limits.rb +31 -0
- data/lib/sentdm/models/voice/voice_agent_limits_spec.rb +40 -0
- data/lib/sentdm/models/voice/voice_agent_party.rb +25 -0
- data/lib/sentdm/models/voice/voice_agent_party_spec.rb +28 -0
- data/lib/sentdm/models/voice/voice_agent_secret.rb +27 -0
- data/lib/sentdm/models/voice/voice_agent_speech.rb +31 -0
- data/lib/sentdm/models/voice/voice_agent_speech_spec.rb +40 -0
- data/lib/sentdm/models/voice/voice_agent_transcripts.rb +25 -0
- data/lib/sentdm/models/voice/voice_agent_transcripts_spec.rb +32 -0
- data/lib/sentdm/models/voice/voice_agents_list.rb +30 -0
- data/lib/sentdm/models/voice/voice_catalogue.rb +30 -0
- data/lib/sentdm/models/voice/voice_catalogue_voice.rb +43 -0
- data/lib/sentdm/models/{channels → voice}/voice_token.rb +9 -3
- data/lib/sentdm/models/webhook_create_params.rb +31 -5
- data/lib/sentdm/models/webhook_response.rb +66 -4
- data/lib/sentdm/models/webhook_update_params.rb +15 -3
- data/lib/sentdm/models.rb +2 -30
- data/lib/sentdm/resources/channels/voice.rb +43 -63
- data/lib/sentdm/resources/channels.rb +2 -2
- data/lib/sentdm/resources/profiles/campaigns.rb +3 -2
- data/lib/sentdm/resources/voice/agents.rb +319 -0
- data/lib/sentdm/resources/voice/calls/participants.rb +244 -0
- data/lib/sentdm/resources/voice/calls.rb +269 -0
- data/lib/sentdm/resources/voice/catalogue.rb +71 -0
- data/lib/sentdm/resources/voice/tokens.rb +86 -0
- data/lib/sentdm/resources/voice.rb +142 -0
- data/lib/sentdm/resources/webhooks.rb +43 -15
- data/lib/sentdm/version.rb +1 -1
- data/lib/sentdm.rb +59 -28
- data/rbi/sentdm/client.rbi +2 -19
- data/rbi/sentdm/internal/voice_agents_page.rbi +71 -0
- data/rbi/sentdm/models/call_event.rbi +14 -10
- data/rbi/sentdm/models/call_event_payload.rbi +34 -9
- data/rbi/sentdm/models/channels/voice_create_params.rbi +33 -17
- data/rbi/sentdm/models/channels/voice_number.rbi +31 -0
- data/rbi/sentdm/models/channels/voice_update_params.rbi +14 -0
- data/rbi/sentdm/models/message_send_params.rbi +16 -2
- data/rbi/sentdm/models/template.rbi +12 -10
- data/rbi/sentdm/models/template_body.rbi +12 -12
- data/rbi/sentdm/models/voice/agent_create_params.rbi +215 -0
- data/rbi/sentdm/models/{calls/participant_remove_all_params.rbi → voice/agent_delete_params.rbi} +3 -6
- data/rbi/sentdm/models/voice/agent_list_params.rbi +66 -0
- data/rbi/sentdm/models/voice/agent_retrieve_params.rbi +48 -0
- data/rbi/sentdm/models/{calls/participant_remove_params.rbi → voice/agent_rotate_secret_params.rbi} +11 -8
- data/rbi/sentdm/models/voice/agent_update_params.rbi +211 -0
- data/rbi/sentdm/models/voice/api_response_of_call.rbi +76 -0
- data/rbi/sentdm/models/voice/api_response_of_call_recordings.rbi +81 -0
- data/rbi/sentdm/models/{calls/api_response_of_list_of_call_participant.rbi → voice/api_response_of_calls_list.rbi} +12 -9
- data/rbi/sentdm/models/voice/api_response_of_voice_agent.rbi +85 -0
- data/rbi/sentdm/models/voice/api_response_of_voice_agent_secret.rbi +81 -0
- data/rbi/sentdm/models/voice/api_response_of_voice_agents_list.rbi +83 -0
- data/rbi/sentdm/models/voice/api_response_of_voice_catalogue.rbi +83 -0
- data/rbi/sentdm/models/{channels → voice}/api_response_of_voice_token.rbi +6 -8
- data/rbi/sentdm/models/voice/call.rbi +329 -0
- data/rbi/sentdm/models/voice/call_hangup_params.rbi +61 -0
- data/rbi/sentdm/models/voice/call_list_params.rbi +134 -0
- data/rbi/sentdm/models/{calls/participant_list_params.rbi → voice/call_list_recordings_params.rbi} +3 -3
- data/rbi/sentdm/models/voice/call_party.rbi +47 -0
- data/rbi/sentdm/models/{calls/participant_update_params.rbi → voice/call_record_params.rbi} +12 -21
- data/rbi/sentdm/models/voice/call_recording.rbi +63 -0
- data/rbi/sentdm/models/voice/call_recordings.rbi +49 -0
- data/rbi/sentdm/models/voice/call_retrieve_params.rbi +48 -0
- data/rbi/sentdm/models/voice/call_timeline_entry.rbi +44 -0
- data/rbi/sentdm/models/voice/calls/api_response_of_list_of_call_participant.rbi +84 -0
- data/rbi/sentdm/models/voice/calls/call_participant.rbi +97 -0
- data/rbi/sentdm/models/voice/calls/call_participant_target.rbi +49 -0
- data/rbi/sentdm/models/voice/calls/participant_add_params.rbi +104 -0
- data/rbi/sentdm/models/voice/calls/participant_list_params.rbi +53 -0
- data/rbi/sentdm/models/voice/calls/participant_remove_all_params.rbi +53 -0
- data/rbi/sentdm/models/voice/calls/participant_remove_params.rbi +63 -0
- data/rbi/sentdm/models/voice/calls/participant_update_params.rbi +96 -0
- data/rbi/sentdm/models/voice/calls_list.rbi +54 -0
- data/rbi/sentdm/models/voice/catalogue_list_params.rbi +40 -0
- data/rbi/sentdm/models/{channels/voice_create_token_params.rbi → voice/token_create_params.rbi} +3 -6
- data/rbi/sentdm/models/voice/voice_agent.rbi +196 -0
- data/rbi/sentdm/models/voice/voice_agent_audio.rbi +30 -0
- data/rbi/sentdm/models/voice/voice_agent_audio_spec.rbi +33 -0
- data/rbi/sentdm/models/voice/voice_agent_limits.rbi +57 -0
- data/rbi/sentdm/models/voice/voice_agent_limits_spec.rbi +62 -0
- data/rbi/sentdm/models/voice/voice_agent_party.rbi +36 -0
- data/rbi/sentdm/models/voice/voice_agent_party_spec.rbi +45 -0
- data/rbi/sentdm/models/voice/voice_agent_secret.rbi +37 -0
- data/rbi/sentdm/models/voice/voice_agent_speech.rbi +48 -0
- data/rbi/sentdm/models/voice/voice_agent_speech_spec.rbi +62 -0
- data/rbi/sentdm/models/voice/voice_agent_transcripts.rbi +43 -0
- data/rbi/sentdm/models/voice/voice_agent_transcripts_spec.rbi +51 -0
- data/rbi/sentdm/models/voice/voice_agents_list.rbi +55 -0
- data/rbi/sentdm/models/voice/voice_catalogue.rbi +59 -0
- data/rbi/sentdm/models/voice/voice_catalogue_voice.rbi +75 -0
- data/rbi/sentdm/models/{channels → voice}/voice_token.rbi +8 -4
- data/rbi/sentdm/models/webhook_create_params.rbi +41 -3
- data/rbi/sentdm/models/webhook_response.rbi +112 -3
- data/rbi/sentdm/models/webhook_update_params.rbi +18 -3
- data/rbi/sentdm/models.rbi +2 -30
- data/rbi/sentdm/resources/channels/voice.rbi +57 -67
- data/rbi/sentdm/resources/channels.rbi +2 -2
- data/rbi/sentdm/resources/messages.rbi +8 -1
- data/rbi/sentdm/resources/profiles/campaigns.rbi +3 -2
- data/rbi/sentdm/resources/voice/agents.rbi +316 -0
- data/rbi/sentdm/resources/voice/calls/participants.rbi +212 -0
- data/rbi/sentdm/resources/voice/calls.rbi +244 -0
- data/rbi/sentdm/resources/voice/catalogue.rbi +59 -0
- data/rbi/sentdm/resources/voice/tokens.rbi +84 -0
- data/rbi/sentdm/resources/voice.rbi +136 -0
- data/rbi/sentdm/resources/webhooks.rbi +56 -16
- data/sig/sentdm/client.rbs +1 -1
- data/sig/sentdm/internal/voice_agents_page.rbs +41 -0
- data/sig/sentdm/models/call_event_payload.rbs +12 -0
- data/sig/sentdm/models/channels/voice_create_params.rbs +9 -4
- data/sig/sentdm/models/channels/voice_number.rbs +12 -0
- data/sig/sentdm/models/channels/voice_update_params.rbs +5 -0
- data/sig/sentdm/models/voice/agent_create_params.rbs +99 -0
- data/sig/sentdm/models/{calls/participant_remove_all_params.rbs → voice/agent_delete_params.rbs} +3 -3
- data/sig/sentdm/models/voice/agent_list_params.rbs +40 -0
- data/sig/sentdm/models/{calls/participant_list_params.rbs → voice/agent_retrieve_params.rbs} +3 -3
- data/sig/sentdm/models/{calls/participant_remove_params.rbs → voice/agent_rotate_secret_params.rbs} +8 -8
- data/sig/sentdm/models/voice/agent_update_params.rbs +108 -0
- data/sig/sentdm/models/{calls/api_response_of_list_of_call_participant.rbs → voice/api_response_of_call.rbs} +7 -7
- data/sig/sentdm/models/voice/api_response_of_call_recordings.rbs +41 -0
- data/sig/sentdm/models/voice/api_response_of_calls_list.rbs +41 -0
- data/sig/sentdm/models/voice/api_response_of_voice_agent.rbs +41 -0
- data/sig/sentdm/models/voice/api_response_of_voice_agent_secret.rbs +41 -0
- data/sig/sentdm/models/voice/api_response_of_voice_agents_list.rbs +41 -0
- data/sig/sentdm/models/voice/api_response_of_voice_catalogue.rbs +41 -0
- data/sig/sentdm/models/{channels → voice}/api_response_of_voice_token.rbs +5 -5
- data/sig/sentdm/models/voice/call.rbs +175 -0
- data/sig/sentdm/models/voice/call_hangup_params.rbs +40 -0
- data/sig/sentdm/models/voice/call_list_params.rbs +79 -0
- data/sig/sentdm/models/voice/call_list_recordings_params.rbs +32 -0
- data/sig/sentdm/models/voice/call_party.rbs +19 -0
- data/sig/sentdm/models/{calls/participant_update_params.rbs → voice/call_record_params.rbs} +8 -13
- data/sig/sentdm/models/voice/call_recording.rbs +34 -0
- data/sig/sentdm/models/voice/call_recordings.rbs +22 -0
- data/sig/sentdm/models/voice/call_retrieve_params.rbs +32 -0
- data/sig/sentdm/models/voice/call_timeline_entry.rbs +21 -0
- data/sig/sentdm/models/voice/calls/api_response_of_list_of_call_participant.rbs +43 -0
- data/sig/sentdm/models/voice/calls/call_participant.rbs +54 -0
- data/sig/sentdm/models/voice/calls/call_participant_target.rbs +25 -0
- data/sig/sentdm/models/voice/calls/participant_add_params.rbs +65 -0
- data/sig/sentdm/models/voice/calls/participant_list_params.rbs +34 -0
- data/sig/sentdm/models/voice/calls/participant_remove_all_params.rbs +36 -0
- data/sig/sentdm/models/voice/calls/participant_remove_params.rbs +42 -0
- data/sig/sentdm/models/voice/calls/participant_update_params.rbs +63 -0
- data/sig/sentdm/models/voice/calls_list.rbs +33 -0
- data/sig/sentdm/models/voice/catalogue_list_params.rbs +27 -0
- data/sig/sentdm/models/{channels/voice_create_token_params.rbs → voice/token_create_params.rbs} +3 -3
- data/sig/sentdm/models/voice/voice_agent.rbs +116 -0
- data/sig/sentdm/models/voice/voice_agent_audio.rbs +19 -0
- data/sig/sentdm/models/voice/voice_agent_audio_spec.rbs +17 -0
- data/sig/sentdm/models/voice/voice_agent_limits.rbs +38 -0
- data/sig/sentdm/models/voice/voice_agent_limits_spec.rbs +34 -0
- data/sig/sentdm/models/{calls/call_participant_target.rbs → voice/voice_agent_party.rbs} +4 -4
- data/sig/sentdm/models/voice/voice_agent_party_spec.rbs +19 -0
- data/sig/sentdm/models/voice/voice_agent_secret.rbs +19 -0
- data/sig/sentdm/models/voice/voice_agent_speech.rbs +32 -0
- data/sig/sentdm/models/voice/voice_agent_speech_spec.rbs +26 -0
- data/sig/sentdm/models/voice/voice_agent_transcripts.rbs +23 -0
- data/sig/sentdm/models/voice/voice_agent_transcripts_spec.rbs +20 -0
- data/sig/sentdm/models/voice/voice_agents_list.rbs +35 -0
- data/sig/sentdm/models/voice/voice_catalogue.rbs +35 -0
- data/sig/sentdm/models/voice/voice_catalogue_voice.rbs +42 -0
- data/sig/sentdm/models/{channels → voice}/voice_token.rbs +3 -1
- data/sig/sentdm/models/webhook_create_params.rbs +12 -0
- data/sig/sentdm/models/webhook_response.rbs +46 -3
- data/sig/sentdm/models/webhook_update_params.rbs +5 -0
- data/sig/sentdm/models.rbs +2 -30
- data/sig/sentdm/resources/channels/voice.rbs +3 -11
- data/sig/sentdm/resources/voice/agents.rbs +74 -0
- data/sig/sentdm/resources/voice/calls/participants.rbs +52 -0
- data/sig/sentdm/resources/{calls/participants.rbs → voice/calls.rbs} +25 -21
- data/sig/sentdm/resources/voice/catalogue.rbs +14 -0
- data/sig/sentdm/resources/voice/tokens.rbs +19 -0
- data/sig/sentdm/resources/voice.rbs +15 -0
- data/sig/sentdm/resources/webhooks.rbs +3 -0
- metadata +176 -83
- data/lib/sentdm/models/api_response_of_call.rb +0 -43
- data/lib/sentdm/models/api_response_of_call_recordings.rb +0 -43
- data/lib/sentdm/models/api_response_of_calls_list.rb +0 -42
- data/lib/sentdm/models/call.rb +0 -134
- data/lib/sentdm/models/call_hangup_params.rb +0 -32
- data/lib/sentdm/models/call_list_params.rb +0 -83
- data/lib/sentdm/models/call_list_recordings_params.rb +0 -26
- data/lib/sentdm/models/call_party.rb +0 -31
- data/lib/sentdm/models/call_record_params.rb +0 -55
- data/lib/sentdm/models/call_recording.rb +0 -38
- data/lib/sentdm/models/call_recordings.rb +0 -24
- data/lib/sentdm/models/call_retrieve_params.rb +0 -26
- data/lib/sentdm/models/call_timeline_entry.rb +0 -26
- data/lib/sentdm/models/calls/call_participant.rb +0 -60
- data/lib/sentdm/models/calls/call_participant_target.rb +0 -30
- data/lib/sentdm/models/calls/participant_add_params.rb +0 -66
- data/lib/sentdm/models/calls_list.rb +0 -26
- data/lib/sentdm/resources/calls/participants.rb +0 -231
- data/lib/sentdm/resources/calls.rb +0 -236
- data/rbi/sentdm/models/api_response_of_call.rbi +0 -74
- data/rbi/sentdm/models/api_response_of_call_recordings.rbi +0 -74
- data/rbi/sentdm/models/api_response_of_calls_list.rbi +0 -74
- data/rbi/sentdm/models/call.rbi +0 -179
- data/rbi/sentdm/models/call_hangup_params.rbi +0 -59
- data/rbi/sentdm/models/call_list_params.rbi +0 -112
- data/rbi/sentdm/models/call_list_recordings_params.rbi +0 -46
- data/rbi/sentdm/models/call_party.rbi +0 -41
- data/rbi/sentdm/models/call_record_params.rbi +0 -83
- data/rbi/sentdm/models/call_recording.rbi +0 -59
- data/rbi/sentdm/models/call_recordings.rbi +0 -39
- data/rbi/sentdm/models/call_retrieve_params.rbi +0 -46
- data/rbi/sentdm/models/call_timeline_entry.rbi +0 -40
- data/rbi/sentdm/models/calls/call_participant.rbi +0 -92
- data/rbi/sentdm/models/calls/call_participant_target.rbi +0 -47
- data/rbi/sentdm/models/calls/participant_add_params.rbi +0 -98
- data/rbi/sentdm/models/calls_list.rbi +0 -47
- data/rbi/sentdm/resources/calls/participants.rbi +0 -199
- data/rbi/sentdm/resources/calls.rbi +0 -207
- data/sig/sentdm/models/api_response_of_call.rbs +0 -39
- data/sig/sentdm/models/api_response_of_call_recordings.rbs +0 -39
- data/sig/sentdm/models/api_response_of_calls_list.rbs +0 -39
- data/sig/sentdm/models/call.rbs +0 -101
- data/sig/sentdm/models/call_hangup_params.rbs +0 -38
- data/sig/sentdm/models/call_list_params.rbs +0 -67
- data/sig/sentdm/models/call_list_recordings_params.rbs +0 -30
- data/sig/sentdm/models/call_party.rbs +0 -17
- data/sig/sentdm/models/call_record_params.rbs +0 -54
- data/sig/sentdm/models/call_recording.rbs +0 -32
- data/sig/sentdm/models/call_recordings.rbs +0 -17
- data/sig/sentdm/models/call_retrieve_params.rbs +0 -30
- data/sig/sentdm/models/call_timeline_entry.rbs +0 -19
- data/sig/sentdm/models/calls/call_participant.rbs +0 -52
- data/sig/sentdm/models/calls/participant_add_params.rbs +0 -63
- data/sig/sentdm/models/calls_list.rbs +0 -26
- 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
|
|
52
|
-
# lists it under. Only on call.recording_ready,
|
|
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.
|
|
64
|
-
# call.recording_ready event. Which of them occurred is the
|
|
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
|
-
#
|
|
70
|
-
#
|
|
71
|
-
#
|
|
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
|
|
109
|
-
# lists it under. Only on call.recording_ready,
|
|
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
|
-
#
|
|
19
|
-
#
|
|
20
|
-
#
|
|
21
|
-
#
|
|
22
|
-
#
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
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
|
-
#
|
|
80
|
-
#
|
|
81
|
-
#
|
|
82
|
-
#
|
|
83
|
-
#
|
|
84
|
-
|
|
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
|
-
|
|
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
|
-
#
|
|
50
|
-
#
|
|
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
|
-
#
|
|
147
|
-
#
|
|
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.
|
|
13
|
-
#
|
|
14
|
-
#
|
|
15
|
-
#
|
|
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.
|
|
82
|
-
#
|
|
83
|
-
#
|
|
84
|
-
#
|
|
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.
|
|
138
|
-
#
|
|
139
|
-
#
|
|
140
|
-
#
|
|
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:
|