#!/usr/bin/python3 import sys import json import requests from asterisk.agi import AGI import os import logger from dotenv import load_dotenv load_dotenv('/var/lib/asterisk/agi-bin/pyst2/agiEnviromentSetup.env') #------------------------------------------------------------------------------ ''' Script gets a JSON from Back End API Analyze and return a variable for number_active_channel_project to Dial Plan ''' agi = AGI() caller_id=agi.env['agi_callerid'] file_name=os.path.basename(__file__) LOG = logger.get(caller_id,file_name) LOG.info('Start AGI script') # api-endpoint API_BE_SERVER=os.environ.get('API_BE_SERVER') CPM_PORT=os.environ.get('CPM_PORT') API_ENDPOINT="http://" + API_BE_SERVER + ":" + CPM_PORT + "/api/v1/cpm/channels" LOG.info('Request url: ' + API_ENDPOINT) # Get values "argv" from Dial Plan tenant_id = sys.argv[2] project_id = sys.argv[1] #Defining a params dict for the parameters to be sent to the API API_PARAMS={ "TenantId":int(tenant_id), "ProjectId":int(project_id) } LOG.info('Request params: ' + str(API_PARAMS)) # sending get request and saving the response as response object responseData ={} try: response = requests.post(API_ENDPOINT,json=API_PARAMS,timeout=10) if response.status_code is not None: LOG.info('Status code: ' + str(response.status_code)) responseData = response.json() except requests.exceptions.JSONDecodeError as err: LOG.error("Invalid Request url: " + API_ENDPOINT) agi.verbose("Invalid Request url: " + API_ENDPOINT) agi.hangup() sys.exit() except Exception as err: LOG.error(str(err)) agi.verbose(str(err)) agi.hangup() sys.exit() #Get value: "number of active channels" from key:TenantIdActiveChannel if response.status_code == 200: LOG.info(str(responseData)) agi.verbose(str(responseData)) project=responseData['ProjectChannelCounts'] tenant=responseData['TenantChannelCounts'] if project > 0 and tenant > 0: agi.verbose(message = 'Normalty') # return variables to Dial Plan agi.set_variable("number_active_channels_tenant",tenant) agi.set_variable("number_active_channels_project",project) LOG.info('End AGI script') else: LOG.error('Both TennantChannelCounts & ProjectChannelCounts MUST be always > 0') agi.verbose('ERROR: Both TennantChannelCounts & ProjectChannelCounts MUST be always > 0') agi.hangup() else: LOG.error(str(responseData)) agi.verbose('ERROR: ' + str(responseData)) agi.hangup()