Add auto_hang_up to Telnyx serializer
This commit is contained in:
@@ -63,20 +63,35 @@ This project is a FastAPI-based chatbot that integrates with Telnyx to handle We
|
||||
ngrok http 8765
|
||||
```
|
||||
|
||||
2. **Update the Telnyx TeXML applications Webhook**:
|
||||
2. **Purchase a number**
|
||||
|
||||
- Go to your TeXML configuration page
|
||||
- Provide the ngrok URL to the Webhook URL field and ensure the POST method is selected
|
||||
- Click Save at the bottom of the page
|
||||
If you haven't already, purchase a number from Telnyx.
|
||||
|
||||
3. **Configure streams.xml**:
|
||||
- Log in to the Telnyx developer portal: https://portal.telnyx.com/
|
||||
- Buy a number: https://portal.telnyx.com/#/numbers/buy-numbers
|
||||
|
||||
3. **Update the Telnyx TeXML applications Webhook**:
|
||||
|
||||
- Go to your TeXML configuration page: https://portal.telnyx.com/#/call-control/texml
|
||||
- Create a new TeXML app, if one doesn't exist already:
|
||||
- Add an application name
|
||||
- Under Webhooks, select POST as the "Voice Method"
|
||||
- Select "Custom URL" under Webhook URL Method
|
||||
- Enter your ngrok URL in the "Webhook URL" field (e.g. https://your-name.ngrok.io)
|
||||
- Click "Create" to save
|
||||
Note: You'll see subsequent pages to set up SIP and Outbound, both are not required, so just skip.
|
||||
- Navigate to "Manage Numbers" (https://portal.telnyx.com/#/numbers/my-numbers) and under SIP connection, select the pencil icon to edit and select the TeXML application that you just created.
|
||||
|
||||
Now your number is ready to call.
|
||||
|
||||
4. **Configure streams.xml**:
|
||||
- Copy the template file to create your local version:
|
||||
```sh
|
||||
cp templates/streams.xml.template templates/streams.xml
|
||||
```
|
||||
- In `templates/streams.xml`, replace `<your server url>` with your ngrok URL (without `https://`)
|
||||
- The final URL should look like: `wss://abc123.ngrok.io/ws`
|
||||
- The encoding (`bidirectionalCodec`) should be `PCMU` or `PCMA` depending on your needs. Based on selected encoding, set the outbound_encoding in `server.py` when the bot is initialized.
|
||||
- The final URL should look like: `wss://abc123.ngrok.io/ws`. This needs to be the same URL that you added to your TeXML app above.
|
||||
- The encoding (`bidirectionalCodec`) should be `PCMU` or `PCMA` depending on your needs. Based on selected encoding, set the outbound_encoding in `server.py` when the bot is initialized. (No changes are required by default.)
|
||||
- The inbound encoding can be controlled from the application configuration for inbound calls and dial/transfer commands for outbound calls.
|
||||
|
||||
## Running the Application
|
||||
|
||||
@@ -33,9 +33,18 @@ logger.add(sys.stderr, level="DEBUG")
|
||||
async def run_bot(
|
||||
websocket_client,
|
||||
stream_id: str,
|
||||
call_control_id: str,
|
||||
outbound_encoding: str,
|
||||
inbound_encoding: str,
|
||||
):
|
||||
serializer = TelnyxFrameSerializer(
|
||||
stream_id=stream_id,
|
||||
outbound_encoding=outbound_encoding,
|
||||
inbound_encoding=inbound_encoding,
|
||||
call_control_id=call_control_id,
|
||||
api_key=os.getenv("TELNYX_API_KEY"),
|
||||
)
|
||||
|
||||
transport = FastAPIWebsocketTransport(
|
||||
websocket=websocket_client,
|
||||
params=FastAPIWebsocketParams(
|
||||
@@ -44,7 +53,7 @@ async def run_bot(
|
||||
vad_enabled=True,
|
||||
vad_analyzer=SileroVADAnalyzer(),
|
||||
vad_audio_passthrough=True,
|
||||
serializer=TelnyxFrameSerializer(stream_id, outbound_encoding, inbound_encoding),
|
||||
serializer=serializer,
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@@ -37,9 +37,10 @@ async def websocket_endpoint(websocket: WebSocket):
|
||||
call_data = json.loads(await start_data.__anext__())
|
||||
print(call_data, flush=True)
|
||||
stream_id = call_data["stream_id"]
|
||||
call_control_id = call_data["start"]["call_control_id"]
|
||||
outbound_encoding = call_data["start"]["media_format"]["encoding"]
|
||||
print("WebSocket connection accepted")
|
||||
await run_bot(websocket, stream_id, outbound_encoding, "PCMU")
|
||||
await run_bot(websocket, stream_id, call_control_id, outbound_encoding, "PCMU")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user