#!/usr/bin/env python3 import os import requests import json from dotenv import load_dotenv # Load environment variables from .env file load_dotenv() # --- Configuration --- TELNYX_API_KEY = os.environ.get("TELNYX_API_KEY") # Make sure this matches your KEY019... TELNYX_FROM_NUMBER = os.environ.get("TELNYX_FROM_NUMBER", "+16505820706") # This Connection ID MUST be associated with a Call Control Application # configured to send webhooks to your webhook server/path. TELNYX_CONNECTION_ID = os.environ.get("TELNYX_CONNECTION_ID", "2671409623596009055") TELNYX_API_URL = "https://api.telnyx.com/v2/calls" TELNYX_WEBHOOK_URL = "http://eluxnetworks.net:1998/telnyx-webhook" # Define your webhook URL if not TELNYX_API_KEY: print("Error: TELNYX_API_KEY not found in environment variables or .env file.") exit(1) if not TELNYX_CONNECTION_ID: print("Error: TELNYX_CONNECTION_ID not found in environment variables or .env file.") exit(1) # --- Get Call Details --- to_number = input("Enter the phone number to call (e.g., +14082397258): ") tts_message = input("Enter the message to speak after answer: ") # --- Prepare API Request --- headers = { "Authorization": f"Bearer {TELNYX_API_KEY}", "Content-Type": "application/json", "Accept": "application/json" } payload = { "to": to_number, "from": TELNYX_FROM_NUMBER, "connection_id": TELNYX_CONNECTION_ID, "custom_headers": [ { "name": "X-TTS-Payload", # Custom header to pass the message "value": tts_message } # Add other custom headers if needed ], "webhook_url": TELNYX_WEBHOOK_URL, "webhook_url_method": "POST" # You might need to specify the webhook URL here if the connection_id doesn't have one pre-configured # "webhook_url": "http://eluxnetworks.net:1998/", # Example - USE HTTPS! } print("\nInitiating call...") print(f"Payload: {json.dumps(payload, indent=2)}") # --- Make API Call --- try: response = requests.post(TELNYX_API_URL, headers=headers, json=payload) response.raise_for_status() # Raise an exception for bad status codes (4xx or 5xx) print("\nCall initiated successfully!") print("Response:") print(json.dumps(response.json(), indent=2)) except requests.exceptions.RequestException as e: print(f"\nError initiating call: {e}") if e.response is not None: print(f"Status Code: {e.response.status_code}") try: print(f"Response Body: {json.dumps(e.response.json(), indent=2)}") except json.JSONDecodeError: print(f"Response Body: {e.response.text}") except Exception as e: print(f"\nAn unexpected error occurred: {e}")