Trigger Camera to Record via Extensions_custom.conf and CURL

This is my first attempt at a higher level custom script and am getting lost on how to handle NOANSWER, CONGESTION, etc events and still send a CURL event.

I am looking to create a custom dial plan in FreePBX to achieve triggering a camera to start and stop recording. The Features I am looking for are: 1.) Send CURL Event upon DIAL. 2) Send 2 CURL events upon NOANSWER, CONGESTION, BUSY, etc. 3.) Send 2 CURL events after HANGUP.

In the script below you can see the CURL actions listed at the top and a rough idea of what I am looking for. In Essence I created a Pseudo Extension for the phone to dial which triggers the CURL event 1. Then if no answer Curl event 2 and 3 are triggered. If the call is answered, then it will wait until the call is hung-up until running CURL event 2 and 3.

Just looking to get some eyes on this and some ideas of where I am going wrong.

[from-internal-additional-custom]

:CURL EVENT 1:   curl -X PUT https://cloud-vms.com/api/v4/channel/ -H "accept: application/json" -H "Authorization: Acc eyJjYW1pZCI6IDUsICJjbW5ncmlkIjogNSwgImFjY2VzcyI6ICJhbGwiLCAidG9rZW4iOiAic2hhcmUuZXlKemFTSTZJREV6ZlEuNjQzZDU5OWF0YmMxZmFiMDAud0hoTlBBVWNPcjZvcWlHNHFSdHd5b1pOenpFIidm1zLmNvbSIsICJjYW0iOiAiY2FtLmNvZGVibHVlLmNvZGVibHVlLmNsb3VkLXZtcy5jb20ifQ==" -H "Content-Type: application/json" -d "{ \"recording\": true, \"streaming\": true, \"rec_mode\": \"on\"}")})


;CURL EVENT 2:   curl -X PUT https://cloud-vms.com/api/v4/channel/ -H "accept: application/json" -H "Authorization: Acc eyJjYW1pZCI6IDUsICJjbW5ncmlkIjogNSwgImFjY2VzcyI6ICJhbGwiLCAidG9rZW4iOiAic2hhcmUuZXlKemFTSTZJREV6ZlEuNjQzZDU5OWF0YmMxZmFiMDAud0hoTlBBVWNPcjZvcWlHNHFSdHd5b1puY2xvdWQtdm1zLmNvbSIsICJjYW0iOiAiY2FtLmNvZGVibHVlLmNvZGVibHVlLmNsb3VkLXZtcy5jb20ifQ==" -H "Content-Type: application/json" -d "{ \"recording\": false, \"streaming\": false, \"rec_mode\": \"off\"}")})

;CURL EVENT 3: curl -X POST https://cloud-vms.com/api/v4/clips/ -H "accept: application/json" -H "Authorization: Acc eyJjYW1pZCI6IDUsICJjbW5ncmlkIjogNSwgImFjY2VzcyI6ICJhbGwiLCAidG9rZW4iOiAic2hhcmUuZXlKemFTSTZJREV6ZlEuNjQzZDU5OWF0YmMxZmFiMDAud0hoTlBBVWNPcjZvcWlHNHFSdHd5b1xvdWQtdm1zLmNvbSIsICJjYW0iOiAiY2FtLmNvZGVibHVlLmNvZGVibHVlLmNsb3VkLXZtcy5jb20ifQ==" -H "Content-Type: application/json" -d "{ \"start\": \"2020-04-04T03:39:27\", \"end\": \"2020-04-04T03:39:47\", \"wait_for_data\": false, \"event_time\": null, \"group\": \"Lessons\", \"title\": \"Intro\"}")})



;Set Pseudo extension path

