mirror of
https://github.com/HumanAIGC-Engineering/gradio-webrtc.git
synced 2026-02-05 18:09:23 +08:00
feat: Added documentation for twilio integration (#125)
* feat: Added documentation for twilio integration * Add code --------- Co-authored-by: Freddy Boulton <alfonsoboulton@gmail.com>
This commit is contained in:
@@ -281,7 +281,7 @@ You can do this by calling `await self.wait_for_args()` (for `AsyncStreamHandler
|
|||||||
|
|
||||||
We can access the value of this component via the `latest_args` property of the `StreamHandler`. The `latest_args` is a list storing each of the values. The 0th index is the dummy string `__webrtc_value__`.
|
We can access the value of this component via the `latest_args` property of the `StreamHandler`. The `latest_args` is a list storing each of the values. The 0th index is the dummy string `__webrtc_value__`.
|
||||||
|
|
||||||
## Telephone Integration
|
## Considerations for Telephone Use
|
||||||
|
|
||||||
In order for your handler to work over the phone, you must make sure that your handler is not expecting any additional input data besides the audio.
|
In order for your handler to work over the phone, you must make sure that your handler is not expecting any additional input data besides the audio.
|
||||||
|
|
||||||
@@ -297,11 +297,61 @@ def emit(self):
|
|||||||
await self.wait_for_args()
|
await self.wait_for_args()
|
||||||
```
|
```
|
||||||
|
|
||||||
### `ReplyOnPause`
|
### `ReplyOnPause` and telephone use
|
||||||
|
|
||||||
The generator you pass to `ReplyOnPause` must have default arguments for all arguments except audio.
|
The generator you pass to `ReplyOnPause` must have default arguments for all arguments except audio.
|
||||||
|
|
||||||
If you yield `AdditionalOutputs`, they will be passed in as the input arguments to the generator the next time it is called.
|
If you yield `AdditionalOutputs`, they will be passed in as the input arguments to the generator the next time it is called.
|
||||||
|
|
||||||
!!! tip
|
!!! tip
|
||||||
See [Talk To Claude](https://huggingface.co/spaces/fastrtc/talk-to-claude) for an example of a `ReplyOnPause` handler that is compatible with telephone usage. Notice how the input chatbot history is yielded as an `AdditionalOutput` on each invocation.
|
See [Talk To Claude](https://huggingface.co/spaces/fastrtc/talk-to-claude) for an example of a `ReplyOnPause` handler that is compatible with telephone usage. Notice how the input chatbot history is yielded as an `AdditionalOutput` on each invocation.
|
||||||
|
|
||||||
|
## Telephone Integration
|
||||||
|
|
||||||
|
You can integrate a `Stream` with a SIP provider like Twilio to set up your own phone number for your application.
|
||||||
|
|
||||||
|
### Setup Process
|
||||||
|
|
||||||
|
1. **Create a Twilio Account**: Sign up for a [Twilio](https://login.twilio.com/u/signup) account and purchase a phone number with voice capabilities. With a trial account, only the phone number you used during registration will be able to connect to your `Stream`.
|
||||||
|
|
||||||
|
2. **Mount Your Stream**: Add your `Stream` to a FastAPI app using `stream.mount(app)` and run the server.
|
||||||
|
|
||||||
|
3. **Configure Twilio Webhook**: Point your Twilio phone number to your webhook URL.
|
||||||
|
|
||||||
|
### Configuring Twilio
|
||||||
|
|
||||||
|
To configure your Twilio phone number:
|
||||||
|
|
||||||
|
1. In your Twilio dashboard, navigate to `Manage` → `TwiML Apps` in the left sidebar
|
||||||
|
2. Click `Create TwiML App`
|
||||||
|
3. Set the `Voice URL` to your FastAPI app's URL with `/telephone/incoming` appended (e.g., `https://your-app-url.com/telephone/incoming`)
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
!!! tip "Local Development with Ngrok"
|
||||||
|
For local development, use [ngrok](https://ngrok.com/) to expose your local server:
|
||||||
|
```bash
|
||||||
|
ngrok http <port>
|
||||||
|
```
|
||||||
|
Then set your Twilio Voice URL to `https://your-ngrok-subdomain.ngrok.io/telephone/incoming-call`
|
||||||
|
|
||||||
|
### Code Example
|
||||||
|
|
||||||
|
Here's a simple example of setting up a Twilio endpoint:
|
||||||
|
|
||||||
|
|
||||||
|
```py
|
||||||
|
from fastrtc import Stream, ReplyOnPause
|
||||||
|
from fastapi import FastAPI
|
||||||
|
|
||||||
|
def echo(audio):
|
||||||
|
yield audio
|
||||||
|
|
||||||
|
app = FastAPI()
|
||||||
|
|
||||||
|
stream = Stream(ReplyOnPause(echo), modality="audio", mode="send-receive")
|
||||||
|
stream.mount(app)
|
||||||
|
|
||||||
|
# run with `uvicorn main:app`
|
||||||
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user