PIOPIY SDK for Python
Project description
Piopiy API - Python SDK
Overview
Piopiy API provides a comprehensive Python SDK for managing and controlling voice interactions using our PCMO Actions. This SDK allows developers to integrate voice functionalities such as making calls,bi-directional streaming for conversational AI, playing audio, recording, and more into their Python applications.
PCMO Features
- Make Calls: Initiate voice calls between two parties or multiple numbers.
- Play and Get Input: Play a media file or URL and get user input via DTMF.
- Play Music: Stream audio files or URLs during a call.
- Text-to-Speech: Convert text to speech during a call.
- Set Values and Inputs: Set custom values and collect user inputs.
- Record Calls: Record voice calls.
- Hangup Calls: Terminate calls programmatically.
- Stream Audio: Stream real-time audio via WebSocket during a call.
Authentication
The API requires an API Key and Secret for authentication, passed during the initialization of the RestClient
object.
Dependencies
Python
3.x or higherpip
piopiy
Installation
To use the Piopiy API, install the piopiy package from PyPI:
pip install piopiy
Usage
Here’s a basic example of how to use the Piopiy API:
from piopiy import RestClient, Action
# Initialize the RestClient with your appid and app token
piopiy = RestClient("your_appid", "your_app_token")
# Call two numbers with custom caller ID
try:
response = piopiy.voice.call("first_phone_number", "piopiy_callerid", "second_phone_number", {
'loop': 1,
'timeout': 40,
'duration': 30
})
print(response)
except Exception as error:
print(error)
# Call and perform PCMO action
action = Action()
action.playGetInput(
"https://example.com/webhook/dtmf",
"https://example.com/your_audio_file.wav",
{'max_digits': 3, 'max_retry': 2}
)
try:
response = piopiy.voice.call("dest_phone_number", "piopiy_callerid", action.PCMO(), {
'loop': 1,
'timeout': 40,
'duration': 30
})
print(response)
except Exception as error:
print(error)
Make Call
The call() method in the Piopiy Python SDK is designed to handle various types of call interactions. It supports connecting two numbers, managing multiple numbers, and executing PCMO (Programmable Call Media Operations) actions during a call.
Usage
1. Making a Basic Call
To initiate a call between two numbers:
from piopiy import RestClient
# Initialize the RestClient with your appid and app token
piopiy = RestClient("your_appid", "your_app_token")
try:
# Call two numbers with custom caller ID and additional options
response = piopiy.voice.call(
9194xxxxxx, # first number to connect
9180xxxxxx, # Caller ID
9180xxxxxx, # second number to connect
{
'duration': 30, # (Optional) Maximum duration of the call in seconds
'timeout': 40, # (Optional) Time to wait for the call to be answered
'loop': 1, # (Optional) Number of retry attempts if call is not answered
'record': True # (Optional) Whether to record the call
}
)
print('Call connected, answer URL:', response)
except Exception as error:
print('Error:', error)
2. Making a Call with PCMO Actions
To make a call and perform specific PCMO actions, such as playing an audio file:
from piopiy import RestClient, Action
def main():
# Initialize the RestClient with your appid and app token
piopiy = RestClient("your_appid", "your_app_token")
# Define PCMO actions
action = Action()
action.playMusic('https://example.com/your_music_file.wav')
try:
# Call two numbers with custom caller ID, PCMO actions, and additional options
response = piopiy.voice.call(
9194xxxxxx, # first number to connect
9180xxxxxx, # Caller ID
action.PCMO(), # PCMO actions to execute during the call
{
'duration': 30, # (Optional) Maximum duration of the call in seconds
'timeout': 40, # (Optional) Time to wait for the call to be answered
'loop': 1, # (Optional) Number of retry attempts if call is not answered
'record': True # (Optional) Whether to record the call
}
)
print('Call with PCMO actions connected, answer URL:', response)
except Exception as error:
print('Error:', error)
if __name__ == '__main__':
main()
3. Streaming Audio in a Call
The stream
method allows you to stream audio to the call in real-time using a WebSocket URL.
Here is an example of how to use the stream
feature in the Piopiy API:
from piopiy import Action, RestClient
def main():
# Initialize RestClient with your API Key and Secret
piopiy = RestClient("YOUR_API_KEY", "YOUR_API_SECRET")
action = Action()
# Define the stream action
action.stream(
'wss://telecmi.com/stream',
{
'listen_mode': 'callee',
'voice_quality': 8000,
'stream_on_answer': True
}
)
try:
# Call two numbers with custom caller ID, and execute the stream action
response = piopiy.voice.call(
9198333333, # First number to connect
91898989, # Caller ID
action.PCMO(), # PCMO actions including the stream
{
'timeout': 40,
'loop': 2,
'duration': 80,
'ring_type': 'group'
}
)
print('Call with streaming audio connected, answer URL:', response)
except Exception as error:
print('Error:', error)
if __name__ == '__main__':
main()
4. Handling Multiple Numbers
To attempt connecting a call to multiple numbers sequentially:
from piopiy import RestClient
def main():
# Initialize the RestClient with your appid and app token
piopiy = RestClient("your_appid", "your_app_token")
try:
# Call two numbers with custom caller ID and additional options
response = piopiy.voice.call(
9194xxxxxx, # first number to connect
9180xxxxxx, # Caller ID
[9180xxxxx, 9196xxxx], # Array of second numbers to connect
{
'duration': 30, # (Optional) Maximum duration of the call in seconds
'timeout': 40, # (Optional) Time to wait for each call to be answered
'loop': 1, # (Optional) Number of retry attempts for each number
'record': True # (Optional) Whether to record the call
}
)
print('Call to multiple numbers connected, answer URL:', response)
except Exception as error:
print('Error:', error)
if __name__ == '__main__':
main()
options
(dictionary) - Optional
duration
(Number): Maximum call duration in seconds.timeout
(Number): Time in seconds to wait for each call to be answered.loop
(Number): Number of retry attempts for each call.record
(Boolean): Whether to record the call.
PCMO (Piopiy Call Management Object)
The PCMO is a powerful tool that enables you to define specific actions to be executed during a call. These actions can include playing audio files, collecting user input, speaking text, and more.
Setting Up PCMO Actions
To use PCMO (Programmable Call Management Object) in Python with the Piopiy SDK, you need to create an instance of the Action
class, define the actions you want to perform, and then pass these actions to the call()
method. Here is how you can do it:
from piopiy import RestClient, Action
# Initialize RestClient with your API Key and Secret
piopiy = RestClient("YOUR_API_KEY", "YOUR_API_SECRET")
# Create an instance of the Action class
action = Action()
Example Actions
-
Playing Audio
- Play a specified audio file or URL during the call.
action.playMusic("https://example.com/your_music_file.wav");
-
Collecting DTMF Input
- Play a message and collect user input via DTMF tones.
action.playGetInput( "https://example.com/webhook/dtmf", "https://example.com/your_audio_file.wav", {max_digit: 3, max_retry: 2} );
-
Text-to-Speech
- Convert and play text as speech during the call.
action.speak("Hello, Welcome to Telecmi");
-
Setting Custom Values
- Set custom values for use during the call session.
action.setValue("name");
-
Collecting Input
- Collect user input, such as key presses, and send them to a specified URL.
action.input("https://example.com/action", { timeout: 20, max_digit: 4, min_digit: 2, });
-
Recording the Call
- Record the call session.
action.record();
-
Ending the Call
- Hang up the call.
action.hangup();
-
Connecting to Other Numbers
- Attempt to connect the caller to multiple numbers in sequence until one answers.
action.call(9198xxxxxx, [9180xxxx, 9180xxxx], { duration: 10, timeout: 20, loop: 2, record: true });
-
Streaming Audio
- Stream audio in real-time during the call using a WebSocket URL.
action.stream("wss://telecmi.com/stream", { listen_mode: "callee", // Options: "callee", "caller", or "both" voice_quality: 12000, // Voice quality in bits per second stream_on_answer: true, // Start streaming after the call is answered });
-
Clearing Actions
- Clear all defined actions.
action.clear();
Using PCMO in a Call
After defining the desired actions, use the action.PCMO()
method to pass them to the call()
method:
from piopiy import RestClient, Action
def main():
# Initialize RestClient with your API Key and Secret
piopiy = RestClient("YOUR_API_KEY", "YOUR_API_SECRET")
# Create an instance of the Action class
action = Action()
# Define PCMO actions
action.playMusic('https://example.com/your_music_file.wav')
try:
# Call two numbers with custom caller ID, PCMO actions, and additional options
response = piopiy.voice.call(
9194xxxxxx, # first number to connect
9180xxxxxx, # Caller ID
9180xxxxxx, # second number to connect
action.PCMO(), # PCMO actions
{
'duration': 30, # (Optional) Maximum duration of the call in seconds
'timeout': 40, # (Optional) Time to wait for the call to be answered
'loop': 1, # (Optional) Number of retry attempts if call is not answered
'record': True # (Optional) Whether to record the call
}
)
print('Call with PCMO actions connected, answer URL:', response)
except Exception as error:
print('Error:', error)
if __name__ == '__main__':
main()
PCMO Method Parameters
-
playMusic(audioFileOrUrl)
audioFileOrUrl
(String): The URL or path to the audio file to be played.
-
playGetInput(url, audioFileOrUrl, options)
url
(String): The URL to send the DTMF input to.audioFileOrUrl
(String): The URL or path to the audio file to be played.options
(Dictionary): Optional settings:max_digit
(Number): Maximum number of digits to capture.max_retry
(Number): Number of retry attempts.
-
speak(text)
text
(String): The text to convert to speech.
-
setValue(key)
key
(String): The key name for the value to set.
-
input(url, options)
url
(String): The URL to send the input data to.options
(Dictionary): Optional settings:timeout
(Number): Time in seconds to wait for input.max_digit
(Number): Maximum number of digits to collect.min_digit
(Number): Minimum number of digits to collect.
-
record()
- No parameters. Starts recording the call.
-
hangup()
- No parameters. Ends the call.
-
call(from, to, options)
from
(Number): The caller's phone number.to
(Number | Array): A single receiver's phone number or an array of phone numbers.options
(Dictionary): Optional settings:duration
(Number): Maximum call duration in seconds.timeout
(Number): Time to wait for each call to be answered.loop
(Number): Number of retry attempts for each number.record
(Boolean): Whether to record the call.
-
stream(url, options)
url
(String): The WebSocket URL for streaming audio during the call.options
(Dictionary): Optional settings:listen_mode
(String): Specifies who hears the streamed audio. Options arecallee
,caller
, orboth
.voice_quality
(String): The desired voice quality in bits per second. Options are8000
,16000
.stream_on_answer
(Boolean): Whether to start streaming after the call is answered.
-
PCMO()
- No parameters. Returns the PCMO Object.
-
clear()
- No parameters. Clears all defined actions.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file piopiy-1.0.7.1.tar.gz
.
File metadata
- Download URL: piopiy-1.0.7.1.tar.gz
- Upload date:
- Size: 12.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.11
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7b1cc0fdcf309aa21ba2e34cd9e280d85a7f6db12248c726f7f36da0e178e47a |
|
MD5 | 11d5066b56413b3dd9179b3dff309105 |
|
BLAKE2b-256 | 7c3f5d3a8f634d39628d59faa7c304ecf33e68cca2e52e326f9da8a8a642c42a |
File details
Details for the file piopiy-1.0.7.1-py3-none-any.whl
.
File metadata
- Download URL: piopiy-1.0.7.1-py3-none-any.whl
- Upload date:
- Size: 13.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.11
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8654f4e71ab28c56e76461a67f2af3fbc3cc6eb870bd24655d914e87d799ed7d |
|
MD5 | 14375d4fb1395c2ef7050d4d39f400d9 |
|
BLAKE2b-256 | 658325306c0350055d8cd4897e470c7085bbd4f386837484dfc7a7f82199c59b |