exten => 99,1,Set(Ext01=1001)

 

   ;Send event to log file

   same => n,Verbose("*** Recording On ***")

 

   ;Answer incoming call

   same => n,Answer

 

   ;Send RECORDING ON to VXG

   same => n,NoOp(${SHELL(curl -X PUT https://cloud-vms.com/api/v4/channel/ -H "accept: application/json" -H "Authorization: Acc eyJjYW1pZCI6IDUsICJjbW5ncmlkIjogNSwgImFjY2VzcyI6ICJhbGwiLCAidG9rZW4iOiAic2hhcmUuZXlKemFTSTZJREV6ZlEuNjQzZDU5OWF0YmMxZmFiMDAud0hoTlBBVWNPcjZvcWlHNHFSdHd5b1pOenpFIidm1zLmNvbSIsICJjYW0iOiAiY2FtLmNvZGVibHVlLmNvZGVibHVlLmNsb3VkLXZtcy5jb20ifQ==" -H "Content-Type: application/json" -d "{ \"recording\": true, \"streaming\": true, \"rec_mode\": \"on\"}")})

  

    

   ;Transfer Call to destination or ring group
 
   same => n,Dial(local/${Ext01}@from-internal,200,gU)

  

   ; If incoming call not answered, then goto GoToEnd01 function

        same => n,Verbose("*** Before DIALSTATUS Test ***")

        same => n,GotoIf($["${DIALSTATUS}"="CHANUNAVAIL"]?GoToEnd01)

        same => n,GotoIf($["${DIALSTATUS}"="CONGESTION"]?GoToEnd01)

        same => n,GotoIf($["${DIALSTATUS}"="BUSY"]?GoToEnd01)

        same => n,GotoIf($["${DIALSTATUS}"="NOANSWER"]?GoToEnd01)

 

   ;Send event to log file

   same => n,Verbose("*** Recording Off ***")

 

   ;Send RECORDING OFF to VXG

   same => n,NoOp(${SHELL(curl -X PUT https://cloud-vms.com/api/v4/channel/ -H "accept: application/json" -H "Authorization: Acc eyJjYW1pZCI6IDUsICJjbW5ncmlkIjogNSwgImFjY2VzcyI6ICJhbGwiLCAidG9rZW4iOiAic2hhcmUuZXlKemFTSTZJREV6ZlEuNjQzZDU5OWF0YmMxZmFiMDAud0hoTlBBVWNPcjZvcWlHNHFSdHd5b1puY2xvdWQtdm1zLmNvbSIsICJjYW0iOiAiY2FtLmNvZGVibHVlLmNvZGVibHVlLmNsb3VkLXZtcy5jb20ifQ==" -H "Content-Type: application/json" -d "{ \"recording\": false, \"streaming\": false, \"rec_mode\": \"off\"}")})

 

   ;Send CREATE CLIP to VXG

   same => n,NoOp(${SHELL(curl -X POST https://cloud-vms.com/api/v4/clips/ -H "accept: application/json" -H "Authorization: Acc eyJjYW1pZCI6IDUsICJjbW5ncmlkIjogNSwgImFjY2VzcyI6ICJhbGwiLCAidG9rZW4iOiAic2hhcmUuZXlKemFTSTZJREV6ZlEuNjQzZDU5OWF0YmMxZmFiMDAud0hoTlBBVWNPcjZvcWlHNHFSdHd5b1xvdWQtdm1zLmNvbSIsICJjYW0iOiAiY2FtLmNvZGVibHVlLmNvZGVibHVlLmNsb3VkLXZtcy5jb20ifQ==" -H "Content-Type: application/json" -d "{ \"start\": \"2020-04-04T03:39:27\", \"end\": \"2020-04-04T03:39:47\", \"wait_for_data\": false, \"event_time\": null, \"group\": \"Lessons\", \"title\": \"Intro\"}")})

     

   ;HANGUP and exit script

   same => n,Hangup()

   ; Auto-terminate call after 300 seconds (5 mins)

   same => n(GoToEnd01),NoOp()
   same => n,NoOp(${SHELL(curl -X PUT https://cloud-vms.com/api/v4/channel/ -H "accept: application/json" -H "Authorization: Acc eyJjYW1pZCI6IDUsICJjbW5ncmlkIjogNSwgImFjY2VzcyI6ICJhbGwiLCAidG9rZW4iOiAic2hhcmUuZXlKemFTSTZJREV6ZlEuNjQzZDU5OWF0YmMxZmFiMDAud0hoTlBBVWNPcjZvcWlHNHFSdHd59kZWJsdWUuY2xvdWQtdm1zLmNvbSIsICJjYW0iOiAiY2FtLmNvZGVibHVlLmNvZGVibHVlLmNsb3VkLXZtcy5jb20ifQ==" -H "Content-Type: application/json" -d "{ \"recording\": false, \"streaming\": false, \"rec_mode\": \"off\"}")})

   same => n,NoOp(${SHELL(curl -X POST https://cloud-vms.com/api/v4/clips/ -H "accept: application/json" -H "Authorization: Acc eyJjYW1pZCI6IDUsICJjbW5ncmlkIjogNSwgImFjY2VzcyI6ICJhbGwiLCAidG9rZW4iOiAic2hhcmUuZXlKemFTSTZJREV6ZlEuNjQzZDU5OWF0YmMxZmFiMDAud0hoTlBBVWNPcjZvcWlHNHFSdHd5b1puY29kZWJsdWUuY2xvdWQtdm1zLmNvbSIsICJjYW0iOiAiY2FtLmNvZGVibHVlLmNvZGVibHVlLmNsb3VkLXZtcy5jb20ifQ==" -H "Content-Type: application/json" -d "{ \"start\": \"2020-04-04T03:39:27\", \"end\": \"2020-04-04T03:39:47\", \"wait_for_data\": false, \"event_time\": null, \"group\": \"Lessons\", \"title\": \"Intro\"}")})

   same => n,Hangup()

Review this post. As part of the hangup handler, you can check the value of DIALSTATUS to perform the curls:

This topic was automatically closed 31 days after the last reply. New replies are no longer allowed.