Estoy a punto de crear una puerta de enlace de correo electrónico a fax --- algún programa Python haráAsterisco archivos de llamaday ponerlos en alguna cola (basada en archivos o base de datos).
Luego, otro programa debería tomar "tareas de llamada" de la cola y "alimentarlas" al asterisco (respetando algún límite configurado, porque res_fax_digium
eliminará las tareas demasiado limitadas).
A continuación, supongamos que todo está bien y Asterisk envió con éxito algún documento de fax. ¿Cuál podría ser una forma de obtener el estado de esta operación?
Si el análisis de archivos de registro es lo mejor, probablemente asignaría algo especial accountcode
(probablemente pueda jugar con este campo) para colocar los CDR en archivos separados también.
Por favor, ¿qué otras formas debería evaluar?
Respuesta1
Entonces, dejé este enfoque y tomaré otro camino: AMI, API de interfaz de administración de Asterisk.
En un par de palabras.
Habiendo creado un plan de marcado como este:
[01-sendfax]
exten => _X.,1,NoOp()
same => n,SendFax(${faxfile},f)
Puedo originar llamadas con (usandopyst):
res = mgr.originate(
'SIP/m2000/1234567',
'1234567',
context='01-sendfax',
priority='1',
caller_id='7654321',
async=True,
variables={
'TRUNK': 'SIP/m2000',
'faxfile': '/tmp/file.tiff',
}
)
Y una vez configurado debug = on
, manager.conf
puedo escuchar los eventos necesarios:
# will catch a status of `originate` call
# (this does not require `debug = on` in `manager.conf`):
mgr.register_event('OriginateResponse', handle_response)
# will catch `SendFax` application's result:
mgr.register_event('FaxStatus', handle_response)
Entonces, el evento res_fax_digium
de incendio se completa después de que se completa.FaxStatus
SendFax