The Asterisk Manager Interface lets an external program connect to Asterisk and send commands over TCP.
Enable the manager in manager.conf:
[general]
enabled = yes
port = 5038
bindaddr = 127.0.0.1
[myuser]
secret = mypassword
read = system,call,log,verbose,command,agent,user
write = system,call,log,verbose,command,agent,user
Then connect from Python with a socket and send AMI actions:
import socket
sock = socket.create_connection(("127.0.0.1", 5038))
sock.sendall(
b"Action: Login\r\n"
b"Username: myuser\r\n"
b"Secret: mypassword\r\n\r\n"
)
print(sock.recv(4096).decode())
In production, keep AMI bound to localhost or a private network and restrict the permissions assigned to the user.