diff --git a/bandwidth/voice/bxml/verbs/__init__.py b/bandwidth/voice/bxml/verbs/__init__.py index 05b5c3e2..9e153007 100644 --- a/bandwidth/voice/bxml/verbs/__init__.py +++ b/bandwidth/voice/bxml/verbs/__init__.py @@ -18,3 +18,5 @@ from .ring import Ring from .stop_gather import StopGather from .start_gather import StartGather +from .tag import Tag +from .sip_uri import SipUri diff --git a/bandwidth/voice/bxml/verbs/sip_uri.py b/bandwidth/voice/bxml/verbs/sip_uri.py new file mode 100644 index 00000000..37b73361 --- /dev/null +++ b/bandwidth/voice/bxml/verbs/sip_uri.py @@ -0,0 +1,90 @@ +""" +sip_uri.py + +Representation of Bandwidth's sip uri BXML verb + +@copyright Bandwidth INC +""" + +from lxml import etree + +from .base_verb import AbstractBxmlVerb + +SIP_URI_TAG = "SipUri" + + +class SipUri(AbstractBxmlVerb): + + def __init__(self, uri=None, transfer_answer_url=None, transfer_answer_method=None, + username=None, password=None, tag=None, uui=None, + transfer_disconnect_url=None, transfer_disconnect_method=None, + transfer_answer_fallback_url=None, transfer_answer_fallback_method=None, + fallback_username=None, fallback_password=None): + """ + Initializes the SipUri class with the following parameters + + :param str uri: The sip uri + :param str transfer_answer_url: The url to send the transfer event to + :param str transfer_answer_method: The http method of the transfer event request + :param str transfer_disconnect_url: The url to send the transfer disconnect event to + :param str transfer_disconnect_method: The http method of the transfer disconnect event request + :param str username: The username to authenticate on the transfer event url + :param str password: The password to authenticate on the transfer event url + :param str tag: Custom string sent in the callback + :param str uui: The value of the `User-To-User` header to send within the initial `INVITE` + :param str transfer_answer_fallback_url: URL for fallback events + :param str transfer_answer_fallback_method: HTTP method for fallback events + :param str fallback_username: Basic auth username for fallback events + :param str fallback_password: Basic auth password for fallback events + """ + self.uri = uri + self.transfer_answer_url = transfer_answer_url + self.transfer_answer_method = transfer_answer_method + self.username = username + self.password = password + self.tag = tag + self.uui = uui + self.transfer_disconnect_method = transfer_disconnect_method + self.transfer_disconnect_url = transfer_disconnect_url + self.transfer_answer_fallback_url = transfer_answer_fallback_url + self.transfer_answer_fallback_method = transfer_answer_fallback_method + self.fallback_username = fallback_username + self.fallback_password = fallback_password + + def to_etree_element(self): + """ + Converts the class into an etree element. Used for other verb classes to build xml + + :return etree.Element: The etree Element representing this class + """ + root = etree.Element(SIP_URI_TAG) + if self.uri is not None: + root.text = self.uri + if self.transfer_answer_url is not None: + root.set("transferAnswerUrl", self.transfer_answer_url) + if self.transfer_answer_method is not None: + root.set("transferAnswerMethod", self.transfer_answer_method) + if self.username is not None: + root.set("username", self.username) + if self.password is not None: + root.set("password", self.password) + if self.tag is not None: + root.set("tag", self.tag) + if self.uui is not None: + root.set("uui", self.uui) + if self.transfer_disconnect_method is not None: + root.set("transferDisconnectMethod", self.transfer_disconnect_method) + if self.transfer_disconnect_url is not None: + root.set("transferDisconnectUrl", self.transfer_disconnect_url) + if self.transfer_answer_fallback_url is not None: + root.set("transferAnswerFallbackUrl", self.transfer_answer_fallback_url) + if self.transfer_answer_fallback_method is not None: + root.set("transferAnswerFallbackMethod", self.transfer_answer_fallback_method) + if self.fallback_username is not None: + root.set("fallbackUsername", self.fallback_username) + if self.fallback_password is not None: + root.set("fallbackPassword", self.fallback_password) + return root + + def to_bxml(self): + return etree.tostring(self.to_etree_element()).decode() diff --git a/bandwidth/voice/bxml/verbs/tag.py b/bandwidth/voice/bxml/verbs/tag.py new file mode 100644 index 00000000..06fcd28c --- /dev/null +++ b/bandwidth/voice/bxml/verbs/tag.py @@ -0,0 +1,38 @@ +""" +play_audio.py + +Representation of Bandwidth's play audio BXML verb + +@copyright Bandwidth INC +""" + +from lxml import etree + +from .base_verb import AbstractBxmlVerb + +TAG_TAG = "Tag" + + +class Tag(AbstractBxmlVerb): + + def __init__(self, tag=None): + """ + Initializes the Tag class with the following parameters + + :param str tag: The tag to set the call to + """ + self.tag = tag + + def to_etree_element(self): + """ + Converts the class into an etree element. Used for other verb classes to build xml + + :return etree.Element: The etree Element representing this class + """ + root = etree.Element(TAG_TAG) + if self.tag is not None: + root.text = self.tag + return root + + def to_bxml(self): + return etree.tostring(self.to_etree_element()).decode() diff --git a/bandwidth/voice/bxml/verbs/transfer.py b/bandwidth/voice/bxml/verbs/transfer.py index be71c450..be67fd10 100644 --- a/bandwidth/voice/bxml/verbs/transfer.py +++ b/bandwidth/voice/bxml/verbs/transfer.py @@ -17,7 +17,7 @@ class Transfer(AbstractBxmlVerb): def __init__(self, transfer_caller_id=None, call_timeout=None, tag=None, transfer_complete_url=None, transfer_complete_method=None, username=None, password=None, diversion_treatment=None, - diversion_reason=None, phone_numbers=None, + diversion_reason=None, phone_numbers=None, sip_uris=None, transfer_complete_fallback_url=None, transfer_complete_fallback_method=None, fallback_username=None, fallback_password=None): """ @@ -33,6 +33,7 @@ def __init__(self, transfer_caller_id=None, call_timeout=None, tag=None, transfe :param str diversion_treatment: The diversion treatment for the call :param str diversion_reason: The diversion reason for the call :param list phone_numbers: The numbers to receive the transferred call + :param list sip_uris: The sip uris to receive the transferred call :param str transfer_complete_fallback_url: URL for fallback events :param str transfer_complete_fallback_method: HTTP method for fallback events :param str fallback_username: Basic auth username for fallback events @@ -48,6 +49,7 @@ def __init__(self, transfer_caller_id=None, call_timeout=None, tag=None, transfe self.diversion_treatment = diversion_treatment self.diversion_reason = diversion_reason self.phone_numbers = phone_numbers + self.sip_uris = sip_uris self.transfer_complete_fallback_url = transfer_complete_fallback_url self.transfer_complete_fallback_method = transfer_complete_fallback_method self.fallback_username = fallback_username @@ -84,4 +86,7 @@ def to_bxml(self): if self.phone_numbers is not None: for phone_number in self.phone_numbers: root.append(phone_number.to_etree_element()) + if self.sip_uris is not None: + for sip_uri in self.sip_uris: + root.append(sip_uri.to_etree_element()) return etree.tostring(root).decode() diff --git a/setup.py b/setup.py index 0b82f53c..a518e388 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ setup( name='bandwidth-sdk', - version='6.13.3', + version='6.14.0', description='Bandwidth\'s set of APIs', long_description=long_description, long_description_content_type="text/markdown",