Skip to content

Commit ecd37c6

Browse files
committed
add inbound/outbound call snippets
1 parent 39a1083 commit ecd37c6

5 files changed

+67
-59
lines changed

.env.dist

+1
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ START_DATE='START_DATE'
7878

7979
# Voice
8080
CONFERENCE_NAME='NAME_OF_YOUR_CONFERENCE'
81+
YOUR_SECOND_NUMBER='YOUR_SECOND_NUMBER'
8182

8283
# Numbers
8384
COUNTRY_CODE='GB'

voice/connect-an-inbound-call.py

+17-17
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
1-
#!/usr/bin/env python3
2-
from flask import Flask, jsonify
1+
import os
2+
from os.path import join, dirname
3+
from dotenv import load_dotenv
4+
from fastapi import FastAPI
5+
from vonage_voice.models import Connect, PhoneEndpoint
36

4-
app = Flask(__name__)
7+
VONAGE_NUMBER = os.environ.get('VONAGE_NUMBER')
8+
YOUR_SECOND_NUMBER = os.environ.get('YOUR_SECOND_NUMBER')
59

10+
dotenv_path = join(dirname(__file__), '../.env')
11+
load_dotenv(dotenv_path)
12+
app = FastAPI()
613

7-
@app.route("/webhooks/answer")
8-
def answer_call():
14+
15+
@app.get('/answer')
16+
async def inbound_call():
917
ncco = [
10-
{
11-
"action": "connect",
12-
"from": "VONAGE_NUMBER",
13-
"endpoint": [{
14-
"type": 'phone',
15-
"number": "YOUR_SECOND_NUMBER"
16-
}]
17-
}
18+
Connect(
19+
endpoint=[PhoneEndpoint(number='123456789')], from_=VONAGE_NUMBER
20+
).model_dump(by_alias=True, exclude_none=True)
1821
]
19-
return jsonify(ncco)
20-
2122

22-
if __name__ == '__main__':
23-
app.run(port=3000)
23+
return ncco

voice/make-an-outbound-call.py

+21-11
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,36 @@
22
import os
33
from os.path import join, dirname
44
from pprint import pprint
5-
import vonage
65
from dotenv import load_dotenv
76

87
dotenv_path = join(dirname(__file__), "../.env")
98
load_dotenv(dotenv_path)
109

1110
VONAGE_APPLICATION_ID = os.environ.get("VONAGE_APPLICATION_ID")
12-
VONAGE_APPLICATION_PRIVATE_KEY_PATH = os.environ.get("VONAGE_APPLICATION_PRIVATE_KEY_PATH")
11+
VONAGE_APPLICATION_PRIVATE_KEY_PATH = os.environ.get(
12+
"VONAGE_APPLICATION_PRIVATE_KEY_PATH"
13+
)
1314
FROM_NUMBER = os.environ.get("FROM_NUMBER")
1415
TO_NUMBER = os.environ.get("TO_NUMBER")
1516

16-
client = vonage.Client(
17-
application_id=VONAGE_APPLICATION_ID,
18-
private_key=VONAGE_APPLICATION_PRIVATE_KEY_PATH,
17+
from vonage import Auth, Vonage
18+
from vonage_voice.models import CreateCallRequest, Phone, ToPhone
19+
20+
client = Vonage(
21+
Auth(
22+
application_id=VONAGE_APPLICATION_ID,
23+
private_key=VONAGE_APPLICATION_PRIVATE_KEY_PATH,
24+
)
1925
)
2026

21-
response = client.voice.create_call({
22-
'to': [{'type': 'phone', 'number': TO_NUMBER}],
23-
'from': {'type': 'phone', 'number': FROM_NUMBER},
24-
'answer_url': ['https://raw.githubusercontent.com/nexmo-community/ncco-examples/gh-pages/text-to-speech.json']
25-
})
27+
response = client.voice.create_call(
28+
CreateCallRequest(
29+
answer_url=[
30+
'https://raw.githubusercontent.com/nexmo-community/ncco-examples/gh-pages/text-to-speech.json'
31+
],
32+
to=[ToPhone(number=TO_NUMBER)],
33+
from_=Phone(number=FROM_NUMBER),
34+
)
35+
)
2636

27-
pprint(response)
37+
pprint(response)

voice/make-outbound-call-ncco.py

+18-10
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,34 @@
33
import os
44
from os.path import join, dirname
55
from dotenv import load_dotenv
6-
import vonage
76

87
dotenv_path = join(dirname(__file__), "../.env")
98
load_dotenv(dotenv_path)
109

1110
VONAGE_APPLICATION_ID = os.environ.get("VONAGE_APPLICATION_ID")
12-
VONAGE_APPLICATION_PRIVATE_KEY_PATH = os.environ.get("VONAGE_APPLICATION_PRIVATE_KEY_PATH")
11+
VONAGE_APPLICATION_PRIVATE_KEY_PATH = os.environ.get(
12+
"VONAGE_APPLICATION_PRIVATE_KEY_PATH"
13+
)
1314

1415
VONAGE_NUMBER = os.environ.get("VONAGE_NUMBER")
1516
TO_NUMBER = os.environ.get("TO_NUMBER")
1617

17-
client = vonage.Client(
18-
application_id=VONAGE_APPLICATION_ID,
19-
private_key=VONAGE_APPLICATION_PRIVATE_KEY_PATH,
18+
from vonage import Auth, Vonage
19+
from vonage_voice.models import CreateCallRequest, Phone, Talk, ToPhone
20+
21+
client = Vonage(
22+
Auth(
23+
application_id=VONAGE_APPLICATION_ID,
24+
private_key=VONAGE_APPLICATION_PRIVATE_KEY_PATH,
25+
)
2026
)
2127

22-
response = client.voice.create_call({
23-
'to': [{'type': 'phone', 'number': TO_NUMBER}],
24-
'from': {'type': 'phone', 'number': VONAGE_NUMBER},
25-
'ncco': [{'action': 'talk', 'text': 'This is a text to speech call from Nexmo'}]
26-
})
28+
response = client.voice.create_call(
29+
CreateCallRequest(
30+
ncco=[Talk(text='Hello world')],
31+
to=[ToPhone(number=TO_NUMBER)],
32+
from_=Phone(number=VONAGE_NUMBER),
33+
)
34+
)
2735

2836
pprint(response)

voice/receive-an-inbound-call.py

+10-21
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,13 @@
1-
#!/usr/bin/env python3
1+
from fastapi import FastAPI, Query
2+
from vonage_voice.models import Talk
23

3-
from flask import Flask, request, jsonify
4+
app = FastAPI()
45

5-
app = Flask(__name__)
66

7-
8-
@app.route("/webhooks/answer")
9-
def answer_call():
10-
for param_key, param_value in request.args.items():
11-
print("{}: {}".format(param_key, param_value))
12-
13-
from_ = request.args['from']
14-
15-
return jsonify([
16-
{
17-
"action": "talk",
18-
"text": "Thank you for calling from " + " ".join(from_)
19-
}
20-
])
21-
22-
23-
if __name__ == '__main__':
24-
app.run(port=3000)
7+
@app.get('/answer')
8+
async def answer_call(from_: str = Query(..., alias='from')):
9+
return [
10+
Talk(text=f'Thank you for calling from {from_}').model_dump(
11+
by_alias=True, exclude_none=True
12+
)
13+
]

0 commit comments

Comments
 (0)