tfreepbx_glue.py - dmt - source code for the kunsthal art installation
HTML git clone git://parazyd.org/dmt.git
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
tfreepbx_glue.py (2025B)
---
1 #!/usr/bin/env python3
2 # See LICENSE file for copyright and license details.
3 """
4 FreePBX/Asterisk log parser and handler
5 """
6
7 import sys
8 import requests
9
10 import globalvars
11 from config import (CALLER_ID, RECEIVER_ID, STATION_API)
12
13
14 def handle_line(logline):
15 """
16 Parses a single log line to make an according call
17 """
18 if not logline:
19 return
20
21 parsed = logline.split()
22 if len(parsed) < 7:
23 return
24
25 # We wait for a ring.
26 if not globalvars.weareringing and not globalvars.wehaveanswered:
27 if parsed[4].split('-')[0] == RECEIVER_ID:
28 # stackno = parsed[4].split('-')[1]
29 if parsed[6] == 'ringing':
30 globalvars.weareringing = True
31 print('We are ringing')
32 return
33
34 # When a call is answered, the receiver stackno is +1 in hex than
35 # the caller's.
36
37 # The phone is ringing.
38 if globalvars.weareringing:
39 if parsed[3] == 'app_dial.c:' and parsed[5] == 'answered':
40 globalvars.weareringing = False
41 globalvars.wehaveanswered = True
42 print('We have answered')
43 resp = requests.get(STATION_API+'/callanswered')
44 if resp.status_code != 200:
45 print('Something went wrong with the API call.')
46 return
47
48 # The phone has been picked up.
49 if globalvars.wehaveanswered:
50 if parsed[3] == 'pbx.c:':
51 if parsed[6].startswith('Hangup("' + CALLER_ID):
52 globalvars.wehaveanswered = False
53 print('We hung up.')
54 print('---')
55 resp = requests.get(STATION_API+'/callended')
56 if resp.status_code != 200:
57 print('Something went wrong with the API call.')
58 return
59
60
61 def main():
62 """
63 Main routine.
64 Reads standard input line by line.
65 """
66 print('Tailing logfile...')
67 while True:
68 line = sys.stdin.readline()
69 handle_line(line)
70
71
72 if __name__ == '__main__':
73 main()