Skip to content

Commit 99b9635

Browse files
authored
adding advancedMachineDetection to ncco builder and testing (#259)
* adding advancedMachineDetection to ncco builder and testing * removing beep_timeout
1 parent 25f695e commit 99b9635

File tree

5 files changed

+45
-7
lines changed

5 files changed

+45
-7
lines changed

src/vonage/ncco_builder/ncco.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ class Connect(Action):
7373
timeout: Optional[int]
7474
limit: Optional[conint(le=7200)]
7575
machineDetection: Optional[Literal['continue', 'hangup']]
76+
advancedMachineDetection: Optional[dict]
7677
eventUrl: Optional[Union[List[str], str]]
7778
eventMethod: Optional[constr(to_upper=True)]
7879
ringbackTone: Optional[str]
@@ -103,6 +104,14 @@ def check_from_not_set(cls, v, values):
103104
def ensure_url_in_list(cls, v):
104105
return Ncco._ensure_object_in_list(v)
105106

107+
@validator('advancedMachineDetection')
108+
def validate_advancedMachineDetection(cls, v):
109+
if 'behavior' in v and v['behavior'] not in ('continue', 'hangup'):
110+
raise ValueError('advancedMachineDetection["behavior"] must be one of: "continue", "hangup".')
111+
if 'mode' in v and v['mode'] not in ('detect, detect_beep'):
112+
raise ValueError('advancedMachineDetection["mode"] must be one of: "detect", "detect_beep".')
113+
return v
114+
106115
class Config:
107116
smart_union = True
108117

tests/test_ncco_builder/ncco_samples/ncco_action_samples.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222

2323
connect_full = '{"action": "connect", "endpoint": [{"type": "phone", "number": "447000000000"}], "from": "447400000000", "randomFromNumber": false, "eventType": "synchronous", "timeout": 15, "limit": 1000, "machineDetection": "hangup", "eventUrl": ["http://example.com"], "eventMethod": "PUT", "ringbackTone": "http://example.com"}'
2424

25+
connect_advancedMachineDetection = '{"action": "connect", "endpoint": [{"type": "phone", "number": "447000000000"}], "from": "447400000000", "advancedMachineDetection": {"behavior": "continue", "mode": "detect"}, "eventUrl": ["http://example.com"]}'
26+
2527
talk_basic = '{"action": "talk", "text": "hello"}'
2628

2729
talk_full = '{"action": "talk", "text": "hello", "bargeIn": true, "loop": 3, "level": 0.5, "language": "en-GB", "style": 1, "premium": true}'

tests/test_ncco_builder/ncco_samples/ncco_builder_samples.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@
1717
ringbackTone='http://example.com',
1818
)
1919

20+
connect_advancedMachineDetection = Ncco.Connect(
21+
endpoint=ConnectEndpoints.PhoneEndpoint(number='447000000000'),
22+
advancedMachineDetection={'behavior': 'continue', 'mode': 'detect'},
23+
)
24+
25+
2026
talk_minimal = Ncco.Talk(text='hello')
2127

2228
talk = Ncco.Talk(text='hello', bargeIn=True, loop=3, level=0.5, language='en-GB', style=1, premium=True)
@@ -69,6 +75,16 @@
6975
{'action': 'talk', 'text': 'hello'},
7076
]
7177

78+
three_part_advancedMachineDetection_ncco = [
79+
{'action': 'record', 'eventUrl': ['http://example.com/events']},
80+
{
81+
'action': 'connect',
82+
'endpoint': [{'type': 'phone', 'number': '447000000000'}],
83+
'advancedMachineDetection': {'behavior': 'continue', 'mode': 'detect'},
84+
},
85+
{'action': 'talk', 'text': 'hello'},
86+
]
87+
7288
insane_ncco = [
7389
{'action': 'record', 'eventUrl': ['http://example.com/events']},
7490
{'action': 'conversation', 'name': 'my_conversation'},

tests/test_ncco_builder/test_ncco_actions.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,18 @@ def test_connect_options():
125125
assert json.dumps(_action_as_dict(connect)) == nas.connect_full
126126

127127

128+
def test_connect_advanced_machine_detection():
129+
advancedMachineDetectionParams = {'behavior': 'continue', 'mode': 'detect'}
130+
endpoint = ConnectEndpoints.PhoneEndpoint(number='447000000000')
131+
connect = Ncco.Connect(
132+
endpoint=endpoint,
133+
from_='447400000000',
134+
advancedMachineDetection=advancedMachineDetectionParams,
135+
eventUrl='http://example.com',
136+
)
137+
assert json.dumps(_action_as_dict(connect)) == nas.connect_advancedMachineDetection
138+
139+
128140
def test_connect_random_from_number_error():
129141
endpoint = ConnectEndpoints.PhoneEndpoint(number='447000000000')
130142
with pytest.raises(ValueError) as err:
@@ -143,6 +155,10 @@ def test_connect_validation_errors():
143155
Ncco.Connect(endpoint=endpoint, limit=7201)
144156
with pytest.raises(ValidationError):
145157
Ncco.Connect(endpoint=endpoint, machineDetection='do_nothing')
158+
with pytest.raises(ValidationError):
159+
Ncco.Connect(endpoint=endpoint, advancedMachineDetection={'behavior': 'do_nothing'})
160+
with pytest.raises(ValidationError):
161+
Ncco.Connect(endpoint=endpoint, advancedMachineDetection={'mode': 'detect_nothing'})
146162

147163

148164
def test_talk_basic():

tests/test_ncco_builder/test_ncco_builder.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import pytest
21
import json
32

43
from vonage import Ncco
@@ -20,13 +19,9 @@ def test_build_ncco_from_args():
2019

2120

2221
def test_build_ncco_from_list():
23-
action_list = [nbs.record, nbs.talk_minimal]
22+
action_list = [nbs.record, nbs.connect_advancedMachineDetection, nbs.talk_minimal]
2423
ncco = Ncco.build_ncco(actions=action_list)
25-
assert ncco == nbs.two_part_ncco
26-
assert (
27-
json.dumps(ncco)
28-
== '[{"action": "record", "eventUrl": ["http://example.com/events"]}, {"action": "talk", "text": "hello"}]'
29-
)
24+
assert ncco == nbs.three_part_advancedMachineDetection_ncco
3025

3126

3227
def test_build_insane_ncco():

0 commit comments

Comments
 (0)