From 9c8cad9fdba0bb3c8140a882ad7cfad966c548d4 Mon Sep 17 00:00:00 2001 From: maxkahan Date: Fri, 25 Oct 2024 18:26:56 +0100 Subject: [PATCH] update applications snippets, add users snippets --- .env.dist | 9 ++- account/configure-account.py | 1 - application/create-application.py | 103 ++++++++++++++++++++++-------- application/delete-application.py | 11 +--- application/get-application.py | 15 ++--- application/list-applications.py | 17 +++-- application/update-application.py | 71 ++++++++------------ users/create-user.py | 31 +++++++++ users/delete-user.py | 21 ++++++ users/get-user.py | 24 +++++++ users/list-users.py | 23 +++++++ users/update-user.py | 34 ++++++++++ 12 files changed, 264 insertions(+), 96 deletions(-) create mode 100644 users/create-user.py create mode 100644 users/delete-user.py create mode 100644 users/get-user.py create mode 100644 users/list-users.py create mode 100644 users/update-user.py diff --git a/.env.dist b/.env.dist index 0a69894..3c1c5cc 100644 --- a/.env.dist +++ b/.env.dist @@ -76,4 +76,11 @@ VONAGE_NUMBER_FEATURES='SMS,VOICE' MESSAGES_APPLICATION_ID='12a3b4cd-a1b2-1ab2-a1b2-a1234bc5d678' VOICE_CALLBACK_TYPE='tel' VOICE_CALLBACK_VALUE='447700900002' -VOICE_STATUS_URL='https://example.com/webhooks/status' \ No newline at end of file +VOICE_STATUS_URL='https://example.com/webhooks/status' + +# Users +USER_NAME='USER_NAME' +USER_DISPLAY_NAME='USER_DISPLAY_NAME' +USER_NEW_NAME='USER_NEW_NAME' +USER_NEW_DISPLAY_NAME='USER_NEW_DISPLAY_NAME' +USER_ID='USER_ID' \ No newline at end of file diff --git a/account/configure-account.py b/account/configure-account.py index ee364d6..4f7b21f 100644 --- a/account/configure-account.py +++ b/account/configure-account.py @@ -1,6 +1,5 @@ import os from os.path import join, dirname -from pprint import pprint from dotenv import load_dotenv dotenv_path = join(dirname(__file__), '../.env') diff --git a/application/create-application.py b/application/create-application.py index 3fc78e6..dd08731 100644 --- a/application/create-application.py +++ b/application/create-application.py @@ -1,10 +1,7 @@ #!/usr/bin/env python3 -from pprint import pprint import os from os.path import join, dirname from dotenv import load_dotenv -import vonage - dotenv_path = join(dirname(__file__), "../.env") load_dotenv(dotenv_path) @@ -12,27 +9,83 @@ VONAGE_API_KEY = os.getenv('VONAGE_API_KEY') VONAGE_API_SECRET = os.getenv('VONAGE_API_SECRET') -client = vonage.Client( - key=VONAGE_API_KEY, - secret=VONAGE_API_SECRET +from vonage import Auth, Vonage +from vonage_application import ( + ApplicationConfig, + ApplicationData, + ApplicationUrl, + Capabilities, + Messages, + MessagesWebhooks, + Region, + Verify, + VerifyWebhooks, + Voice, + VoiceUrl, + VoiceWebhooks, +) + +client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET)) + +# Voice application options +voice = Voice( + webhooks=VoiceWebhooks( + answer_url=VoiceUrl( + address='https://example.com/answer', + http_method='POST', + connect_timeout=500, + socket_timeout=3000, + ), + fallback_answer_url=VoiceUrl( + address='https://example.com/fallback', + http_method='POST', + connect_timeout=500, + socket_timeout=3000, + ), + event_url=VoiceUrl( + address='https://example.com/event', + http_method='POST', + connect_timeout=500, + socket_timeout=3000, + ), + ), + signed_callbacks=True, + conversations_ttl=8000, + leg_persistence_time=14, + region=Region.NA_EAST, +) + +# Messages application options +messages = Messages( + version='v1', + webhooks=MessagesWebhooks( + inbound_url=ApplicationUrl( + address='https://example.com/inbound', http_method='POST' + ), + status_url=ApplicationUrl( + address='https://example.com/status', http_method='POST' + ), + ), + authenticate_inbound_media=True, ) -response = client.application.create_application({ - "name": "Code Example App", - "capabilities": { - "messages": { - "webhooks": { - "inbound_url": { - "address": "https://example.com/webhooks/inbound", - "http_method": "POST" - }, - "status_url": { - "address": "https://example.com/webhooks/status", - "http_method": "POST" - } - } - } - } -}) - -pprint(response) +# Verify application options +verify = Verify( + webhooks=VerifyWebhooks( + status_url=ApplicationUrl(address='https://example.com/status', http_method='GET') + ), +) + +# Set the application capabilities +capabilities = Capabilities(voice=voice, messages=messages, verify=verify) + +# Set the application configuration that will be applied +params = ApplicationConfig( + name='My Custom Application', + capabilities=capabilities, +) + +# Call the API +response: ApplicationData = client.application.create_application(params) + +print(response) diff --git a/application/delete-application.py b/application/delete-application.py index 4113c2a..4e603d2 100644 --- a/application/delete-application.py +++ b/application/delete-application.py @@ -1,9 +1,7 @@ #!/usr/bin/env python3 import os from os.path import join, dirname -from pprint import pprint from dotenv import load_dotenv -import vonage dotenv_path = join(dirname(__file__), "../.env") load_dotenv(dotenv_path) @@ -12,11 +10,8 @@ VONAGE_API_SECRET = os.getenv('VONAGE_API_SECRET') VONAGE_APPLICATION_ID = os.getenv('VONAGE_APPLICATION_ID') -client = vonage.Client( - key=VONAGE_API_KEY, - secret=VONAGE_API_SECRET -) +from vonage import Auth, Vonage -response = client.application.delete_application(VONAGE_APPLICATION_ID) +client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET)) -pprint(response) +client.application.delete_application(VONAGE_APPLICATION_ID) diff --git a/application/get-application.py b/application/get-application.py index 6391886..d5beb04 100644 --- a/application/get-application.py +++ b/application/get-application.py @@ -1,9 +1,7 @@ #!/usr/bin/env python3 import os from os.path import join, dirname -from pprint import pprint from dotenv import load_dotenv -import vonage dotenv_path = join(dirname(__file__), "../.env") load_dotenv(dotenv_path) @@ -11,11 +9,12 @@ VONAGE_API_KEY = os.getenv('VONAGE_API_KEY') VONAGE_API_SECRET = os.getenv('VONAGE_API_SECRET') VONAGE_APPLICATION_ID = os.getenv('VONAGE_APPLICATION_ID') -client = vonage.Client( - key=VONAGE_API_KEY, - secret=VONAGE_API_SECRET -) -response = client.application.get_application(VONAGE_APPLICATION_ID) +from vonage import Auth, Vonage +from vonage_application import ApplicationData -pprint(response) +client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET)) + +response: ApplicationData = client.application.get_application(VONAGE_APPLICATION_ID) + +print(response) diff --git a/application/list-applications.py b/application/list-applications.py index a6bbf21..ccae511 100644 --- a/application/list-applications.py +++ b/application/list-applications.py @@ -1,10 +1,7 @@ #!/usr/bin/env python3 import os from os.path import join, dirname -from pprint import pprint from dotenv import load_dotenv -import vonage - dotenv_path = join(dirname(__file__), "../.env") load_dotenv(dotenv_path) @@ -12,11 +9,13 @@ VONAGE_API_KEY = os.getenv('VONAGE_API_KEY') VONAGE_API_SECRET = os.getenv('VONAGE_API_SECRET') -client = vonage.Client( - key=VONAGE_API_KEY, - secret=VONAGE_API_SECRET -) +from vonage import Auth, Vonage +from vonage_application import ListApplicationsFilter -response = client.application.list_applications() +client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET)) + +applications, next_page = client.application.list_applications( + filter=ListApplicationsFilter(page_size=10, page=1) +) -pprint(response) +print(f'Applications:\n{applications}, \nNext page: {next_page}') diff --git a/application/update-application.py b/application/update-application.py index 83814ce..9544a15 100644 --- a/application/update-application.py +++ b/application/update-application.py @@ -1,9 +1,7 @@ #!/usr/bin/env python3 import os from os.path import join, dirname -from pprint import pprint from dotenv import load_dotenv -import vonage dotenv_path = join(dirname(__file__), "../.env") load_dotenv(dotenv_path) @@ -12,48 +10,33 @@ VONAGE_API_SECRET = os.getenv('VONAGE_API_SECRET') VONAGE_APPLICATION_ID = os.getenv('VONAGE_APPLICATION_ID') -client = vonage.Client( - key=VONAGE_API_KEY, - secret=VONAGE_API_SECRET +from vonage import Auth, Vonage +from vonage_application import ( + ApplicationConfig, + ApplicationData, + ApplicationUrl, + Messages, + MessagesWebhooks, ) -response = client.application.update_application(VONAGE_APPLICATION_ID, { - "name": "Python Update App", - "capabilities": { - "messages": { - "webhooks": { - "inbound_url": { - "address": "https://example.com/webhooks/inbound", - "http_method": "POST" - }, - "status_url": { - "address": "https://example.com/webhooks/status", - "http_method": "POST" - } - } - }, - "voice": { - "webhooks": { - "answer_url": { - "address": "https://example.com/webhooks/answer", - "http_method": "POST" - }, - "event_url": { - "address": "https://example.com/webhooks/event", - "http_method": "POST" - } - } - }, - "rtc": { - "webhooks": { - "event_url": { - "address": "https://example.com/webhooks/event", - "http_method": "POST" - } - } - }, - "vbc": {} - } -}) +client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET)) -pprint(response) +config = ApplicationConfig( + name='My Renamed Application', + capabilities=Messages( + webhooks=MessagesWebhooks( + inbound_url=ApplicationUrl( + address='https://example.com/inbound_new_url', http_method='GET' + ), + status_url=ApplicationUrl( + address='https://example.com/status_new_url', http_method='GET' + ), + ), + authenticate_inbound_media=False, + ), +) +response: ApplicationData = client.application.update_application( + id=VONAGE_APPLICATION_ID, config=config +) + +print(response) diff --git a/users/create-user.py b/users/create-user.py new file mode 100644 index 0000000..7a540a2 --- /dev/null +++ b/users/create-user.py @@ -0,0 +1,31 @@ +import os +from os.path import join, dirname +from dotenv import load_dotenv + +# Load the environment +envpath = join(dirname(__file__), "../.env") +load_dotenv(envpath) + +VONAGE_APPLICATION_ID = os.getenv('VONAGE_APPLICATION_ID') +VONAGE_APPLICATION_PRIVATE_KEY_PATH = os.getenv('VONAGE_APPLICATION_PRIVATE_KEY_PATH') +USER_NAME = os.getenv('USER_NAME') +USER_DISPLAY_NAME = os.getenv('USER_DISPLAY_NAME') + +from vonage import Auth, Vonage +from vonage_users import Channels, PstnChannel, User + +client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_APPLICATION_PRIVATE_KEY_PATH, + ) +) + +user_options = User( + name=USER_NAME, + display_name=USER_DISPLAY_NAME, + channels=Channels(pstn=[PstnChannel(number=123456)]), +) +user = client.users.create_user(user_options) + +print(user) diff --git a/users/delete-user.py b/users/delete-user.py new file mode 100644 index 0000000..ed91b77 --- /dev/null +++ b/users/delete-user.py @@ -0,0 +1,21 @@ +import os +from os.path import join, dirname +from dotenv import load_dotenv + +# Load the environment +envpath = join(dirname(__file__), "../.env") +load_dotenv(envpath) + +VONAGE_APPLICATION_ID = os.getenv('VONAGE_APPLICATION_ID') +VONAGE_APPLICATION_PRIVATE_KEY_PATH = os.getenv('VONAGE_APPLICATION_PRIVATE_KEY_PATH') +USER_ID = os.getenv('USER_ID') + +from vonage import Auth, Vonage + +client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_APPLICATION_PRIVATE_KEY_PATH, + ) +) +client.users.delete_user(USER_ID) diff --git a/users/get-user.py b/users/get-user.py new file mode 100644 index 0000000..5fbf290 --- /dev/null +++ b/users/get-user.py @@ -0,0 +1,24 @@ +import os +from os.path import join, dirname +from dotenv import load_dotenv + +# Load the environment +envpath = join(dirname(__file__), "../.env") +load_dotenv(envpath) + +VONAGE_APPLICATION_ID = os.getenv('VONAGE_APPLICATION_ID') +VONAGE_APPLICATION_PRIVATE_KEY_PATH = os.getenv('VONAGE_APPLICATION_PRIVATE_KEY_PATH') +USER_ID = os.getenv('USER_ID') + +from vonage import Auth, Vonage +from vonage_users import User + +client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_APPLICATION_PRIVATE_KEY_PATH, + ) +) +user: User = client.users.get_user(USER_ID) + +print(user) diff --git a/users/list-users.py b/users/list-users.py new file mode 100644 index 0000000..0138db0 --- /dev/null +++ b/users/list-users.py @@ -0,0 +1,23 @@ +import os +from os.path import join, dirname +from dotenv import load_dotenv + +# Load the environment +envpath = join(dirname(__file__), "../.env") +load_dotenv(envpath) + +VONAGE_APPLICATION_ID = os.getenv('VONAGE_APPLICATION_ID') +VONAGE_APPLICATION_PRIVATE_KEY_PATH = os.getenv('VONAGE_APPLICATION_PRIVATE_KEY_PATH') + +from vonage import Auth, Vonage + +client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_APPLICATION_PRIVATE_KEY_PATH, + ) +) + +users_list, next_page_cursor = client.users.list_users() + +print(users_list) diff --git a/users/update-user.py b/users/update-user.py new file mode 100644 index 0000000..30bac7b --- /dev/null +++ b/users/update-user.py @@ -0,0 +1,34 @@ +import os +from os.path import join, dirname +from dotenv import load_dotenv + +# Load the environment +envpath = join(dirname(__file__), "../.env") +load_dotenv(envpath) + +VONAGE_APPLICATION_ID = os.getenv('VONAGE_APPLICATION_ID') +VONAGE_APPLICATION_PRIVATE_KEY_PATH = os.getenv('VONAGE_APPLICATION_PRIVATE_KEY_PATH') +USER_NEW_NAME = os.getenv('USER_NEW_NAME') +USER_NEW_DISPLAY_NAME = os.getenv('USER_NEW_DISPLAY_NAME') +USER_ID = os.getenv('USER_ID') + +from vonage import Auth, Vonage +from vonage_users import Channels, PstnChannel, SmsChannel, User + +client = Vonage( + Auth( + application_id=VONAGE_APPLICATION_ID, + private_key=VONAGE_APPLICATION_PRIVATE_KEY_PATH, + ) +) + +user_params = User( + name=USER_NEW_NAME, + display_name=USER_NEW_DISPLAY_NAME, + channels=Channels( + sms=[SmsChannel(number='1234567890')], pstn=[PstnChannel(number=123456)] + ), +) +user: User = client.users.update_user(id=USER_ID, params=user_params) + +print(user)