The purpose of these Code Snippets is to provide simple examples focused on one goal. For example, sending an SMS, creating a Vonage Video API session, handling an incoming webhook, or making a Text-to-Speech call.
- Setup
- Running the Examples
- SDK Structure
- How the SDK Handles Errors
- Troubleshooting
- Useful Resources
- Request an Example
- License
- Python Code Snippets
These code samples are meant to be embedded into pages on https://developer.vonage.com/. Developers are free to use these code snippets as a reference, but these may require changes to be worked into your specific application. We recommend checking out the Vonage Developer Website, which displays these code snippets in a more copy/paste fashion.
To use the examples, you will first need a Vonage account. Then rename
the .env.dist
file to .env
and set the values as required.
For some of the examples you will need to buy a number.
If you would like to run these examples yourself, you will need to do the following:
Use a virtual environment:
# Create the virtual environment
python3 -m venv venv
# Activate the virtual environment in Mac/Linux
. ./venv/bin/activate
# Or on Windows Command Prompt
venv\Scripts\activate
Install the dependencies:
pip install -r requirements.txt
Run the code:
For samples that don't use a web server, run with python, e.g.
python sms/send-an-sms.py
For samples that require a web server, run with FastAPI, e.g.
fastapi dev messages/inbound-message.py
The SDK is a monorepo - lots of packages in a single place. In the SDK, we have:
- The top-level package
vonage
, which pulls in all the other packages you need. - A package referring to every API supported in the SDK (
vonage-sms
,vonage-voice
,vonage-video
etc.) - Internal packages for making HTTP requests, creating JWTs etc. (
vonage-http-client
,vonage-jwt
etc.) - A utilities package (
vonage-utils
)
There are important things to note:
- The
vonage
package instantiates each of the API packages. For example, you can callvonage.voice.any_method_from_the_voice_class
. This means you don’t have to instantiate packages that you need separately. - Many of the APIs require input data from the user. This is passed in through data models that you will find in the package for the specific API you want to call. This was intentional so the user doesn’t immediately import every data model from every single API whenever they import the top-level package, which would make it harder to find what is actually needed in an IDE, and allows for models with the same names in different namespaces.
For example, to use a VerifyRequest
object from the vonage-verify
package, you’ll need to first import the vonage
package to get the Auth
object and the Verify
methods, then import VerifyRequest
from the vonage-verify
package, like so:
from vonage import Auth, Vonage
from vonage_verify import VerifyRequest, SmsChannel
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_APPLICATION_PRIVATE_KEY_PATH,
)
)
verify_request = VerifyRequest(
brand=BRAND_NAME,
workflow=[
SmsChannel(to=TO_NUMBER),
],
)
response = vonage_client.verify.start_verification(verify_request)
This is explained in more detail in the blog post shared above. You can also find full, working examples in the Python Code Snippets repo.
If you’re working with e.g. the Voice API, if you know you’re likely to use many of the data models, you can import them all into your app’s namespace (making it easier for your autocomplete etc. to find them) with the *
operator, e.g.
from vonage_voice import *
request = CreateCallRequest(...)
It’s usually considered better practice to import just what you need, but using this method means the data models will all be available to you if you need to do some quick testing.
The Vonage Python SDK has various different classes of errors:
- Some regular Python/package errors that can be raised during the course of SDK operation
- The top-level
VonageError
, that custom SDK errors inherit from - Errors raised when using some packages, e.g.
VerifyError
- Errors raised by the HTTP client
It’s likely that when troubleshooting, you’ll especially see HTTP request errors, so let’s discuss these.
This is a class of errors raised when actually making the HTTP request or when receiving an HTTP response.
The high-level error here is the HttpRequestError
. There are other errors which are based on this and have the same properties, but different names that are more specific to the HTTP status code received from the Vonage server, e.g. an AuthenticationError
or a NotFoundError
.
Each error of this type has properties that can be accessed when the error is caught, i.e. if you have a try-except block which catches an error, you can then access the error message and the response object which has additional information. This can be useful for debugging.
To catch an error in this way, do this:
try:
vonage_client.call_vonage_api(...)
except HttpRequestError as e:
print(‘Request failed:’)
print(e.message)
print(e.response.text)
You can access any information about the request or the response from the e.response
object.
Whether or not an HTTP request was successful, you can access the last request and response sent by accessing the relevant HTTP client attributes like this:
vonage_client.http_client.last_request
vonage_client.http_client.last_response
For example, to see the last request body and headers sent by the SDK, you can do:
print(vonage_client.http_client.last_request.body)
print(vonage_client.http_client.last_request.headers)
If the SDK returns an AuthenticationError
, this is because the Vonage Server was not able to authenticate the SDK user. In this case, you should check the authentication details that were provided.
- Vonage Python SDK on Github
- Vonage Python SDK on PyPI
- Python SDK introduction blog
- Migration guide from old to new SDK
Please raise an issue to request an example that isn't present within the quickstart. Pull requests will be gratefully received.
This is a list of all supported Python code snippets in the repo, organised by category.
- Account
- Application
- Decode Jwt
- Messages
- Number Insight
- Numbers
- Sms
- Subaccounts
- Users
- Verify
- Verify_Legacy
- Voice
from vonage import Auth, Vonage
from vonage_account import SettingsResponse
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
settings: SettingsResponse = client.account.update_default_sms_webhook(
mo_callback_url=ACCOUNT_SMS_CALLBACK_URL
)
print(settings)
from vonage import Auth, Vonage
from vonage_account import VonageApiSecret
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
response: VonageApiSecret = client.account.create_secret(ACCOUNT_SECRET)
print(response)
from vonage import Auth, Vonage
from vonage_account import VonageApiSecret
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
secret: VonageApiSecret = client.account.get_secret(ACCOUNT_SECRET_ID)
print(f'Secret ID: {secret.id}; Created at {secret.created_at}')
from vonage import Auth, Vonage
from vonage_account import Balance
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
balance: Balance = client.account.get_balance()
print(f'{balance.value:0.2f} EUR, auto-reload: {balance.auto_reload}')
from vonage import Auth, Vonage
from vonage_account import VonageApiSecret
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
response: list[VonageApiSecret] = client.account.list_secrets()
print(response)
from vonage import Auth, Vonage
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
client.account.revoke_secret(ACCOUNT_SECRET_ID)
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,
)
# 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)
from vonage import Auth, Vonage
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
client.application.delete_application(VONAGE_APPLICATION_ID)
from vonage import Auth, Vonage
from vonage_application import ApplicationData
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
response: ApplicationData = client.application.get_application(VONAGE_APPLICATION_ID)
print(response)
from vonage import Auth, Vonage
from vonage_application import ListApplicationsFilter
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(f'Applications:\n{applications}, \nNext page: {next_page}')
from vonage import Auth, Vonage
from vonage_application import (ApplicationConfig, ApplicationData,
ApplicationUrl, Messages, MessagesWebhooks)
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
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)
import os
from os.path import dirname, join
from dotenv import load_dotenv
# Load the environment
envpath = join(dirname(__file__), '../.env')
load_dotenv(envpath)
VONAGE_SIGNATURE_SECRET = os.getenv('VONAGE_SIGNATURE_SECRET')
from fastapi import FastAPI, Request
from vonage_jwt.verify_jwt import verify_signature
app = FastAPI()
@app.get('/events')
async def verify_signed_webhook(request: Request):
# Need to get the JWT after "Bearer " in the authorization header
auth_header = request.headers["authorization"].split()
token = auth_header[1].strip()
if verify_signature(token, VONAGE_SIGNATURE_SECRET):
print('Valid signature')
else:
print('Invalid signature')
- Inbound Message
- Message Status
- Messenger Send Audio
- Messenger Send File
- Messenger Send Image
- Messenger Send Text
- Messenger Send Video
- Mms Send Audio
- Mms Send Image
- Mms Send Vcard
- Mms Send Video
- Rcs Revoke Message
- Rcs Send File
- Rcs Send Image
- Rcs Send Rich Card Carousel
- Rcs Send Rich Card Standalone
- Rcs Send Suggested Action Create Calendar Event
- Rcs Send Suggested Action Dial
- Rcs Send Suggested Action Multiple
- Rcs Send Suggested Action Open Url
- Rcs Send Suggested Action Share Location
- Rcs Send Suggested Action View Location
- Rcs Send Suggested Reply
- Rcs Send Text
- Rcs Send Video
- Sandbox Messenger Send_Text
- Sandbox Viber Send_Text
- Sandbox Whatsapp Send_Text
- Sms Send Sms
- Verify Signed Webhooks
- Viber Send File
- Viber Send Image
- Viber Send Text
- Viber Send Video
- Webhook Server
- Whatsapp Mark As Read
- Whatsapp Send Audio
- Whatsapp Send Authentication Template
- Whatsapp Send Button Link
- Whatsapp Send Button Quick Reply
- Whatsapp Send Contact
- Whatsapp Send File
- Whatsapp Send Image
- Whatsapp Send Location
- Whatsapp Send Media Template
- Whatsapp Send Product Message Multiple Item
- Whatsapp Send Product Message Single Item
- Whatsapp Send Sticker By Id
- Whatsapp Send Sticker By Url
- Whatsapp Send Template
- Whatsapp Send Text
- Whatsapp Send Video
from pprint import pprint
from fastapi import FastAPI, Request
app = FastAPI()
@app.post('/webhooks/inbound-message')
async def inbound_message(request: Request):
data = await request.json()
pprint(data)
from pprint import pprint
from fastapi import FastAPI, Request, status
app = FastAPI()
@app.post('/webhooks/message-status', status_code=status.HTTP_200_OK)
async def message_status(request: Request):
data = await request.json()
pprint(data)
from vonage import Auth, Vonage
from vonage_messages import MessengerAudio, MessengerResource
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = MessengerAudio(
to=MESSENGER_RECIPIENT_ID,
from_=MESSENGER_SENDER_ID,
audio=MessengerResource(url=MESSAGES_AUDIO_URL),
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import MessengerFile, MessengerResource
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = MessengerFile(
to=MESSENGER_RECIPIENT_ID,
from_=MESSENGER_SENDER_ID,
file=MessengerResource(url=MESSAGES_FILE_URL),
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import MessengerImage, MessengerResource
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = MessengerImage(
to=MESSENGER_RECIPIENT_ID,
from_=MESSENGER_SENDER_ID,
image=MessengerResource(url=MESSAGES_IMAGE_URL),
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import MessengerText
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = MessengerText(
to=MESSENGER_RECIPIENT_ID,
from_=MESSENGER_SENDER_ID,
text='Hello from the Vonage Messages API.',
)
try:
response = client.messages.send(message)
print(response)
except Exception as e:
print(e)
print(client.http_client.last_request.url)
from vonage import Auth, Vonage
from vonage_messages import MessengerResource, MessengerVideo
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = MessengerVideo(
to=MESSENGER_RECIPIENT_ID,
from_=MESSENGER_SENDER_ID,
video=MessengerResource(url=MESSAGES_VIDEO_URL),
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import MmsAudio, MmsResource
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = MmsAudio(
to=MESSAGES_TO_NUMBER,
from_=MMS_SENDER_ID,
audio=MmsResource(url=MESSAGES_AUDIO_URL),
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import MmsImage, MmsResource
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = MmsImage(
to=MESSAGES_TO_NUMBER,
from_=MMS_SENDER_ID,
image=MmsResource(url=MESSAGES_IMAGE_URL),
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import MmsResource, MmsVcard
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = MmsVcard(
to=MESSAGES_TO_NUMBER,
from_=MMS_SENDER_ID,
vcard=MmsResource(url=MESSAGES_VCARD_URL),
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import MmsResource, MmsVideo
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = MmsVideo(
to=MESSAGES_TO_NUMBER,
from_=MMS_SENDER_ID,
video=MmsResource(url=MESSAGES_VIDEO_URL),
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
client = Vonage(
auth=Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
response = client.messages.revoke_rcs_message(MESSAGES_MESSAGE_ID)
print(response)
from vonage import Auth, Vonage
from vonage_messages import RcsFile, RcsResource
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = RcsFile(
to=MESSAGES_TO_NUMBER,
from_=RCS_SENDER_ID,
file=RcsResource(url=MESSAGES_FILE_URL),
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import RcsImage, RcsResource
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = RcsImage(
to=MESSAGES_TO_NUMBER,
from_=RCS_SENDER_ID,
image=RcsResource(url=MESSAGES_IMAGE_URL),
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import RcsCustom
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
custom_dict = {
"contentMessage": {
"richCard": {
"carouselCard": {
"cardWidth": "MEDIUM",
"cardContents": [
{
"title": "Option 1: Photo",
"description": "Do you prefer this photo?",
"suggestions": [
{
"reply": {
"text": "Option 1",
"postbackData": "card_1",
}
}
],
"media": {
"height": "MEDIUM",
"contentInfo": {
"fileUrl": MESSAGES_IMAGE_URL,
"forceRefresh": "false",
},
},
},
{
"title": "Option 2: Video",
"description": "Or this video?",
"suggestions": [
{
"reply": {
"text": "Option 2",
"postbackData": "card_2",
}
}
],
"media": {
"height": "MEDIUM",
"contentInfo": {
"fileUrl": MESSAGES_VIDEO_URL,
"forceRefresh": "false",
},
},
},
],
}
}
}
}
message = RcsCustom(
to=MESSAGES_TO_NUMBER,
from_=RCS_SENDER_ID,
custom=custom_dict,
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import RcsCustom
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
custom_dict = {
"contentMessage": {
"richCard": {
"standaloneCard": {
"thumbnailImageAlignment": "RIGHT",
"cardOrientation": "VERTICAL",
"cardContent": {
"title": "Quick question",
"description": "Do you like this picture?",
"media": {
"height": "TALL",
"contentInfo": {
"fileUrl": MESSAGES_IMAGE_URL,
"forceRefresh": "false",
},
},
"suggestions": [
{
"reply": {
"text": "Yes",
"postbackData": "suggestion_1",
}
},
{
"reply": {
"text": "I love it!",
"postbackData": "suggestion_2",
}
},
],
},
}
}
}
}
message = RcsCustom(
to=MESSAGES_TO_NUMBER,
from_=RCS_SENDER_ID,
custom=custom_dict,
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import RcsCustom
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
custom_dict = {
"contentMessage": {
"text": "Product Launch: Save the date!",
"suggestions": [
{
"action": {
"text": "Save to calendar",
"postbackData": "postback_data_1234",
"fallbackUrl": "https://www.google.com/calendar",
"createCalendarEventAction": {
"startTime": "2024-06-28T19:00:00Z",
"endTime": "2024-06-28T20:00:00Z",
"title": "Vonage API Product Launch",
"description": "Event to demo Vonage\'s new and exciting API product",
},
}
}
],
}
}
message = RcsCustom(
to=MESSAGES_TO_NUMBER,
from_=RCS_SENDER_ID,
custom=custom_dict,
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import RcsCustom
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
custom_dict = {
"contentMessage": {
"text": "Call us to claim your free gift!",
"suggestions": [
{
"action": {
"text": "Call now!",
"postbackData": "postback_data_1234",
"fallbackUrl": "https://www.example.com/contact/",
"dialAction": {"phoneNumber": "+447900000000"},
}
}
],
}
}
message = RcsCustom(
to=MESSAGES_TO_NUMBER,
from_=RCS_SENDER_ID,
custom=custom_dict,
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import RcsCustom
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
custom_dict = {
"contentMessage": {
"text": "Need some help? Call us now or visit our website for more information.",
"suggestions": [
{
"action": {
"text": "Call us",
"postbackData": "postback_data_1234",
"fallbackUrl": "https://www.example.com/contact/",
"dialAction": {"phoneNumber": "+447900000000"},
}
},
{
"action": {
"text": "Visit site",
"postbackData": "postback_data_1234",
"openUrlAction": {"url": "http://example.com/"},
}
},
],
}
}
message = RcsCustom(
to=MESSAGES_TO_NUMBER,
from_=RCS_SENDER_ID,
custom=custom_dict,
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import RcsCustom
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
custom_dict = {
"contentMessage": {
"text": "Check out our latest offers!",
"suggestions": [
{
"action": {
"text": "Open product page",
"postbackData": "postback_data_1234",
"openUrlAction": {"url": "http://example.com/"},
}
}
],
}
}
message = RcsCustom(
to=MESSAGES_TO_NUMBER,
from_=RCS_SENDER_ID,
custom=custom_dict,
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import RcsCustom
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
custom_dict = {
"contentMessage": {
"text": "Your driver will come and meet you at your specified location.",
"suggestions": [
{
"action": {
"text": "Share a location",
"postbackData": "postback_data_1234",
"shareLocationAction": {},
}
}
],
}
}
message = RcsCustom(
to=MESSAGES_TO_NUMBER,
from_=RCS_SENDER_ID,
custom=custom_dict,
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import RcsCustom
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
custom_dict = {
"contentMessage": {
"text": "Drop by our office!",
"suggestions": [
{
"action": {
"text": "View map",
"postbackData": "postback_data_1234",
"fallbackUrl": "https://www.google.com/maps/place/Vonage/@51.5230371,-0.0852492,15z",
"viewLocationAction": {
"latLong": {
"latitude": "51.5230371",
"longitude": "-0.0852492",
},
"label": "Vonage London Office",
},
}
}
],
}
}
message = RcsCustom(
to=MESSAGES_TO_NUMBER,
from_=RCS_SENDER_ID,
custom=custom_dict,
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import RcsCustom
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
custom_dict = {
"contentMessage": {
"text": "What do you think of Vonage APIs?",
"suggestions": [
{
"reply": {
"text": "They\'re great!",
"postbackData": "suggestion_1",
}
},
{
"reply": {
"text": "They\'re awesome!",
"postbackData": "suggestion_2",
}
},
],
}
}
message = RcsCustom(
to=MESSAGES_TO_NUMBER,
from_=RCS_SENDER_ID,
custom=custom_dict,
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import RcsText
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = RcsText(
to=MESSAGES_TO_NUMBER,
from_=RCS_SENDER_ID,
text="This is an RCS message sent via the Vonage Messages API.",
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import RcsResource, RcsVideo
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = RcsVideo(
to=MESSAGES_TO_NUMBER,
from_=RCS_SENDER_ID,
video=RcsResource(url=MESSAGES_VIDEO_URL),
)
response = client.messages.send(message)
print(response)
import os
from os.path import dirname, join
from dotenv import load_dotenv
dotenv_path = join(dirname(__file__), "../../../.env")
load_dotenv(dotenv_path)
VONAGE_APPLICATION_ID = os.environ.get("VONAGE_APPLICATION_ID")
VONAGE_PRIVATE_KEY = os.environ.get("VONAGE_PRIVATE_KEY")
MESSAGES_SANDBOX_HOST = os.environ.get("MESSAGES_SANDBOX_HOST")
MESSENGER_RECIPIENT_ID = os.environ.get("MESSENGER_RECIPIENT_ID")
MESSENGER_SENDER_ID = os.environ.get("MESSENGER_SENDER_ID")
from vonage import Auth, HttpClientOptions, Vonage
from vonage_messages import MessengerText
client = Vonage(
auth=Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
),
http_client_options=HttpClientOptions(api_host=MESSAGES_SANDBOX_HOST),
)
message = MessengerText(
to=MESSENGER_RECIPIENT_ID,
from_=MESSENGER_SENDER_ID,
text="This is a Facebook Messenger text message sent using the Vonage Messages API via the Messages Sandbox",
)
response = client.messages.send(message)
print(response)
import os
from os.path import dirname, join
from dotenv import load_dotenv
dotenv_path = join(dirname(__file__), "../../../.env")
load_dotenv(dotenv_path)
VONAGE_APPLICATION_ID = os.environ.get("VONAGE_APPLICATION_ID")
VONAGE_PRIVATE_KEY = os.environ.get("VONAGE_PRIVATE_KEY")
MESSAGES_SANDBOX_HOST = os.environ.get("MESSAGES_SANDBOX_HOST")
MESSAGES_TO_NUMBER = os.environ.get("MESSAGES_TO_NUMBER")
VIBER_SENDER_ID = os.environ.get("VIBER_SENDER_ID")
from vonage import Auth, HttpClientOptions, Vonage
from vonage_messages import ViberText
client = Vonage(
auth=Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
),
http_client_options=HttpClientOptions(api_host=MESSAGES_SANDBOX_HOST),
)
message = ViberText(
to=MESSAGES_TO_NUMBER,
from_=VIBER_SENDER_ID,
text="This is a Viber Service Message text message sent using the Messages API via the Messages Sandbox",
)
response = client.messages.send(message)
print(response)
import os
from os.path import dirname, join
from dotenv import load_dotenv
dotenv_path = join(dirname(__file__), "../../../.env")
load_dotenv(dotenv_path)
VONAGE_APPLICATION_ID = os.environ.get("VONAGE_APPLICATION_ID")
VONAGE_PRIVATE_KEY = os.environ.get("VONAGE_PRIVATE_KEY")
MESSAGES_SANDBOX_HOST = os.environ.get("MESSAGES_SANDBOX_HOST")
MESSAGES_TO_NUMBER = os.environ.get("MESSAGES_TO_NUMBER")
WHATSAPP_SENDER_ID = os.environ.get("WHATSAPP_SENDER_ID")
from vonage import Auth, HttpClientOptions, Vonage
from vonage_messages import WhatsappText
client = Vonage(
auth=Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
),
http_client_options=HttpClientOptions(api_host=MESSAGES_SANDBOX_HOST),
)
message = WhatsappText(
to=MESSAGES_TO_NUMBER,
from_=WHATSAPP_SENDER_ID,
text="This is a WhatsApp text message sent using the Vonage Messages API via the Messages Sandbox",
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import Sms
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
response = client.messages.send(
Sms(
to=MESSAGES_TO_NUMBER,
from_=SMS_SENDER_ID,
text='This is an SMS sent using the Vonage Messages API.',
)
)
print(response)
import os
from os.path import dirname, join
from dotenv import load_dotenv
# Load the environment
envpath = join(dirname(__file__), '../.env')
load_dotenv(envpath)
VONAGE_SIGNATURE_SECRET = os.getenv('VONAGE_SIGNATURE_SECRET')
from fastapi import FastAPI, Request
from vonage_jwt.verify_jwt import verify_signature
app = FastAPI()
@app.get('/inbound')
async def verify_signed_webhook(request: Request):
# Need to get the JWT after "Bearer " in the authorization header
auth_header = request.headers["authorization"].split()
token = auth_header[1].strip()
if verify_signature(token, VONAGE_SIGNATURE_SECRET):
print('Valid signature')
else:
print('Invalid signature')
from vonage import Auth, Vonage
from vonage_messages import ViberFile, ViberFileResource
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = ViberFile(
to=MESSAGES_TO_NUMBER,
from_=VIBER_SENDER_ID,
file=ViberFileResource(url=MESSAGES_FILE_URL),
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import ViberImage, ViberImageResource
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = ViberImage(
to=MESSAGES_TO_NUMBER,
from_=VIBER_SENDER_ID,
image=ViberImageResource(url=MESSAGES_IMAGE_URL),
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import ViberText
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = ViberText(
to=MESSAGES_TO_NUMBER,
from_=VIBER_SENDER_ID,
text="This is a Viber message sent via the Vonage Messages API.",
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import ViberVideo, ViberVideoOptions, ViberVideoResource
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = ViberVideo(
to=MESSAGES_TO_NUMBER,
from_=VIBER_SENDER_ID,
video=ViberVideoResource(url=MESSAGES_VIDEO_URL, thumb_url=MESSAGES_IMAGE_URL),
viber_service=ViberVideoOptions(
duration=MESSAGES_VIDEO_DURATION,
file_size=MESSAGES_VIDEO_FILE_SIZE,
),
)
response = client.messages.send(message)
print(response)
from pprint import pprint
from fastapi import FastAPI, Request, status
app = FastAPI()
@app.post('/webhooks/message-status', status_code=status.HTTP_200_OK)
async def message_status(request: Request):
data = await request.json()
pprint(data)
@app.post('/webhooks/inbound-message')
async def inbound_message(request: Request):
data = await request.json()
pprint(data)
import os
from os.path import dirname, join
from dotenv import load_dotenv
dotenv_path = join(dirname(__file__), "../../.env")
load_dotenv(dotenv_path)
VONAGE_APPLICATION_ID = os.environ.get("VONAGE_APPLICATION_ID")
VONAGE_PRIVATE_KEY = os.environ.get("VONAGE_PRIVATE_KEY")
GEOSPECIFIC_MESSAGES_API_URL = os.environ.get("GEOSPECIFIC_MESSAGES_API_URL")
MESSAGES_MESSAGE_ID = os.environ.get("MESSAGES_MESSAGE_ID")
from vonage import Auth, HttpClientOptions, Vonage
client = Vonage(
auth=Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
),
http_client_options=HttpClientOptions(api_host=GEOSPECIFIC_MESSAGES_API_URL),
)
client.messages.mark_whatsapp_message_read("MESSAGES_MESSAGE_ID")
import os
from os.path import dirname, join
from dotenv import load_dotenv
dotenv_path = join(dirname(__file__), "../../.env")
load_dotenv(dotenv_path)
VONAGE_APPLICATION_ID = os.environ.get("VONAGE_APPLICATION_ID")
VONAGE_PRIVATE_KEY = os.environ.get("VONAGE_PRIVATE_KEY")
MESSAGES_TO_NUMBER = os.environ.get("MESSAGES_TO_NUMBER")
WHATSAPP_SENDER_ID = os.environ.get("WHATSAPP_SENDER_ID")
MESSAGES_AUDIO_URL = os.environ.get("MESSAGES_AUDIO_URL")
from vonage import Auth, HttpClientOptions, Vonage
from vonage_messages import WhatsappAudio, WhatsappAudioResource
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
),
http_client_options=HttpClientOptions(api_host='messages-sandbox.nexmo.com'),
)
message = WhatsappAudio(
to=MESSAGES_TO_NUMBER,
from_=WHATSAPP_SENDER_ID,
audio=WhatsappAudioResource(url=MESSAGES_AUDIO_URL, caption="Test audio file"),
)
response = client.messages.send(message)
print(response)
import os
from os.path import dirname, join
from dotenv import load_dotenv
dotenv_path = join(dirname(__file__), "../../.env")
load_dotenv(dotenv_path)
VONAGE_APPLICATION_ID = os.environ.get("VONAGE_APPLICATION_ID")
VONAGE_PRIVATE_KEY = os.environ.get("VONAGE_PRIVATE_KEY")
MESSAGES_TO_NUMBER = os.environ.get("MESSAGES_TO_NUMBER")
WHATSAPP_SENDER_ID = os.environ.get("WHATSAPP_SENDER_ID")
WHATSAPP_TEMPLATE_NAME = os.environ.get("WHATSAPP_TEMPLATE_NAME")
WHATSAPP_OTP = os.environ.get("WHATSAPP_OTP")
from vonage import Auth, HttpClientOptions, Vonage
from vonage_messages import WhatsappCustom
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
),
http_client_options=HttpClientOptions(api_host='messages-sandbox.nexmo.com'),
)
message = WhatsappCustom(
to=MESSAGES_TO_NUMBER,
from_=WHATSAPP_SENDER_ID,
custom={
"type": "template",
"template": {
"name": WHATSAPP_TEMPLATE_NAME,
"language": {"policy": "deterministic", "code": "en"},
"components": [
{"type": "body", "parameters": [{"type": "text", "text": "'$OTP'"}]},
{
"type": "button",
"sub_type": "url",
"index": "0",
"parameters": [{"type": "text", "text": WHATSAPP_OTP}],
},
],
},
},
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import WhatsappCustom
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = WhatsappCustom(
to=MESSAGES_TO_NUMBER,
from_=WHATSAPP_SENDER_ID,
custom={
"type": "template",
"template": {
"name": WHATSAPP_TEMPLATE_NAME,
"language": {"policy": "deterministic", "code": "en"},
"components": [
{
"type": "header",
"parameters": [
{
"type": "image",
"image": {
"link": MESSAGES_IMAGE_URL,
},
},
],
},
{
"type": "body",
"parameters": [
{"type": "text", "text": "Joe Bloggs"},
{"type": "text", "text": "AB123456"},
],
},
{
"type": "button",
"index": "0",
"sub_type": "url",
"parameters": [{"type": "text", "text": "AB123456"}],
},
],
},
},
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import WhatsappCustom
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = WhatsappCustom(
to=MESSAGES_TO_NUMBER,
from_=WHATSAPP_SENDER_ID,
custom={
"type": "template",
"template": {
"name": WHATSAPP_TEMPLATE_NAME,
"language": {"policy": "deterministic", "code": "en"},
"components": [
{
"type": "header",
"parameters": [
{
"type": "image",
"image": {
"link": MESSAGES_IMAGE_URL,
},
},
],
},
{
"type": "body",
"parameters": [
{
"type": "text",
"parameter_name": "customer_name",
"text": "Joe Bloggs",
},
{
"type": "text",
"parameter_name": "dentist_name",
"text": "Mr Smith",
},
{
"type": "text",
"parameter_name": "appointment_date",
"text": "2025-02-26",
},
{
"type": "text",
"parameter_name": "appointment_location",
"text": "ACME Dental Practice",
},
],
},
{
"type": "button",
"sub_type": "quick_reply",
"index": 0,
"parameters": [{"type": "payload", "payload": "Yes-Button-Payload"}],
},
{
"type": "button",
"sub_type": "quick_reply",
"index": 1,
"parameters": [{"type": "payload", "payload": "No-Button-Payload"}],
},
],
},
},
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import WhatsappCustom
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = WhatsappCustom(
to=MESSAGES_TO_NUMBER,
from_=WHATSAPP_SENDER_ID,
custom={
"type": "contacts",
"contacts": [
{
"addresses": [
{
"city": "Menlo Park",
"country": "United States",
"country_code": "us",
"state": "CA",
"street": "1 Hacker Way",
"type": "HOME",
"zip": "94025",
},
{
"city": "Menlo Park",
"country": "United States",
"country_code": "us",
"state": "CA",
"street": "200 Jefferson Dr",
"type": "WORK",
"zip": "94025",
},
],
"birthday": "2012-08-18",
"emails": [
{"email": "test@fb.com", "type": "WORK"},
{"email": "test@whatsapp.com", "type": "WORK"},
],
"name": {
"first_name": "John",
"formatted_name": "John Smith",
"last_name": "Smith",
},
"org": {
"company": "WhatsApp",
"department": "Design",
"title": "Manager",
},
"phones": [
{"phone": "+1 (940) 555-1234", "type": "HOME"},
{
"phone": "+1 (650) 555-1234",
"type": "WORK",
"wa_id": "16505551234",
},
],
"urls": [{"url": "https://www.facebook.com", "type": "WORK"}],
}
],
},
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import WhatsappFile, WhatsappFileResource
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = WhatsappFile(
to=MESSAGES_TO_NUMBER,
from_=WHATSAPP_SENDER_ID,
file=WhatsappFileResource(url=MESSAGES_FILE_URL, caption="Test file"),
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import WhatsappImage, WhatsappImageResource
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = WhatsappImage(
to=MESSAGES_TO_NUMBER,
from_=WHATSAPP_SENDER_ID,
image=WhatsappImageResource(url=MESSAGES_IMAGE_URL, caption="Test image"),
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import WhatsappCustom
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = WhatsappCustom(
to=MESSAGES_TO_NUMBER,
from_=WHATSAPP_SENDER_ID,
custom={
"type": "location",
"location": {
"longitude": -122.425332,
"latitude": 37.758056,
"name": "Facebook HQ",
"address": "1 Hacker Way, Menlo Park, CA 94025",
},
},
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import WhatsappCustom
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = WhatsappCustom(
to=MESSAGES_TO_NUMBER,
from_=WHATSAPP_SENDER_ID,
custom={
"type": "template",
"template": {
"name": WHATSAPP_TEMPLATE_NAME,
"language": {"policy": "deterministic", "code": "en"},
"components": [
{
"type": "header",
"parameters": [
{
"type": "image",
"image": {
"link": MESSAGES_IMAGE_URL,
},
},
],
},
{
"type": "body",
"parameters": [
{"type": "text", "text": "Joe Bloggs"},
{"type": "text", "text": "AB123456"},
],
},
],
},
},
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import WhatsappCustom
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = WhatsappCustom(
to=MESSAGES_TO_NUMBER,
from_=WHATSAPP_SENDER_ID,
custom={
'type': 'interactive',
'interactive': {
'type': 'product_list',
'header': {'type': 'text', 'text': 'Our top products'},
'body': {'text': 'Check out these great products'},
'footer': {'text': 'Sale now on!'},
'action': {
'catalog_id': WHATSAPP_CATALOG_ID,
'sections': [
{
'title': 'Cool products',
'product_items': [
{'WHATSAPP_PRODUCT_ID_1': WHATSAPP_PRODUCT_ID_1},
{'WHATSAPP_PRODUCT_ID_2': WHATSAPP_PRODUCT_ID_2},
],
},
{
'title': 'Awesome products',
'product_items': [
{'WHATSAPP_PRODUCT_ID_1': WHATSAPP_PRODUCT_ID_1}
],
},
],
},
},
},
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import WhatsappCustom
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = WhatsappCustom(
to=MESSAGES_TO_NUMBER,
from_=WHATSAPP_SENDER_ID,
custom={
'type': 'interactive',
'interactive': {
'type': 'product',
'body': {'text' 'Check out this cool product'},
'footer': {'text': 'Sale now on!'},
'action': {
'catalog_id': WHATSAPP_CATALOG_ID,
'product_retailer_id': WHATSAPP_PRODUCT_ID_1,
},
},
},
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import WhatsappSticker, WhatsappStickerId
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = WhatsappSticker(
to=MESSAGES_TO_NUMBER,
from_=WHATSAPP_SENDER_ID,
sticker=WhatsappStickerId(id=WHATSAPP_STICKER_ID),
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import WhatsappSticker, WhatsappStickerUrl
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = WhatsappSticker(
to=MESSAGES_TO_NUMBER,
from_=WHATSAPP_SENDER_ID,
sticker=WhatsappStickerUrl(url=WHATSAPP_STICKER_URL),
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import (WhatsappTemplate, WhatsappTemplateResource,
WhatsappTemplateSettings)
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = WhatsappTemplate(
to=MESSAGES_TO_NUMBER,
from_=WHATSAPP_SENDER_ID,
template=WhatsappTemplateResource(
name=WHATSAPP_TEMPLATE_NAME,
parameters=["Vonage Verification", "64873", "10"],
),
whatsapp=WhatsappTemplateSettings(
locale="en-GB",
policy="deterministic",
),
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import WhatsappText
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = WhatsappText(
to=MESSAGES_TO_NUMBER,
from_=WHATSAPP_SENDER_ID,
text='Hello from the Vonage Messages API.',
)
response = client.messages.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_messages import WhatsappVideo, WhatsappVideoResource
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
message = WhatsappVideo(
to=MESSAGES_TO_NUMBER,
from_=WHATSAPP_SENDER_ID,
video=WhatsappVideoResource(url=MESSAGES_VIDEO_URL, caption="Test video file"),
)
response = client.messages.send(message)
print(response)
from fastapi import FastAPI, Request
app = FastAPI()
@app.post('/webhooks/insight')
async def display_advanced_number_insight_info(request: Request):
data = await request.json()
print(data)
from vonage import Auth, Vonage
from vonage_number_insight import (AdvancedSyncInsightRequest,
AdvancedSyncInsightResponse)
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
insight: AdvancedSyncInsightResponse = client.number_insight.get_advanced_info_sync(
AdvancedSyncInsightRequest(number=INSIGHT_NUMBER)
)
pprint(insight)
from vonage import Auth, Vonage
from vonage_number_insight import (AdvancedAsyncInsightRequest,
AdvancedAsyncInsightResponse)
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
insight: AdvancedAsyncInsightResponse = client.number_insight.get_advanced_info_async(
AdvancedAsyncInsightRequest(number=INSIGHT_NUMBER, callback=INSIGHT_CALLBACK_URL)
)
pprint(insight)
from vonage import Auth, Vonage
from vonage_number_insight import BasicInsightRequest, BasicInsightResponse
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
insight: BasicInsightResponse = client.number_insight.get_basic_info(
BasicInsightRequest(number=INSIGHT_NUMBER)
)
pprint(insight)
from vonage import Auth, Vonage
from vonage_number_insight import (StandardInsightRequest,
StandardInsightResponse)
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
insight: StandardInsightResponse = client.number_insight.get_standard_info(
StandardInsightRequest(number=INSIGHT_NUMBER)
)
pprint(insight)
from vonage import Auth, Vonage
from vonage_numbers import NumberParams, NumbersStatus
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
status: NumbersStatus = client.numbers.buy_number(
params=NumberParams(
country=NUMBER_COUNTRY_CODE,
msisdn=NUMBER_MSISDN,
)
)
print(status.model_dump())
from vonage import Auth, Vonage
from vonage_numbers import NumberParams, NumbersStatus
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
status: NumbersStatus = client.numbers.cancel_number(
NumberParams(country=NUMBER_COUNTRY_CODE, msisdn=NUMBER_MSISDN)
)
print(status.model_dump())
from vonage import Auth, Vonage
from vonage_numbers import ListOwnedNumbersFilter
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
numbers, count, next = client.numbers.list_owned_numbers(
ListOwnedNumbersFilter(
pattern=NUMBER_SEARCH_CRITERIA, search_pattern=NUMBER_SEARCH_PATTERN
)
)
pprint(numbers)
print(count)
print(next)
from vonage import Auth, Vonage
from vonage_numbers import SearchAvailableNumbersFilter
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
numbers, count, next = client.numbers.search_available_numbers(
SearchAvailableNumbersFilter(
country=NUMBER_COUNTRY_CODE,
size=3,
pattern=NUMBER_SEARCH_CRITERIA,
search_pattern=NUMBER_SEARCH_PATTERN,
type=NUMBER_TYPE,
features=NUMBER_FEATURES,
)
)
pprint(numbers)
print(count)
print(next)
for number in numbers:
print(f'Tel: {number.msisdn} Cost: {number.cost}')
from vonage import Auth, Vonage
from vonage_numbers import NumbersStatus, UpdateNumberParams
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
status: NumbersStatus = client.numbers.update_number(
UpdateNumberParams(
country=NUMBER_COUNTRY_CODE,
msisdn=NUMBER_MSISDN,
app_id='vonage-application-id',
mo_http_url=NUMBER_SMS_CALLBACK_URL,
mo_smpp_sytem_type='inbound',
voice_callback_value=NUMBER_VOICE_CALLBACK_URL,
voice_status_callback=NUMBER_VOICE_STATUS_CALLBACK_URL,
)
)
print(status.model_dump())
- Delivery Receipts
- Receive Sms
- Send An Sms
- Send An Sms With Unicode
- Send Signed Sms
- Submit Sms Conversion
- Verify Signed Sms
from pprint import pprint
from fastapi import FastAPI, Request
app = FastAPI()
@app.post('/webhooks/delivery-receipt')
async def get_delivery_receipt(request: Request):
data = await request.json()
pprint(data)
from pprint import pprint
from fastapi import FastAPI, Request
app = FastAPI()
@app.post('/webhooks/inbound')
async def inbound_message(request: Request):
data = await request.json()
pprint(data)
from vonage import Auth, Vonage
from vonage_sms import SmsMessage, SmsResponse
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
message = SmsMessage(
to=SMS_TO_NUMBER,
from_=SMS_SENDER_ID,
text="A text message sent using the Vonage SMS API.",
)
response: SmsResponse = client.sms.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_sms import SmsMessage, SmsResponse
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
message = SmsMessage(
to=SMS_TO_NUMBER,
from_=SMS_SENDER_ID,
text='こんにちは世界',
type='unicode',
)
response: SmsResponse = client.sms.send(message)
print(response)
from vonage import Auth, Vonage
from vonage_sms import SmsMessage, SmsResponse
client = Vonage(Auth(api_key=VONAGE_API_KEY, signature_secret=SMS_SIGNATURE))
message = SmsMessage(
to=SMS_TO_NUMBER,
from_=SMS_SENDER_ID,
text="A text message sent using the Vonage SMS API.",
)
response: SmsResponse = client.sms.send(message)
print(response)
from vonage import Auth, Vonage
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
client.sms.submit_sms_conversion(
message_id='MESSAGE_ID',
delivered=True,
timestamp='2020-01-01T12:00:00Z',
)
if client.http_client.last_response.status_code == 200:
print('Conversion submitted successfully.')
else:
print('Conversion not submitted.')
import os
from os.path import dirname, join
from dotenv import load_dotenv
envpath = join(dirname(__file__), '../.env')
load_dotenv(envpath)
VONAGE_API_KEY = os.getenv("VONAGE_API_KEY")
VONAGE_SIGNATURE_SECRET = os.getenv("VONAGE_SIGNATURE_SECRET")
from fastapi import FastAPI, Request
from vonage import Auth, Vonage
client = Vonage(Auth(api_key=VONAGE_API_KEY, signature_secret=VONAGE_SIGNATURE_SECRET))
app = FastAPI()
@app.post('/')
async def verify_signed_webhook(request: Request):
data = await request.json()
if client.http_client.auth.check_signature(data):
print('Valid signature')
else:
print('Invalid signature')
- Create Subaccount
- Get Subaccount
- List Balance Transfers
- List Credit Transfers
- List Subaccounts
- Reactivate Subaccount
- Suspend Subaccount
- Transfer Balance
- Transfer Credit
- Transfer Number
from vonage import Auth, Vonage
from vonage_subaccounts import NewSubaccount, SubaccountOptions
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
response: NewSubaccount = client.subaccounts.create_subaccount(
SubaccountOptions(name=SUBACCOUNT_NAME, secret=SUBACCOUNT_SECRET)
)
print(response)
from vonage import Auth, Vonage
from vonage_subaccounts import Subaccount
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
subaccount: Subaccount = client.subaccounts.get_subaccount(SUBACCOUNT_KEY)
print(subaccount)
from vonage import Auth, Vonage
from vonage_subaccounts import ListTransfersFilter, Transfer
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
response: list[Transfer] = client.subaccounts.list_balance_transfers(
ListTransfersFilter(start_date=SUBACCOUNT_START_DATE)
)
print(response)
from vonage import Auth, Vonage
from vonage_subaccounts import ListTransfersFilter, Transfer
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
response: list[Transfer] = client.subaccounts.list_credit_transfers(
ListTransfersFilter(start_date=SUBACCOUNT_START_DATE)
)
print(response)
from vonage import Auth, Vonage
from vonage_subaccounts import ListSubaccountsResponse
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
response: ListSubaccountsResponse = client.subaccounts.list_subaccounts()
print(response)
from vonage import Auth, Vonage
from vonage_subaccounts import ModifySubaccountOptions, Subaccount
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
response: Subaccount = client.subaccounts.modify_subaccount(
subaccount_api_key=SUBACCOUNT_KEY,
options=ModifySubaccountOptions(suspended=False),
)
print(response)
from vonage import Auth, Vonage
from vonage_subaccounts import ModifySubaccountOptions, Subaccount
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
response: Subaccount = client.subaccounts.modify_subaccount(
subaccount_api_key=SUBACCOUNT_KEY,
options=ModifySubaccountOptions(suspended=True),
)
print(response)
from vonage import Auth, Vonage
from vonage_subaccounts import Transfer, TransferRequest
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
request = TransferRequest(
from_=VONAGE_API_KEY, to=SUBACCOUNT_KEY, amount=SUBACCOUNT_BALANCE_AMOUNT
)
transfer: Transfer = client.subaccounts.transfer_balance(request)
print(transfer)
from vonage import Auth, Vonage
from vonage_subaccounts import Transfer, TransferRequest
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
request = TransferRequest(
from_=VONAGE_API_KEY, to=SUBACCOUNT_KEY, amount=SUBACCOUNT_CREDIT_AMOUNT
)
response: Transfer = client.subaccounts.transfer_credit(request)
print(response)
from vonage import Auth, Vonage
from vonage_subaccounts import TransferNumberRequest, TransferNumberResponse
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
request = TransferNumberRequest(
from_=VONAGE_API_KEY, to=SUBACCOUNT_KEY, number=VONAGE_VIRTUAL_NUMBER
)
response: TransferNumberResponse = client.subaccounts.transfer_number(request)
print(response)
from vonage import Auth, Vonage
from vonage_users import Channels, PstnChannel, User
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
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)
from vonage import Auth, Vonage
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
client.users.delete_user(USER_ID)
from vonage import Auth, Vonage
from vonage_users import User
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
user: User = client.users.get_user(USER_ID)
print(user)
from vonage import Auth, Vonage
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
users_list, next_page_cursor = client.users.list_users()
print(users_list)
from vonage import Auth, Vonage
from vonage_users import Channels, PstnChannel, SmsChannel, User
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
user_params = User(
name=USER_NAME,
display_name=USER_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)
- Cancel Request
- Check Verification Code
- Send Request Email
- Send Request Silent Auth
- Send Request Sms
- Send Request Voice
- Send Request Whatsapp
- Send Request Whatsapp Interactive
- Send Request With Fallback
from vonage import Auth, Vonage
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
client.verify.cancel_verification(request_id=VERIFY_REQUEST_ID)
from vonage import Auth, Vonage
from vonage_verify import CheckCodeResponse
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
response: CheckCodeResponse = client.verify.check_code(
request_id=VERIFY_REQUEST_ID, code=VERIFY_CODE
)
print(response)
from vonage import Auth, Vonage
from vonage_verify import (EmailChannel, StartVerificationResponse,
VerifyRequest)
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
verify_request = VerifyRequest(
brand=VERIFY_VERIFY_BRAND_NAME,
workflow=[
EmailChannel(to=VERIFY_TO_EMAIL),
],
)
response: StartVerificationResponse = client.verify.start_verification(verify_request)
pprint(response)
from vonage import Auth, Vonage
from vonage_verify import (SilentAuthChannel, StartVerificationResponse,
VerifyRequest)
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
verify_request = VerifyRequest(
brand=VERIFY_BRAND_NAME,
workflow=[SilentAuthChannel(to=VERIFY_NUMBER)],
)
response: StartVerificationResponse = client.verify.start_verification(verify_request)
pprint(response)
from vonage import Auth, Vonage
from vonage_verify import SmsChannel, StartVerificationResponse, VerifyRequest
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
verify_request = VerifyRequest(
brand=VERIFY_BRAND_NAME,
workflow=[
SmsChannel(to=VERIFY_NUMBER),
],
)
response: StartVerificationResponse = client.verify.start_verification(verify_request)
pprint(response)
from vonage import Auth, Vonage
from vonage_verify import (StartVerificationResponse, VerifyRequest,
VoiceChannel)
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
verify_request = VerifyRequest(
brand=VERIFY_BRAND_NAME,
workflow=[
VoiceChannel(to=VERIFY_NUMBER),
],
)
response: StartVerificationResponse = client.verify.start_verification(verify_request)
pprint(response)
from vonage import Auth, Vonage
from vonage_verify import (StartVerificationResponse, VerifyRequest,
WhatsappChannel)
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
verify_request = VerifyRequest(
brand=VERIFY_BRAND_NAME,
workflow=[
WhatsappChannel(to=VERIFY_NUMBER, from_=VERIFY_FROM_NUMBER),
],
)
response: StartVerificationResponse = client.verify.start_verification(verify_request)
pprint(response)
from vonage import Auth, Vonage
from vonage_verify import (StartVerificationResponse, VerifyRequest,
WhatsappChannel)
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
verify_request = VerifyRequest(
brand=VERIFY_BRAND_NAME,
workflow=[
WhatsappChannel(to=VERIFY_NUMBER, from_=VERIFY_FROM_NUMBER),
],
)
response: StartVerificationResponse = client.verify.start_verification(verify_request)
pprint(response)
from vonage import Auth, Vonage
from vonage_verify import (EmailChannel, SilentAuthChannel,
StartVerificationResponse, VerifyRequest)
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
verify_request = VerifyRequest(
brand=VERIFY_BRAND_NAME,
workflow=[
SilentAuthChannel(to=VERIFY_NUMBER),
EmailChannel(to=VERIFY_TO_EMAIL, from_=VERIFY_FROM_EMAIL),
],
)
response: StartVerificationResponse = client.verify.start_verification(verify_request)
pprint(response)
- Cancel
- Check
- Psd2 Request
- Request
- Search
- Send Psd2 Verification Request With Workflow
- Send Verification Request With Workflow
- Trigger Next Step
from vonage import Auth, Vonage
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
client.verify_legacy.cancel_verification(VERIFY_REQUEST_ID)
from vonage import Auth, Vonage
from vonage_verify_legacy import CheckCodeResponse
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
response: CheckCodeResponse = client.verify_legacy.check_code(
VERIFY_REQUEST_ID, VERIFY_CODE
)
print(response)
from vonage import Auth, Vonage
from vonage_verify_legacy import Psd2Request, StartVerificationResponse
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
request = Psd2Request(number=VERIFY_NUMBER, payee=VERIFY_PAYEE_NAME, amount=VERIFY_AMOUNT)
response: StartVerificationResponse = client.verify_legacy.start_psd2_verification(
request
)
print(response)
from vonage import Auth, Vonage
from vonage_verify_legacy import StartVerificationResponse, VerifyRequest
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
request = VerifyRequest(number=VERIFY_NUMBER, brand='AcmeInc')
response: StartVerificationResponse = client.verify_legacy.start_verification(request)
print(response)
from vonage import Auth, Vonage
from vonage_verify_legacy import VerifyStatus
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
response: VerifyStatus = client.verify_legacy.search(VERIFY_REQUEST_ID)
print(response)
from vonage import Auth, Vonage
from vonage_verify_legacy import Psd2Request, StartVerificationResponse
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
request = Psd2Request(
number=VERIFY_NUMBER,
payee=VERIFY_PAYEE_NAME,
amount=VERIFY_AMOUNT,
workflow_id=VERIFY_WORKFLOW_ID,
)
response: StartVerificationResponse = client.verify_legacy.start_psd2_verification(
request
)
print(response)
from vonage import Auth, Vonage
from vonage_verify_legacy import StartVerificationResponse, VerifyRequest
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
request = VerifyRequest(
number=VERIFY_NUMBER, brand='AcmeInc', workflow_id=VERIFY_WORKFLOW_ID
)
response: StartVerificationResponse = client.verify_legacy.start_verification(request)
print(response)
from vonage import Auth, Vonage
from vonage_verify_legacy import VerifyControlStatus
client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))
response: VerifyControlStatus = client.verify_legacy.trigger_next_event(VERIFY_REQUEST_ID)
print(response)
- Connect An Inbound Call
- Connect Callers To A Conference
- Earmuff A Call
- Get Recording
- Handle User Input
- Handle User Input With Asr
- Make An Outbound Call
- Make Outbound Call Ncco
- Mute A Call
- Play Audio Stream Into Call
- Play Dtmf Into Call
- Play Tts Into Call
- Receive An Inbound Call
- Record A Call
- Record A Call With Split Audio
- Record A Conversation
- Record A Message
- Retrieve Info For A Call
- Retrieve Info For All Calls
- Track Ncco
- Transfer A Call
- Transfer Call Inline Ncco
import os
from os.path import dirname, join
from dotenv import load_dotenv
from fastapi import FastAPI
from vonage_voice import Connect, PhoneEndpoint
dotenv_path = join(dirname(__file__), '../.env')
load_dotenv(dotenv_path)
VONAGE_VIRTUAL_NUMBER = os.environ.get('VONAGE_VIRTUAL_NUMBER')
VOICE_VOICE_TO_NUMBER = os.environ.get('VOICE_VOICE_TO_NUMBER')
app = FastAPI()
@app.get('/webhooks/answer')
async def inbound_call():
ncco = [
Connect(
endpoint=[PhoneEndpoint(number=VOICE_VOICE_TO_NUMBER)],
from_=VONAGE_VIRTUAL_NUMBER,
).model_dump(by_alias=True, exclude_none=True)
]
return ncco
import os
from os.path import dirname, join
from dotenv import load_dotenv
from fastapi import FastAPI
from vonage_voice import Conversation, NccoAction, Talk
dotenv_path = join(dirname(__file__), '../.env')
load_dotenv(dotenv_path)
VOICE_CONFERENCE_NAME = os.environ.get("VOICE_CONFERENCE_NAME")
app = FastAPI()
@app.get('/webhooks/answer')
async def answer_call():
ncco: list[NccoAction] = [
Talk(text="Please wait while we connect you to the conference"),
Conversation(name=VOICE_CONFERENCE_NAME),
]
return [action.model_dump(by_alias=True, exclude_none=True) for action in ncco]
from vonage import Auth, Vonage
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
client.voice.earmuff(VOICE_CALL_ID)
sleep(3)
client.voice.unearmuff(VOICE_CALL_ID)
from vonage import Auth, Vonage
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
client.voice.download_recording(VOICE_RECORDING_URL, 'recording.mp3')
from pprint import pprint
from fastapi import Body, FastAPI, Request
from vonage_voice import Dtmf, Input, NccoAction, Talk
app = FastAPI()
@app.get('/webhooks/answer')
async def answer_call(request: Request):
ncco: list[NccoAction] = [
Talk(text=f'Hello, please press any key to continue.'),
Input(
type=['dtmf'],
dtmf=Dtmf(timeOut=5, maxDigits=1),
eventUrl=[str(request.base_url) + 'webhooks/dtmf'],
),
]
return [action.model_dump(by_alias=True, exclude_none=True) for action in ncco]
@app.post('/webhooks/dtmf')
async def answer_dtmf(data: dict = Body(...)):
pprint(data)
return [
Talk(text=f'Hello, you pressed {data['dtmf']['digits']}').model_dump(
by_alias=True, exclude_none=True
)
]
from pprint import pprint
from fastapi import Body, FastAPI, Request
from vonage_voice import Input, NccoAction, Speech, Talk
app = FastAPI()
@app.get('/webhooks/answer')
async def answer_call(request: Request):
ncco: list[NccoAction] = [
Talk(text=f'Please say something'),
Input(
type=['speech'],
speech=Speech(endOnSilence=1, language='en-US'),
eventUrl=[str(request.base_url) + 'webhooks/asr'],
),
]
return [action.model_dump(by_alias=True, exclude_none=True) for action in ncco]
@app.post('/webhooks/asr')
async def answer_asr(data: dict = Body(...)):
if data is not None and 'speech' in data:
pprint(data)
speech = data['speech']['results'][0]['text']
return [
Talk(text=f'Hello, you said {speech}').model_dump(
by_alias=True, exclude_none=True
)
]
return [
Talk(text=f'Sorry, I didn\'t understand your input.').model_dump(
by_alias=True, exclude_none=True
)
]
from vonage import Auth, Vonage
from vonage_voice import CreateCallRequest, Phone, ToPhone
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
response = client.voice.create_call(
CreateCallRequest(
answer_url=[VOICE_ANSWER_URL],
to=[ToPhone(number=VOICE_TO_NUMBER)],
from_=Phone(number=VONAGE_VIRTUAL_NUMBER),
)
)
pprint(response)
from vonage import Auth, Vonage
from vonage_voice import CreateCallRequest, Phone, Talk, ToPhone
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
response = client.voice.create_call(
CreateCallRequest(
ncco=[Talk(text='This is a text to speech call from Vonage.')],
to=[ToPhone(number=VOICE_TO_NUMBER)],
from_=Phone(number=VONAGE_VIRTUAL_NUMBER),
)
)
pprint(response)
from vonage import Auth, Vonage
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
client.voice.mute(VOICE_CALL_ID)
sleep(5)
client.voice.unmute(VOICE_CALL_ID)
from vonage import Auth, Vonage
from vonage_voice import AudioStreamOptions, CallMessage
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
response: CallMessage = client.voice.play_audio_into_call(
VOICE_CALL_ID,
audio_stream_options=AudioStreamOptions(stream_url=[VOICE_STREAM_URL]),
)
pprint(response)
from vonage import Auth, Vonage
from vonage_voice import CallMessage
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
response: CallMessage = client.voice.play_dtmf_into_call(
uuid=VOICE_CALL_ID, dtmf=VOICE_DTMF_DIGITS
)
pprint(response)
from vonage import Auth, Vonage
from vonage_voice import CallMessage, TtsStreamOptions
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
response: CallMessage = client.voice.play_tts_into_call(
uuid=VOICE_CALL_ID,
tts_options=TtsStreamOptions(text=VOICE_TEXT, language=VOICE_LANGUAGE),
)
pprint(response)
from fastapi import FastAPI, Query
from vonage_voice import Talk
app = FastAPI()
@app.get('/webhooks/answer')
async def answer_call(from_: str = Query(..., alias='from')):
from_ = '-'.join(from_)
return [
Talk(text=f'Thank you for calling from {from_}').model_dump(
by_alias=True, exclude_none=True
)
]
import os
from os.path import dirname, join
from pprint import pprint
from dotenv import load_dotenv
from fastapi import Body, FastAPI
from vonage_voice import Connect, NccoAction, PhoneEndpoint, Record
dotenv_path = join(dirname(__file__), '../.env')
load_dotenv(dotenv_path)
VONAGE_VIRTUAL_NUMBER = os.environ.get('VONAGE_VIRTUAL_NUMBER')
VOICE_TO_NUMBER = os.environ.get('VOICE_TO_NUMBER')
app = FastAPI()
@app.get('/webhooks/answer')
async def inbound_call():
ncco: list[NccoAction] = [
Record(eventUrl=['https://demo.ngrok.io/webhooks/recordings']),
Connect(
from_=VONAGE_VIRTUAL_NUMBER, endpoint=[PhoneEndpoint(number=VOICE_TO_NUMBER)]
),
]
return [action.model_dump(by_alias=True, exclude_none=True) for action in ncco]
@app.post('/webhooks/recordings')
async def recordings(data: dict = Body(...)):
pprint(data)
return {'message': 'webhook received'}
import os
from os.path import dirname, join
from pprint import pprint
from dotenv import load_dotenv
from fastapi import Body, FastAPI
from vonage_voice import Connect, NccoAction, PhoneEndpoint, Record
dotenv_path = join(dirname(__file__), '../.env')
load_dotenv(dotenv_path)
VONAGE_VIRTUAL_NUMBER = os.environ.get('VONAGE_VIRTUAL_NUMBER')
VOICE_TO_NUMBER = os.environ.get('VOICE_TO_NUMBER')
app = FastAPI()
@app.get('/webhooks/answer')
async def inbound_call():
ncco: list[NccoAction] = [
Record(
split='conversation',
channels=2,
eventUrl=['https://demo.ngrok.io/webhooks/recordings'],
),
Connect(
from_=VONAGE_VIRTUAL_NUMBER, endpoint=[PhoneEndpoint(number=VOICE_TO_NUMBER)]
),
]
return [step.model_dump(by_alias=True, exclude_none=True) for step in ncco]
@app.post('/webhooks/recordings')
async def recordings(data: dict = Body(...)):
pprint(data)
return {'message': 'webhook received'}
import os
from os.path import dirname, join
from pprint import pprint
from dotenv import load_dotenv
from fastapi import Body, FastAPI
from vonage_voice import Conversation
dotenv_path = join(dirname(__file__), '../.env')
load_dotenv(dotenv_path)
VOICE_CONFERENCE_NAME = os.environ.get('VOICE_CONFERENCE_NAME')
app = FastAPI()
@app.get('/webhooks/answer')
async def answer_call():
ncco = [
Conversation(
name=VOICE_CONFERENCE_NAME,
record=True,
eventMethod='POST',
eventUrl=['https://demo.ngrok.io/webhooks/recordings'],
)
]
return ncco
@app.post('/webhooks/recordings')
async def recordings(data: dict = Body(...)):
pprint(data)
return {'message': 'webhook received'}
from pprint import pprint
from fastapi import Body, FastAPI, Request
from vonage_voice import NccoAction, Record, Talk
app = FastAPI()
@app.get('/webhooks/answer')
async def answer_call(request: Request):
print(request.base_url)
ncco: list[NccoAction] = [
Talk(
text='Please leave a message after the tone, then press #. We will get back to you as soon as we can.'
),
Record(
endOnSilence=3,
endOnKey='#',
beepStart=True,
eventUrl=[str(request.base_url) + 'webhooks/recordings'],
),
Talk(text='Thank you for your message. Goodbye.'),
]
return [action.model_dump(by_alias=True, exclude_none=True) for action in ncco]
@app.post('/webhooks/recordings')
async def recordings(data: dict = Body(...)):
pprint(data)
return {'message': 'webhook received'}
from vonage import Auth, Vonage
from vonage_voice import CallInfo
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
response: CallInfo = client.voice.get_call(VOICE_CALL_ID)
pprint(response)
from vonage import Auth, Vonage
from vonage_voice import ListCallsFilter
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
now = datetime.now(timezone.utc)
date_end = now.strftime('%Y-%m-%dT%H:%M:%SZ')
start = now - timedelta(hours=24)
date_start = start.strftime('%Y-%m-%dT%H:%M:%SZ')
calls, _ = client.voice.list_calls(
ListCallsFilter(date_start=date_start, date_end=date_end)
)
for call in calls:
pprint(call)
from fastapi import FastAPI, Request
from vonage_voice import NccoAction, Notify, Talk
app = FastAPI()
@app.get('/webhooks/answer')
async def inbound_call(request: Request):
ncco: list[NccoAction] = [
Talk(text=f'Thanks for calling the notification line.'),
Notify(
payload={"foo": "bar"},
eventUrl=[str(request.base_url) + 'webhooks/notification'],
),
Talk(text=f'You will never hear me as the notification URL will return an NCCO.'),
]
return [action.model_dump(by_alias=True, exclude_none=True) for action in ncco]
@app.post('/webhooks/notification')
async def on_notification():
return [
Talk(text=f'Your notification has been received, loud and clear').model_dump(
by_alias=True, exclude_none=True
)
]
from vonage import Auth, Vonage
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
client.voice.transfer_call_answer_url(VOICE_CALL_ID, VOICE_NCCO_URL)
from vonage import Auth, Vonage
from vonage_voice import Talk
client = Vonage(
Auth(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_PRIVATE_KEY,
)
)
ncco = [Talk(text='This is a transfer action using an inline NCCO')]
client.voice.transfer_call_ncco(VOICE_CALL_ID, ncco)