Giter Site home page Giter Site logo

asteriskserver's Introduction

Deploy an asterisk server to Digital Ocean

Meta-requirements

The setup of README-aws and README-twilio should be completed. Voip.ms should be set up, there is no README for that. These should only have to be done once.

Steps

  • Test, validate, etc.
  • Create stage droplet with domain name
  • Test
  • Promote stage droplet to prod droplet

Requirements and test

  • Have whatever the correct Ruby and Lua (for testing) environments are.
  • Have no Digital Ocean droplets or domains named futel-stage.phu73l.net.
  • Have a Digital Ocean assets snapshot created by storageserver.
  • Have src/asterisk-18.8.0-futel.1.el8.x86_64.rpm built by buildserver.
  • Create or check out release branch.

Create deployment virtualenv

  • python3 -m venv venv
  • source venv/bin/activate
  • pip install -r requirements.txt

Run unit tests locally

  python3 -m venv venv
  pushd src/var/lib/asterisk/agi-bin
  python3 -m unittest discover test
  popd
  pushd src/opt/futel/src
  python3 -m unittest discover test
  popd
  # The requirements for these are simple, but not documented here.
  # pushd src/etc/asterisk/test
  # lua test.lua

Run integration tests on virtualbox

  cd /opt/futel/itest
  sudo -u asterisk ./itest.sh

Validate requirements and configuration locally

  python3 -m venv venv
  ansible-playbook -i deploy/hosts deploy/requirements_conf_prod_playbook.yml
  ansible-playbook -K -i deploy/hosts deploy/requirements_packages_generic_playbook.yml

Deploy stage droplet

deploy_playbook.yml may fail if DNS takes a long time to propagate. Run it again if it does.

update_asterisk_conf_sync_playbook.yml may fail with file transfer issues. Run it again if it does.

  • ansible-playbook -i deploy/hosts deploy/deploy_playbook.yml --vault-id=digitalocean@conf/vault_pass_digitalocean.txt --vault-id prod@conf/vault_pass_prod.txt
  • ansible-playbook -i deploy/hosts deploy/baseinstall_playbook.yml --limit 'all:!virtualbox' --vault-id=digitalocean@conf/vault_pass_digitalocean.txt
  • ansible-playbook -i deploy/hosts deploy/update_asterisk_playbook.yml --limit 'all:!virtualbox' --vault-id generic@conf/vault_pass_generic.txt
  • ansible-playbook -i deploy/hosts deploy/update_asterisk_conf_sync_playbook.yml --limit 'all:!virtualbox' --vault-id prod@conf/vault_pass_prod.txt

Test droplet

If testplan has changed since last release branch, update google sheet testplan, keeping dates of nonupdated completed tests. Test stage against google sheet testplan.

Promote stage to prod

rename futel-prod.phu73l.net droplet to futel-prod-back rename futel-stage.phu73l.net droplet to futel-prod.phu73l.net

point all voip.ms DID forwarding rules to subaccounts corresponding to new conf_version on futel-prod.phu73l.net 185060_prod-foo|bar subaccount

  ansible-playbook -i deploy/hosts deploy/promote_playbook.yml --vault-id=digitalocean@conf/vault_pass_digitalocean.txt
  ansible-playbook -i deploy/hosts deploy/post_promote_playbook.yml --vault-id=digitalocean@conf/vault_pass_digitalocean.txt

Delete the assets* volume which was attached to futel-prod-back.

Remove snapshots of futel-prod-back except for most recent.

  • test that prod outgoing calls work
  • test that prod incoming call to incoming line works
  • test that prod incoming calls to extensions work or get channel unavailable
  • test that prod incoming calls to extensions work (may take time)

Update iptables

This is done after a new vpnbox is deployed.

  ansible-playbook -i deploy/hosts deploy/update_iptables_playbook.yml

Create droplets from images

A droplet can be created from any image with the stage_from_snapshot playbook. This will create the stage droplet and assign a DNS name, so there should be no futel-stage.phu73l.net droplet or domain.

  ansible-playbook -i deploy/hosts deploy/stage_from_snapshot_playbook.yml --vault-password-file=conf/vault_pass_digitalocean.txt --extra-vars snapshot=<image>

asteriskserver's People

Contributors

breedx2 avatar jboone avatar kra avatar lboom avatar x37v avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

asteriskserver's Issues

operator or crosstalk leads to girl from ipanema

picked up ext 667 in response to a ring, heard girl from ipanema.

Looks like the ring was due to an operator call.

From the logs, it looks like this is some kind of crosstalk between calls - maybe one call was playing that and when I picked up 667, I connected to that call somehow? I have been able to do that before by flashing over and over again, but never reproducibly.

Here's the logs from then, maybe not from the beginning of everything. It looks like call 46 was ringing the street phone, call 48 called the operator, then when I picked up the operator ring I got connected to 46, which had been playing hold music? Maybe?

[Sep 27 13:07:27] VERBOSE[1454][C-00000048] netsock2.c: == Using SIP RTP CoS mark 5
[Sep 27 13:07:27] VERBOSE[2755][C-00000048] pbx.c: -- Executing [999@default-outgoing:1] Set("SIP/668-00000079", "destination=outgoing-ivr") in new stack
[Sep 27 13:07:27] VERBOSE[2755][C-00000048] pbx.c: -- Executing [999@default-outgoing:2] Goto("SIP/668-00000079", "default-outgoing-by-extension,s,1") in new stack
[Sep 27 13:07:27] VERBOSE[2755][C-00000048] pbx.c: -- Goto (default-outgoing-by-extension,s,1)
[Sep 27 13:07:27] VERBOSE[2755][C-00000048] pbx.c: -- Executing [s@default-outgoing-by-extension:1] Macro("SIP/668-00000079", "metric,outgoing-by-extension") in new stack
[Sep 27 13:07:27] VERBOSE[2755][C-00000048] pbx.c: -- Executing [s@macro-metric:1] AGI("SIP/668-00000079", "metric.agi,outgoing-by-extension") in new stack
[Sep 27 13:07:27] VERBOSE[2755][C-00000048] res_agi.c: -- Launched AGI Script /opt/asterisk/var/lib/asterisk/agi-bin/metric.agi
[Sep 27 13:07:27] VERBOSE[2755][C-00000048] res_agi.c: metric.agi,outgoing-by-extension: CALLERID(number)=668, UNIQUEID=1443384447.121, CHANNEL=SIP/668-00000079, name=outgoing-by-extension
[Sep 27 13:07:27] VERBOSE[2755][C-00000048] res_agi.c: -- <SIP/668-00000079>AGI Script metric.agi completed, returning 0
[Sep 27 13:07:27] VERBOSE[2755][C-00000048] pbx.c: -- Executing [s@default-outgoing-by-extension:2] Set("SIP/668-00000079", "CALLERID(num)=18452055004") in new stack
[Sep 27 13:07:27] VERBOSE[2755][C-00000048] pbx.c: -- Executing [s@default-outgoing-by-extension:3] Goto("SIP/668-00000079", "outgoing-ivr,s,1") in new stack
[Sep 27 13:07:27] VERBOSE[2755][C-00000048] pbx.c: -- Goto (outgoing-ivr,s,1)
[Sep 27 13:07:27] VERBOSE[2755][C-00000048] pbx.c: -- Executing [s@outgoing-ivr:1] Macro("SIP/668-00000079", "metric,outgoing-ivr") in new stack
[Sep 27 13:07:27] VERBOSE[2755][C-00000048] pbx.c: -- Executing [s@macro-metric:1] AGI("SIP/668-00000079", "metric.agi,outgoing-ivr") in new stack
[Sep 27 13:07:27] VERBOSE[2755][C-00000048] res_agi.c: -- Launched AGI Script /opt/asterisk/var/lib/asterisk/agi-bin/metric.agi
[Sep 27 13:07:27] VERBOSE[2755][C-00000048] res_agi.c: metric.agi,outgoing-ivr: CALLERID(number)=18452055004, UNIQUEID=1443384447.121, CHANNEL=SIP/668-00000079, name=outgoing-ivr
[Sep 27 13:07:27] VERBOSE[2755][C-00000048] res_agi.c: -- <SIP/668-00000079>AGI Script metric.agi completed, returning 0
[Sep 27 13:07:27] VERBOSE[2755][C-00000048] pbx.c: -- Executing [s@outgoing-ivr:2] WaitExten("SIP/668-00000079", "0.25") in new stack
[Sep 27 13:07:28] VERBOSE[2715][C-00000046] app_dial.c: -- SIP/callcentric-default-00000078 is ringing
[Sep 27 13:07:28] VERBOSE[2755][C-00000048] pbx.c: -- Timeout on SIP/668-00000079, continuing...
[Sep 27 13:07:28] VERBOSE[2755][C-00000048] pbx.c: -- Executing [s@outgoing-ivr:3] Macro("SIP/668-00000079", "say,welcome-to-fewtel") in new stack
[Sep 27 13:07:28] VERBOSE[2755][C-00000048] pbx.c: -- Executing [s@macro-say:1] AGI("SIP/668-00000079", "sound_path.agi,welcome-to-fewtel,outgoing-ivr") in new stack
[Sep 27 13:07:28] VERBOSE[2755][C-00000048] res_agi.c: -- Launched AGI Script /opt/asterisk/var/lib/asterisk/agi-bin/sound_path.agi
[Sep 27 13:07:28] VERBOSE[2755][C-00000048] res_agi.c: -- <SIP/668-00000079>AGI Script sound_path.agi completed, returning 0
[Sep 27 13:07:28] VERBOSE[2755][C-00000048] pbx.c: -- Executing [s@macro-say:2] BackGround("SIP/668-00000079", "/opt/asterisk/var/lib/asterisk/sounds/futel/recordings/karl_quuux/welcome-to-fewtel") in new stack
[Sep 27 13:07:28] VERBOSE[2755][C-00000048] file.c: -- <SIP/668-00000079> Playing '/opt/asterisk/var/lib/asterisk/sounds/futel/recordings/karl_quuux/welcome-to-fewtel.gsm' (language 'en')
[Sep 27 13:07:28] VERBOSE[2715][C-00000046] app_dial.c: -- SIP/callcentric-default-00000078 is ringing
[Sep 27 13:07:28] VERBOSE[2755][C-00000048] pbx.c: -- Invalid extension '5' in context 'outgoing-ivr' on SIP/668-00000079
[Sep 27 13:07:28] VERBOSE[2755][C-00000048] pbx.c: == CDR updated on SIP/668-00000079
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] pbx.c: -- Executing [i@outgoing-ivr:1] Goto("SIP/668-00000079", "s,2") in new stack
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] pbx.c: -- Goto (outgoing-ivr,s,2)
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] pbx.c: -- Executing [s@outgoing-ivr:2] WaitExten("SIP/668-00000079", "0.25") in new stack
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] pbx.c: -- Timeout on SIP/668-00000079, continuing...
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] pbx.c: -- Executing [s@outgoing-ivr:3] Macro("SIP/668-00000079", "say,welcome-to-fewtel") in new stack
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] pbx.c: -- Executing [s@macro-say:1] AGI("SIP/668-00000079", "sound_path.agi,welcome-to-fewtel,outgoing-ivr") in new stack
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] res_agi.c: -- Launched AGI Script /opt/asterisk/var/lib/asterisk/agi-bin/sound_path.agi
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] res_agi.c: -- <SIP/668-00000079>AGI Script sound_path.agi completed, returning 0
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] pbx.c: -- Executing [s@macro-say:2] BackGround("SIP/668-00000079", "/opt/asterisk/var/lib/asterisk/sounds/futel/recordings/karl_quuux/welcome-to-fewtel") in new stack
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] file.c: -- <SIP/668-00000079> Playing '/opt/asterisk/var/lib/asterisk/sounds/futel/recordings/karl_quuux/welcome-to-fewtel.gsm' (language 'en')
[Sep 27 13:07:29] VERBOSE[2715][C-00000046] app_dial.c: -- SIP/callcentric-default-00000078 is ringing
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] app_macro.c: == Channel 'SIP/668-00000079' jumping out of macro 'say'
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] pbx.c: -- Executing [0@outgoing-ivr:1] Goto("SIP/668-00000079", "operator,s,1") in new stack
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] pbx.c: -- Goto (operator,s,1)
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] pbx.c: -- Executing [s@operator:1] Macro("SIP/668-00000079", "metric,operator") in new stack
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] pbx.c: -- Executing [s@macro-metric:1] AGI("SIP/668-00000079", "metric.agi,operator") in new stack
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] res_agi.c: -- Launched AGI Script /opt/asterisk/var/lib/asterisk/agi-bin/metric.agi
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] res_agi.c: metric.agi,operator: CALLERID(number)=18452055004, UNIQUEID=1443384447.121, CHANNEL=SIP/668-00000079, name=operator
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] res_agi.c: -- <SIP/668-00000079>AGI Script metric.agi completed, returning 0
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] pbx.c: -- Executing [s@operator:2] Dial("SIP/668-00000079", "SIP/667&SIP/callcentric-default/15038419766&SIP/callcentric-default/15033090849,300") in new stack
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] netsock2.c: == Using SIP RTP CoS mark 5
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] netsock2.c: == Using SIP RTP CoS mark 5
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] netsock2.c: == Using SIP RTP CoS mark 5
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] app_dial.c: -- Called SIP/667
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] app_dial.c: -- Called SIP/callcentric-default/15038419766
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] app_dial.c: -- Called SIP/callcentric-default/15033090849
[Sep 27 13:07:29] VERBOSE[1454][C-00000048] chan_sip.c: -- Got SIP response 486 "Busy Here" back from 45.55.19.71:5061
[Sep 27 13:07:29] VERBOSE[2755][C-00000048] app_dial.c: -- SIP/667-0000007a is busy
[Sep 27 13:07:31] VERBOSE[2715][C-00000046] app_dial.c: -- SIP/callcentric-default-00000078 is ringing
[Sep 27 13:07:31] VERBOSE[2755][C-00000048] app_dial.c: -- SIP/callcentric-default-0000007c is ringing
[Sep 27 13:07:31] VERBOSE[2755][C-00000048] app_dial.c: -- SIP/callcentric-default-0000007c answered SIP/668-00000079
[Sep 27 13:07:31] VERBOSE[2755][C-00000048] rtp_engine.c: -- Locally bridging SIP/668-00000079 and SIP/callcentric-default-0000007c
[Sep 27 13:07:32] WARNING[1454] chan_sip.c: Retransmission timeout reached on transmission [email protected] for seqno 102 (Critical Request) -- See https://wiki.asterisk.org/wiki/display/AST/SIP+Retransmissions
Packet timed out after 6400ms with no response
[Sep 27 13:07:32] WARNING[1454] chan_sip.c: Hanging up call [email protected] - no reply to our critical packet (see https://wiki.asterisk.org/wiki/display/AST/SIP+Retransmissions).
[Sep 27 13:07:32] VERBOSE[2715][C-00000046] res_musiconhold.c: -- Stopped music on hold on SIP/callcentric-default-00000077
[Sep 27 13:07:34] VERBOSE[2715][C-00000046] app_dial.c: -- SIP/667-00000076 answered SIP/668-00000074
[Sep 27 13:07:34] VERBOSE[2715][C-00000046] res_musiconhold.c: -- Stopped music on hold on SIP/callcentric-default-00000078
[Sep 27 13:07:34] VERBOSE[2715][C-00000046] rtp_engine.c: -- Locally bridging SIP/668-00000074 and SIP/667-00000076
[Sep 27 13:07:34] WARNING[2715][C-00000046] channel.c: Codec mismatch on channel SIP/667-00000076 setting write format to slin from ulaw native formats (ulaw)
[Sep 27 13:07:36] VERBOSE[2755][C-00000048] pbx.c: == Spawn extension (operator, s, 2) exited non-zero on 'SIP/668-00000079'
[Sep 27 13:07:45] VERBOSE[2715][C-00000046] res_musiconhold.c: -- Stopped music on hold on SIP/667-00000076
[Sep 27 13:07:45] VERBOSE[2715][C-00000046] pbx.c: == Spawn extension (operator, s, 2) exited non-zero on 'SIP/668-00000074'
[Sep 27 13:08:08] VERBOSE[1454][C-00000049] netsock2.c: == Using SIP RTP CoS mark 5
[Sep 27 13:08:08] VERBOSE[2761][C-00000049] pbx.c: -- Executing [999@default-outgoing:1] Set("SIP/667-0000007d", "destination=outgoing-ivr") in new stack
[Sep 27 13:08:08] VERBOSE[2761][C-00000049] pbx.c: -- Executing [999@default-outgoing:2] Goto("SIP/667-0000007d", "default-outgoing-by-extension,s,1") in new stack
[Sep 27 13:08:08] VERBOSE[2761][C-00000049] pbx.c: -- Goto (default-outgoing-by-extension,s,1)
[Sep 27 13:08:08] VERBOSE[2761][C-00000049] pbx.c: -- Executing [s@default-outgoing-by-extension:1] Macro("SIP/667-0000007d", "metric,outgoing-by-extension") in new stack
[Sep 27 13:08:08] VERBOSE[2761][C-00000049] pbx.c: -- Executing [s@macro-metric:1] AGI("SIP/667-0000007d", "metric.agi,outgoing-by-extension") in new stack
[Sep 27 13:08:08] VERBOSE[2761][C-00000049] res_agi.c: -- Launched AGI Script /opt/asterisk/var/lib/asterisk/agi-bin/metric.agi
[Sep 27 13:08:08] VERBOSE[2761][C-00000049] res_agi.c: metric.agi,outgoing-by-extension: CALLERID(number)=667, UNIQUEID=1443384488.125, CHANNEL=SIP/667-0000007d, name=outgoing-by-extension
[Sep 27 13:08:08] VERBOSE[2761][C-00000049] res_agi.c: -- <SIP/667-0000007d>AGI Script metric.agi completed, returning 0
[Sep 27 13:08:08] VERBOSE[2761][C-00000049] pbx.c: -- Executing [s@default-outgoing-by-extension:2] Set("SIP/667-0000007d", "CALLERID(num)=5037414912") in new stack
[Sep 27 13:08:08] VERBOSE[2761][C-00000049] pbx.c: -- Executing [s@default-outgoing-by-extension:3] Goto("SIP/667-0000007d", "outgoing-ivr,s,1") in new stack
[Sep 27 13:08:08] VERBOSE[2761][C-00000049] pbx.c: -- Goto (outgoing-ivr,s,1)
[Sep 27 13:08:08] VERBOSE[2761][C-00000049] pbx.c: -- Executing [s@outgoing-ivr:1] Macro("SIP/667-0000007d", "metric,outgoing-ivr") in new stack
[Sep 27 13:08:08] VERBOSE[2761][C-00000049] pbx.c: -- Executing [s@macro-metric:1] AGI("SIP/667-0000007d", "metric.agi,outgoing-ivr") in new stack
[Sep 27 13:08:08] VERBOSE[2761][C-00000049] res_agi.c: -- Launched AGI Script /opt/asterisk/var/lib/asterisk/agi-bin/metric.agi
[Sep 27 13:08:08] VERBOSE[2761][C-00000049] res_agi.c: metric.agi,outgoing-ivr: CALLERID(number)=5037414912, UNIQUEID=1443384488.125, CHANNEL=SIP/667-0000007d, name=outgoing-ivr
[Sep 27 13:08:08] VERBOSE[2761][C-00000049] res_agi.c: -- <SIP/667-0000007d>AGI Script metric.agi completed, returning 0
[Sep 27 13:08:08] VERBOSE[2761][C-00000049] pbx.c: -- Executing [s@outgoing-ivr:2] WaitExten("SIP/667-0000007d", "0.25") in new stack
[Sep 27 13:08:09] VERBOSE[2761][C-00000049] pbx.c: -- Timeout on SIP/667-0000007d, continuing...
[Sep 27 13:08:09] VERBOSE[2761][C-00000049] pbx.c: -- Executing [s@outgoing-ivr:3] Macro("SIP/667-0000007d", "say,welcome-to-fewtel") in new stack
[Sep 27 13:08:09] VERBOSE[2761][C-00000049] pbx.c: -- Executing [s@macro-say:1] AGI("SIP/667-0000007d", "sound_path.agi,welcome-to-fewtel,outgoing-ivr") in new stack
[Sep 27 13:08:09] VERBOSE[2761][C-00000049] res_agi.c: -- Launched AGI Script /opt/asterisk/var/lib/asterisk/agi-bin/sound_path.agi
[Sep 27 13:08:09] VERBOSE[2761][C-00000049] res_agi.c: -- <SIP/667-0000007d>AGI Script sound_path.agi completed, returning 0
[Sep 27 13:08:09] VERBOSE[2761][C-00000049] pbx.c: -- Executing [s@macro-say:2] BackGround("SIP/667-0000007d", "/opt/asterisk/var/lib/asterisk/sounds/futel/recordings/karl_quuux/welcome-to-fewtel") in new stack
[Sep 27 13:08:09] VERBOSE[2761][C-00000049] file.c: -- <SIP/667-0000007d> Playing '/opt/asterisk/var/lib/asterisk/sounds/futel/recordings/karl_quuux/welcome-to-fewtel.gsm' (language 'en')
[Sep 27 13:08:11] VERBOSE[2761][C-00000049] pbx.c: -- Executing [s@outgoing-ivr:4] Macro("SIP/667-0000007d", "say,to-make-a-call") in new stack
[Sep 27 13:08:11] VERBOSE[2761][C-00000049] pbx.c: -- Executing [s@macro-say:1] AGI("SIP/667-0000007d", "sound_path.agi,to-make-a-call,outgoing-ivr") in new stack
[Sep 27 13:08:11] VERBOSE[2761][C-00000049] res_agi.c: -- Launched AGI Script /opt/asterisk/var/lib/asterisk/agi-bin/sound_path.agi
[Sep 27 13:08:11] VERBOSE[2761][C-00000049] res_agi.c: -- <SIP/667-0000007d>AGI Script sound_path.agi completed, returning 0
[Sep 27 13:08:11] VERBOSE[2761][C-00000049] pbx.c: -- Executing [s@macro-say:2] BackGround("SIP/667-0000007d", "/opt/asterisk/var/lib/asterisk/sounds/futel/recordings/karl_quuux/to-make-a-call") in new stack
[Sep 27 13:08:11] VERBOSE[2761][C-00000049] file.c: -- <SIP/667-0000007d> Playing '/opt/asterisk/var/lib/asterisk/sounds/futel/recordings/karl_quuux/to-make-a-call.gsm' (language 'en')
[Sep 27 13:08:11] VERBOSE[2761][C-00000049] app_macro.c: == Spawn extension (macro-say, s, 2) exited non-zero on 'SIP/667-0000007d' in macro 'say'
[Sep 27 13:08:11] VERBOSE[2761][C-00000049] pbx.c: == Spawn extension (outgoing-ivr, s, 4) exited non-zero on 'SIP/667-0000007d'
[root@futel-prod ~]#

make a better voice menu recording system

several things could improve

  • easier configuration of recordings to record than the current editing of a .py file
  • better choosing of what to record instead of having to go through entire recordings
  • better way to approve recording instead of having to start over
  • better way to identify who is recording, maybe just record an intro 'this is karl trying to make the foo submenu'

stop extension not hanging up - flash?

We are getting extensions that are not hanging up when the phone is hung up. Not sure why, we get this for 668, and are now getting this for the new 690.

Symptoms are the console and log showing the menu as cycling by, at least if that was what was going on when the hangup was attempted.

Not sure how long it lasts.

Outgoing calls have a max length, so if this is done during a call our total expense is bounded by that. Otherwise, we're probably just dealing with bandwith to the ATA or something.

Is this a setting in the PAP? In asterisk?

metrics

some way to keep track of how an installation is being used
to start with we could just write to a file and make sure that file is backed up and preserved when we promote stage to prod

cannot change mailbox password

Create mailbox, enter password, ok.
Access mailbox, change password with comedianmail, no effect. Old password still in use. vm_futel_users.inc file not changed.

put logwatch on vpnbox

We will probably have the same notification spam issues as with asteriskbox, I think it's OK to just have something and work it out.

The openvpn routers are a weak spot, r2d2 was down for a while and we didn't know until they told us.

better ivr organization

If user enters invalid entry in most or all menus, dialplan just hangs or hangs up. Should give an error message and start the menu again.

Most or all menus should have an option to return to the previous menu. Star?

Directory should probably have an operator option like main menu does.

tell voicemail users about incoming line

It isn't fully polished, but I think it's ready enough to tell the horde of voicemail users!

After creation, tell them incoming number before dropping them into voicemail, similarly to how we tell them password.

Have a voicemail info option in the main voicemail menu which tells them number and explains voicemail basics

calls to canada and mexico

How much does it cost to call various Canada or Mexico numbers with our providers? What do we have to do to allow it?

Callcentric has higher prices for Mexico mobile numbers, and we probably shouldn't increase our expenses yet.

set up separate vpn creds for each client

right now we're sharing creds. This is semi-OK because our installations are either trusted or semi-trusted and semi-secure. We want to deploy to an untrusted location, so we should be able to revoke those creds without affecting other installations.

shut down features that need persistence during promotion

Promoting stage to prod involves DNS updating, and then clients noticing the new IP address. Updating takes a few minutes currently, clients noticing takes a while.

Voicemail writes, logs, incoming calls won't work until the client is connected to the right host.

Update old prod to play a temporarily unavailable message for voicemail features?

add 211info menu option

Hey, Karl,

If you could set up the 211info line to dial 866-698-6155, that would be great.

Then have the message say something along the lines of, “If you would like information about community resources in your area, press “x” to reach 211info."

Thanks again for including us.

Cheers,
C.

asteriskbox has weird duplicate log directory tree

Logrotate? This is at least using up rsync bandwidth. I didn't diff the contents.

Listing is from the backup, but the dates are similar on prod, and on older backups.

karl@eurydice:/opt/futel/backups/prod/2016-01/opt/asterisk/var/log$ ls -l /opt/futel/backups/prod/2015-12/opt/asterisk/var/log/asterisk
total 6272
drwxr-xr-x 7 nobody 500 4096 Dec 16 17:19 asterisk
drwxr-xr-x 2 nobody 500 4096 Dec 16 17:12 cdr-csv
drwxr-xr-x 2 nobody 500 4096 Dec 16 17:12 cdr-custom
drwxr-xr-x 2 nobody 500 4096 Dec 16 17:12 cel-custom
-rw-r--r-- 1 nobody 500 120744 Dec 31 03:18 debug
-rw-r----- 1 nobody 500 6263617 Dec 31 06:37 messages
-rw-r----- 1 nobody 500 0 Dec 31 03:18 metrics
drwxr-xr-x 2 nobody 500 12288 Dec 31 03:18 old
-rw-r----- 1 nobody 500 40 Dec 31 03:18 queue_log
karl@eurydice:/opt/futel/backups/prod/2016-01/opt/asterisk/var/log$ ls -l /opt/futel/backups/prod/2015-12/opt/asterisk/var/log/asterisk/asterisk/
total 328
drwxr-xr-x 6 nobody 500 4096 Dec 16 17:19 asterisk
drwxr-xr-x 2 nobody 500 4096 Dec 16 17:12 cdr-csv
drwxr-xr-x 2 nobody 500 4096 Dec 16 17:12 cdr-custom
drwxr-xr-x 2 nobody 500 4096 Dec 16 17:12 cel-custom
-rw-r--r-- 1 nobody 500 115128 Dec 16 17:19 debug
-rw-r----- 1 nobody 500 184191 Dec 16 17:19 messages
-rw-r----- 1 nobody 500 7939 Dec 16 17:19 metrics
drwxr-xr-x 2 nobody 500 4096 Dec 16 17:19 old
-rw-r----- 1 nobody 500 40 Dec 16 17:19 queue_log
karl@eurydice:/opt/futel/backups/prod/2016-01/opt/asterisk/var/log$ ls -l /opt/futel/backups/prod/2015-12/opt/asterisk/var/log/asterisk/asterisk/asterisk/
total 136
drwxr-xr-x 2 nobody 500 4096 Dec 16 17:19 cdr-csv
drwxr-xr-x 2 nobody 500 4096 Dec 16 17:19 cdr-custom
drwxr-xr-x 2 nobody 500 4096 Dec 16 17:19 cel-custom
-rw-r--r-- 1 nobody 500 110916 Dec 16 17:19 debug
-rw-r----- 1 nobody 500 1673 Dec 16 17:19 messages
-rw-r----- 1 nobody 500 0 Dec 16 17:19 metrics
drwxr-xr-x 2 nobody 500 4096 Dec 16 17:19 old
-rw-r----- 1 nobody 500 40 Dec 16 17:19 queue_log
karl@eurydice:/opt/futel/backups/prod/2016-01/opt/asterisk/var/log$

make a futel voice conference menu

Add a message on entering, 'press star for menu'
Add the futel-confmenu menu - I don't know if we can string together smaller files or not, but whatever

busy incoming call falls through to incoming menu

This log excerpt shows two incoming calls to r2d2, I think, with no outgoing call, I think.

I think what is happening is:

  • one incoming call rings r2d2, I forget if picked up or not
  • another incoming call falls through to the incoming menu? Which is bad, it is voicemail and r2d2 doesn't know about voicemail

The fallthrough happens after a busy status, I don't know what the user is experiencing.

Suggested fix: have a fallback for incoming calls that plays a busy/unavailable error message. There is probably a better way to react explicitly to a busy signal, if possible notice that and play a message and/or a busy signal and hang up. Busy signal should be annoying to encourage hangup.

[Jan 26 18:50:12] VERBOSE[1384][C-00000089] netsock2.c: == Using SIP RTP CoS mark 5
[Jan 26 18:50:12] VERBOSE[13942][C-00000089] pbx.c: -- Executing [s@default-incoming:1] Set("SIP/callcentric-000000d1", "caller=19149775129") in new stack
[Jan 26 18:50:12] VERBOSE[13942][C-00000089] pbx.c: -- Executing [s@default-incoming:2] Goto("SIP/callcentric-000000d1", "incoming-route-by-caller,s,1") in new stack
[Jan 26 18:50:12] VERBOSE[13942][C-00000089] pbx.c: -- Goto (incoming-route-by-caller,s,1)
[Jan 26 18:50:12] VERBOSE[13942][C-00000089] pbx.c: -- Executing [s@incoming-route-by-caller:1] GotoIf("SIP/callcentric-000000d1", "0?ring-oskar,s,1") in new stack
[Jan 26 18:50:12] VERBOSE[13942][C-00000089] pbx.c: -- Executing [s@incoming-route-by-caller:2] GotoIf("SIP/callcentric-000000d1", "1?ring-r2d2,s,1") in new stack
[Jan 26 18:50:12] VERBOSE[13942][C-00000089] pbx.c: -- Goto (ring-r2d2,s,1)
[Jan 26 18:50:12] VERBOSE[13942][C-00000089] pbx.c: -- Executing [s@ring-r2d2:1] Dial("SIP/callcentric-000000d1", "SIP/670,") in new stack
[Jan 26 18:50:12] VERBOSE[13942][C-00000089] netsock2.c: == Using SIP RTP CoS mark 5
[Jan 26 18:50:12] VERBOSE[13942][C-00000089] app_dial.c: -- Called SIP/670
[Jan 26 18:50:12] VERBOSE[13942][C-00000089] app_dial.c: -- SIP/670-000000d2 is ringing
[Jan 26 18:50:12] VERBOSE[13942][C-00000089] app_dial.c: -- SIP/670-000000d2 is ringing
[Jan 26 18:50:48] VERBOSE[1384][C-0000008a] netsock2.c: == Using SIP RTP CoS mark 5
[Jan 26 18:50:48] VERBOSE[13943][C-0000008a] pbx.c: -- Executing [s@default-incoming:1] Set("SIP/66.193.176.35-000000d3", "caller=19149775129") in new stack
[Jan 26 18:50:48] VERBOSE[13943][C-0000008a] pbx.c: -- Executing [s@default-incoming:2] Goto("SIP/66.193.176.35-000000d3", "incoming-route-by-caller,s,1") in new stack
[Jan 26 18:50:48] VERBOSE[13943][C-0000008a] pbx.c: -- Goto (incoming-route-by-caller,s,1)
[Jan 26 18:50:48] VERBOSE[13943][C-0000008a] pbx.c: -- Executing [s@incoming-route-by-caller:1] GotoIf("SIP/66.193.176.35-000000d3", "0?ring-oskar,s,1") in new stack
[Jan 26 18:50:48] VERBOSE[13943][C-0000008a] pbx.c: -- Executing [s@incoming-route-by-caller:2] GotoIf("SIP/66.193.176.35-000000d3", "1?ring-r2d2,s,1") in new stack
[Jan 26 18:50:48] VERBOSE[13943][C-0000008a] pbx.c: -- Goto (ring-r2d2,s,1)
[Jan 26 18:50:48] VERBOSE[13943][C-0000008a] pbx.c: -- Executing [s@ring-r2d2:1] Dial("SIP/66.193.176.35-000000d3", "SIP/670,") in new stack
[Jan 26 18:50:48] VERBOSE[13943][C-0000008a] netsock2.c: == Using SIP RTP CoS mark 5
[Jan 26 18:50:48] VERBOSE[13943][C-0000008a] app_dial.c: -- Called SIP/670
[Jan 26 18:50:48] VERBOSE[1384][C-0000008a] chan_sip.c: -- Got SIP response 486 "Busy Here" back from 107.170.218.225:5060
[Jan 26 18:50:48] VERBOSE[13943][C-0000008a] app_dial.c: -- SIP/670-000000d4 is busy
[Jan 26 18:50:48] VERBOSE[13943][C-0000008a] app_dial.c: == Everyone is busy/congested at this time (1:1/0/0)
[Jan 26 18:50:48] VERBOSE[13943][C-0000008a] pbx.c: -- Auto fallthrough, channel 'SIP/66.193.176.35-000000d3' status is 'BUSY'
[Jan 26 18:51:12] VERBOSE[1384][C-00000089] chan_sip.c: -- Got SIP response 480 "Temporarily not available" back from 107.170.218.225:5060
[Jan 26 18:51:12] VERBOSE[13942][C-00000089] app_dial.c: -- SIP/670-000000d2 is circuit-busy
[Jan 26 18:51:12] VERBOSE[13942][C-00000089] app_dial.c: == Everyone is busy/congested at this time (1:0/1/0)
[Jan 26 18:51:12] VERBOSE[13942][C-00000089] pbx.c: -- Auto fallthrough, channel 'SIP/callcentric-000000d1' status is 'CONGESTION'

point vpn clients to hostname, not ip, use correct hostname

iptables points to the vpn hostname:

https://github.com/kra/futel-installation/blob/master/asteriskserver/src/iptables.sh

but iptables resolves to the IP address when running. This means that we can't change what the vpn server is when doing a vpnbox update, we have to restart iptables and re-run iptables.sh on the asterisk box.

Can we keep the domain name so we don't need to do this?

This may also be an issue with the routers, although this might just be bad config on my part.

Also, update iptable.sh to use the vpnbox-prod name, not futel-vpnbox.

log or notify or something when peer down for a length of time

our peers go down momentarily, especially r2d2, and this probably isn't a big deal, in any case, it happens a lot. But that means that we don't notice a longer downtime. We should have a notification event when this happens.

Event could happen every time an extension has been down a nonzero multiple of X minutes, maybe X is 1, 2, or 5? We can probably tell what's normal from the logs.

Ideally this would just log so logwatch picks it up, if that isn't doable, we could have a watcher check every interval and notify separately when down.

voicemail for r2d2

Ibrahim asked about voicemail for r2d2. I told him we'd like to do that, we're just working on something that's reliable and won't lose messages, and didn't make any promises. Some rough tasks:

  • make a better menu with a human voice
  • have voicemail pick up on incoming if no ring for X minutes
  • create a stripped down menu for outgoing, replace the existing undocumented star-for-menu, give them an undocumented way to get the full menu :)
  • add a messages notifier for outgoing, either the traditional interrupted dialtone, or a quick 'you have messages' announcement

operator recipient must improve

currently, operator calls ring two numbers until one answers. We need to be able to add more numbers, ideally stop ringing before voicemail picks up. Probably the best way is with a call queue.

"Service Unavailable" from voip.ms outgoing

seems to happen in clusters. We got this from callcentric too, but in about a month of voip.ms we've gotten 12. What does the user get, a busy signal? User has tried again a few times. IP address is for sanjose.voip.ms.

What should we do about these, failover to a different voip.ms endpoint? Failover to callcentric?

[Dec 13 20:53:28] VERBOSE[11299][C-00000171] pbx.c: -- Executing [s@macro-di
al:2] Dial("SIP/668-00000239", "SIP/voipms-oskar/...,300") in new stack
[Dec 13 20:53:28] VERBOSE[11299][C-00000171] netsock2.c: == Using SIP RTP CoS
mark 5
[Dec 13 20:53:28] VERBOSE[11299][C-00000171] app_dial.c: -- Called SIP/voipm
s-oskar/...
[Dec 13 20:53:40] VERBOSE[1302][C-00000171] chan_sip.c: -- Got SIP response 503 "Service Unavailable" back from 23.246.247.146:5060
[Dec 13 20:53:40] VERBOSE[11299][C-00000171] app_dial.c: -- SIP/voipms-oskar-0000023a is circuit-busy
[Dec 13 20:53:40] VERBOSE[11299][C-00000171] app_dial.c: == Everyone is busy/congested at this time (1:0/1/0)
[Dec 13 20:53:40] VERBOSE[11299][C-00000171] pbx.c: -- Auto fallthrough, channel 'SIP/668-00000239' status is 'CONGESTION'

karl@eurydice:/opt/futel/backups/prod/2015-12/opt/asterisk/var/log/asterisk/old$ sudo grep 'Service Unavailable' messages-*
messages-20151120:[Nov 19 23:26:26] VERBOSE[1635][C-000000ad] chan_sip.c: -- Got SIP response 503 "Service Unavailable" back from 23.246.247.146:5060
messages-20151205:[Dec 4 17:01:42] VERBOSE[1302][C-00000031] chan_sip.c: -- Got SIP response 503 "Service Unavailable" back from 23.246.247.146:5060
messages-20151205:[Dec 4 17:02:14] VERBOSE[1302][C-00000032] chan_sip.c: -- Got SIP response 503 "Service Unavailable" back from 23.246.247.146:5060
messages-20151207:[Dec 6 11:50:36] VERBOSE[1302][C-00000070] chan_sip.c: -- Got SIP response 503 "Service Unavailable" back from 23.246.247.146:5060
messages-20151207:[Dec 6 11:51:36] VERBOSE[1302][C-00000072] chan_sip.c: -- Got SIP response 503 "Service Unavailable" back from 23.246.247.146:5060
messages-20151207:[Dec 6 12:06:09] VERBOSE[1302][C-00000079] chan_sip.c: -- Got SIP response 503 "Service Unavailable" back from 23.246.247.146:5060
messages-20151207:[Dec 6 12:29:13] VERBOSE[1302][C-00000099] chan_sip.c: -- Got SIP response 503 "Service Unavailable" back from 23.246.247.146:5060
messages-20151211:[Dec 10 10:12:40] VERBOSE[1302][C-000000fd] chan_sip.c: -- Got SIP response 503 "Service Unavailable" back from 23.246.247.146:5060
messages-20151212:[Dec 11 09:34:28] VERBOSE[1302][C-00000133] chan_sip.c: -- Got SIP response 503 "Service Unavailable" back from 23.246.247.146:5060
messages-20151212:[Dec 11 09:34:55] VERBOSE[1302][C-00000134] chan_sip.c: -- Got SIP response 503 "Service Unavailable" back from 23.246.247.146:5060
messages-20151214:[Dec 13 20:53:40] VERBOSE[1302][C-00000171] chan_sip.c: -- Got SIP response 503 "Service Unavailable" back from 23.246.247.146:5060
messages-20151214:[Dec 13 20:57:19] VERBOSE[1302][C-00000176] chan_sip.c: -- Got SIP response 503 "Service Unavailable" back from 23.246.247.146:5060

packaging of intermediate devbox images is busted

this is for the first intermediate devbox, baseinstall, which doesn't have any configuration changes. I wonder if this is related to 'yum update' now ending up with a centos 6.7 box when the base box is centos 6.5.

karl@dispater:~/Documents/futel-installation/asteriskserver$ src/repackage_vm.sh asteriskserver centos6_32_baseinstall ../centos6_32_baseinstall.box

  • boxtype=asteriskserver
  • boxname=centos6_32_baseinstall
  • boxfilename=../centos6_32_baseinstall.box
    ++ dirname src/repackage_vm.sh
  • scriptdir=src
  • export vagrantbox=centos6_32_baseinstall
  • vagrantbox=centos6_32_baseinstall
  • vagrant up --no-provision
    Bringing machine 'default' up with 'virtualbox' provider...
    ==> default: Importing base box 'centos6_32_baseinstall'...
    ==> default: Matching MAC address for NAT networking...
    ==> default: Setting the name of the VM: asteriskserver_default_1446665299533_75165
    ==> default: Clearing any previously set network interfaces...
    ==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: bridged
    default: Adapter 3: bridged
    default: Adapter 4: bridged
    ==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
    ==> default: Booting VM...
    ==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
    Timed out while waiting for the machine to boot. This means that
    Vagrant was unable to communicate with the guest machine within
    the configured ("config.vm.boot_timeout" value) time period.

If you look above, you should be able to see the error(s) that
Vagrant had when attempting to connect to the machine. These errors
are usually good hints as to what may be wrong.

If you're using a custom box, make sure that networking is properly
working and you're able to connect to the machine. It is a common
problem that networking isn't setup properly in these boxes.
Verify that authentication configurations are also setup properly,
as well.

If the box appears to be booting properly, you may want to increase
the timeout ("config.vm.boot_timeout") value.

openvpn is not logging usefully

openvpn is not logging to /var/log/openvpn.log or /var/log/messages.

openvpn appears to be logging to /var/log/openvpn_old/openvpn.log-20150626. That file contains logs from June 25 and July 1, with nothing in between.

The messages in that file are not getting into logwatch.

some external phones not getting ring tones when ringing r2d2

r2d2 complained that incoming callers did not hear the ring tones when their phone was ringing. We tested it, Ibraham and Brad's phones didn't make the ring noise, mine did. The phone itself works fine and rings, they just can't tell what's happening.

One phone was cricket, I don't remember the other.

I should have had them call the oskar phone and see if it happened there.

No idea what is happening, why is this only some networks? What happens when we're ringing wrt connections, are we just picking up the phone and playing ring tones or is it more complex?

ctrlh outgoing calls are giving wrong caller id

calls from 691 (sidewalk) should give ctrlh incoming number
calls from 690 (indoors) should give incoming menu number

these currently give clinton street number, just because we didn't have anything correct at the time

metrics timestamp resolution is to the second, too coarse

this is causing the 'latest' stat to choose incoming-by-extension etc because that and the actual final destination have the same timestamp.

The timestamp has milliseconds separated from the rest with a comma, I don't know if this is a legit format or not.

Solution is probably to have the metrics script normalize the timestamp.

lots of incoming congestion

we're seeing a lot of congested messages. Most of them seem to be for incoming oskar calls.

For 31 days of logs, 96 incoming calls, 18 congested messages.

[futel@futel-prod old]$ grep 'congested' messages-|wc -l
18
[futel@futel-prod old]$ grep 'metric,ring' messages-
|wc -l
96

Some of these congesteds might not be incoming, but most seem to be.
Some of the congesteds might be legit busy signals, but many seem to not be.
Most of them are incoming oskar calls, a few are incoming r2d2 calls.

How can we find out more? Look for earlier clues, like extension unreachable before congestion. Some have this, some not. Look for other activity that would cause a busy, some don't have this either.

What could we log to find out more? Do we know when a connection is closed? Some of these could just be phone left off the hook. Can we metric the hangup on our end?

[futel@futel-prod old]$ grep 'congested|metric,ring' messages-*
messages-20150416:[Apr 15 17:37:40] VERBOSE[12572][C-00000035] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000044", "metric,ring-r2d2") in new stack
messages-20150417:[Apr 16 10:34:20] VERBOSE[12993][C-0000003c] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-0000004d", "metric,ring-r2d2") in new stack
messages-20150417:[Apr 16 10:35:20] VERBOSE[12993][C-0000003c] app_dial.c: == Everyone is busy/congested at this time (1:0/1/0)
messages-20150417:[Apr 16 10:46:49] VERBOSE[12996][C-0000003d] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-0000004f", "metric,ring-r2d2") in new stack
messages-20150417:[Apr 16 10:46:56] VERBOSE[12996][C-0000003d] app_dial.c: == Everyone is busy/congested at this time (1:0/0/1)
messages-20150417:[Apr 16 11:10:26] VERBOSE[13013][C-0000003f] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000052", "metric,ring-r2d2") in new stack
messages-20150417:[Apr 16 11:10:26] VERBOSE[13013][C-0000003f] app_dial.c: == Everyone is busy/congested at this time (1:0/0/1)
messages-20150417:[Apr 16 11:11:12] VERBOSE[13020][C-00000042] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000055", "metric,ring-r2d2") in new stack
messages-20150417:[Apr 16 18:54:33] VERBOSE[13160][C-0000004e] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/callcentric-00000066", "metric,ring-oskar") in new stack
messages-20150417:[Apr 16 21:40:16] VERBOSE[13239][C-0000005a] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/66.193.176.35-00000077", "metric,ring-oskar") in new stack
messages-20150417:[Apr 16 21:41:16] VERBOSE[13239][C-0000005a] app_dial.c: == Everyone is busy/congested at this time (1:0/1/0)
messages-20150417:[Apr 16 22:43:46] VERBOSE[13253][C-0000005b] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000079", "metric,ring-r2d2") in new stack
messages-20150418:[Apr 17 08:55:48] VERBOSE[13580][C-00000061] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000082", "metric,ring-r2d2") in new stack
messages-20150418:[Apr 17 09:49:43] VERBOSE[13610][C-0000006a] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-0000008e", "metric,ring-r2d2") in new stack
messages-20150418:[Apr 17 17:07:35] VERBOSE[13730][C-00000070] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000096", "metric,ring-r2d2") in new stack
messages-20150418:[Apr 17 20:22:05] VERBOSE[13893][C-0000007f] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/66.193.176.35-000000ab", "metric,ring-oskar") in new stack
messages-20150419:[Apr 18 11:51:45] VERBOSE[14322][C-0000008d] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/callcentric-000000c0", "metric,ring-oskar") in new stack
messages-20150419:[Apr 18 11:52:46] VERBOSE[14322][C-0000008d] app_dial.c: == Everyone is busy/congested at this time (1:0/1/0)
messages-20150419:[Apr 18 15:53:54] VERBOSE[14430][C-00000092] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-000000c8", "metric,ring-r2d2") in new stack
messages-20150419:[Apr 18 16:16:24] VERBOSE[14483][C-00000096] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/66.193.176.35-000000cd", "metric,ring-oskar") in new stack
messages-20150419:[Apr 18 18:49:27] VERBOSE[14522][C-0000009d] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-000000d7", "metric,ring-r2d2") in new stack
messages-20150419:[Apr 18 19:11:12] VERBOSE[14538][C-0000009f] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-000000da", "metric,ring-r2d2") in new stack
messages-20150420:[Apr 19 07:20:11] VERBOSE[14900][C-000000a4] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/66.193.176.35-000000e2", "metric,ring-oskar") in new stack
messages-20150420:[Apr 19 09:39:17] VERBOSE[14927][C-000000a5] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/66.193.176.35-000000e4", "metric,ring-oskar") in new stack
messages-20150420:[Apr 19 10:38:35] VERBOSE[14987][C-000000a8] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/callcentric-r2d2-000000e8", "metric,ring-oskar") in new stack
messages-20150420:[Apr 19 10:39:35] VERBOSE[14987][C-000000a8] app_dial.c: == Everyone is busy/congested at this time (1:0/1/0)
messages-20150420:[Apr 19 11:11:51] VERBOSE[15025][C-000000b2] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-000000f7", "metric,ring-r2d2") in new stack
messages-20150420:[Apr 19 11:21:37] VERBOSE[15030][C-000000b4] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/callcentric-r2d2-000000fa", "metric,ring-oskar") in new stack
messages-20150420:[Apr 19 11:22:38] VERBOSE[15030][C-000000b4] app_dial.c: == Everyone is busy/congested at this time (1:0/1/0)
messages-20150420:[Apr 19 13:46:52] VERBOSE[15075][C-000000b7] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/callcentric-000000ff", "metric,ring-r2d2") in new stack
messages-20150420:[Apr 19 19:08:06] VERBOSE[15182][C-000000be] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000107", "metric,ring-r2d2") in new stack
messages-20150420:[Apr 19 19:09:01] VERBOSE[15185][C-000000bf] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000109", "metric,ring-r2d2") in new stack
messages-20150420:[Apr 19 19:09:01] VERBOSE[15185][C-000000bf] app_dial.c: == Everyone is busy/congested at this time (1:1/0/0)
messages-20150420:[Apr 19 19:09:10] VERBOSE[15188][C-000000c0] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-0000010b", "metric,ring-r2d2") in new stack
messages-20150420:[Apr 19 19:09:10] VERBOSE[15188][C-000000c0] app_dial.c: == Everyone is busy/congested at this time (1:1/0/0)
messages-20150420:[Apr 19 19:10:36] VERBOSE[15193][C-000000c2] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-0000010e", "metric,ring-r2d2") in new stack
messages-20150420:[Apr 19 22:26:19] VERBOSE[15264][C-000000c9] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000119", "metric,ring-r2d2") in new stack
messages-20150421:[Apr 20 08:07:00] VERBOSE[15580][C-000000cb] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-0000011c", "metric,ring-r2d2") in new stack
messages-20150421:[Apr 20 12:04:05] VERBOSE[15667][C-000000d7] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/callcentric-0000012e", "metric,ring-r2d2") in new stack
messages-20150422:[Apr 21 11:54:08] VERBOSE[16168][C-000000e4] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/66.193.176.35-00000142", "metric,ring-oskar") in new stack
messages-20150422:[Apr 21 11:55:08] VERBOSE[16168][C-000000e4] app_dial.c: == Everyone is busy/congested at this time (1:0/1/0)
messages-20150422:[Apr 22 00:02:27] VERBOSE[16393][C-000000fe] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000166", "metric,ring-r2d2") in new stack
messages-20150423:[Apr 22 10:14:03] VERBOSE[16713][C-00000103] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/66.193.176.35-0000016d", "metric,ring-oskar") in new stack
messages-20150423:[Apr 22 10:15:03] VERBOSE[16713][C-00000103] app_dial.c: == Everyone is busy/congested at this time (1:0/1/0)
messages-20150423:[Apr 22 16:36:02] VERBOSE[16830][C-0000010b] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000179", "metric,ring-r2d2") in new stack
messages-20150423:[Apr 22 18:55:28] VERBOSE[16863][C-0000010f] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-0000017f", "metric,ring-r2d2") in new stack
messages-20150424:[Apr 23 10:15:25] VERBOSE[17293][C-0000011f] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/callcentric-r2d2-00000195", "metric,ring-r2d2") in new stack
messages-20150424:[Apr 23 11:22:13] VERBOSE[17368][C-00000131] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/callcentric-000001ae", "metric,ring-r2d2") in new stack
messages-20150424:[Apr 23 12:35:38] VERBOSE[17410][C-00000133] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-000001b1", "metric,ring-r2d2") in new stack
messages-20150424:[Apr 23 16:39:09] VERBOSE[17462][C-00000135] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-000001b4", "metric,ring-r2d2") in new stack
messages-20150425:[Apr 24 15:31:11] VERBOSE[18023][C-0000014a] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-000001d7", "metric,ring-r2d2") in new stack
messages-20150425:[Apr 24 19:09:33] VERBOSE[18085][C-0000014f] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-000001de", "metric,ring-r2d2") in new stack
messages-20150426:[Apr 25 08:44:47] VERBOSE[18471][C-00000161] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-000001f8", "metric,ring-r2d2") in new stack
messages-20150426:[Apr 25 10:29:33] VERBOSE[18519][C-0000016d] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/callcentric-r2d2-0000020a", "metric,ring-r2d2") in new stack
messages-20150426:[Apr 25 12:30:34] VERBOSE[18566][C-00000170] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-0000020e", "metric,ring-r2d2") in new stack
messages-20150426:[Apr 25 13:39:05] VERBOSE[18583][C-00000172] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000211", "metric,ring-r2d2") in new stack
messages-20150427:[Apr 26 11:49:05] VERBOSE[19220][C-0000018d] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/66.193.176.35-0000023e", "metric,ring-oskar") in new stack
messages-20150427:[Apr 26 11:57:08] VERBOSE[19223][C-0000018e] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/callcentric-00000240", "metric,ring-r2d2") in new stack
messages-20150427:[Apr 26 14:40:40] VERBOSE[19301][C-00000198] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-0000024f", "metric,ring-r2d2") in new stack
messages-20150427:[Apr 26 18:37:13] VERBOSE[19377][C-000001a0] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/callcentric-r2d2-0000025e", "metric,ring-r2d2") in new stack
messages-20150427:[Apr 26 21:22:45] VERBOSE[19417][C-000001a2] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/callcentric-r2d2-00000261", "metric,ring-oskar") in new stack
messages-20150428:[Apr 27 22:05:27] VERBOSE[20001][C-000001b6] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-0000027f", "metric,ring-r2d2") in new stack
messages-20150428:[Apr 27 22:05:57] VERBOSE[20001][C-000001b6] app_dial.c: == Everyone is busy/congested at this time (1:1/0/0)
messages-20150429:[Apr 28 08:23:17] VERBOSE[20343][C-000001c0] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/callcentric-0000028d", "metric,ring-r2d2") in new stack
messages-20150429:[Apr 28 09:12:01] VERBOSE[20359][C-000001c2] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000290", "metric,ring-r2d2") in new stack
messages-20150429:[Apr 28 09:41:26] VERBOSE[20389][C-000001d0] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-0000029f", "metric,ring-r2d2") in new stack
messages-20150429:[Apr 28 14:43:55] VERBOSE[20475][C-000001d6] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-000002a7", "metric,ring-r2d2") in new stack
messages-20150430:[Apr 29 17:59:34] VERBOSE[21146][C-000001ff] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-000002e5", "metric,ring-r2d2") in new stack
messages-20150501:[Apr 30 07:21:52] VERBOSE[21584][C-00000211] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/66.193.176.35-00000302", "metric,ring-oskar") in new stack
messages-20150501:[Apr 30 07:50:26] VERBOSE[21587][C-00000212] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/66.193.176.35-00000304", "metric,ring-oskar") in new stack
messages-20150501:[Apr 30 11:04:32] VERBOSE[21650][C-00000217] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-0000030b", "metric,ring-r2d2") in new stack
messages-20150501:[Apr 30 13:11:28] VERBOSE[21697][C-0000021b] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/callcentric-00000311", "metric,ring-r2d2") in new stack
messages-20150502:[May 1 09:16:19] VERBOSE[22250][C-00000241] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-0000034b", "metric,ring-r2d2") in new stack
messages-20150502:[May 1 09:23:40] VERBOSE[22262][C-00000246] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/66.193.176.35-00000352", "metric,ring-oskar") in new stack
messages-20150502:[May 1 09:24:40] VERBOSE[22262][C-00000246] app_dial.c: == Everyone is busy/congested at this time (1:0/1/0)
messages-20150502:[May 1 11:54:23] VERBOSE[22294][C-0000024a] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000358", "metric,ring-r2d2") in new stack
messages-20150502:[May 1 14:12:29] VERBOSE[22405][C-00000252] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000363", "metric,ring-r2d2") in new stack
messages-20150502:[May 1 17:54:44] VERBOSE[22446][C-00000254] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/callcentric-r2d2-00000366", "metric,ring-r2d2") in new stack
messages-20150502:[May 2 03:05:19] VERBOSE[22632][C-0000025d] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/66.193.176.35-00000374", "metric,ring-oskar") in new stack
messages-20150502:[May 2 03:06:19] VERBOSE[22632][C-0000025d] app_dial.c: == Everyone is busy/congested at this time (1:0/1/0)
messages-20150503:[May 2 09:30:43] VERBOSE[22917][C-00000265] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000382", "metric,ring-r2d2") in new stack
messages-20150503:[May 2 13:09:31] VERBOSE[22987][C-00000269] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000388", "metric,ring-r2d2") in new stack
messages-20150503:[May 2 18:19:25] VERBOSE[23213][C-0000027b] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-0000039f", "metric,ring-r2d2") in new stack
messages-20150504:[May 3 12:54:58] VERBOSE[23911][C-00000295] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-000003c5", "metric,ring-r2d2") in new stack
messages-20150504:[May 3 21:43:20] VERBOSE[24064][C-0000029d] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/66.193.176.35-000003d2", "metric,ring-oskar") in new stack
messages-20150504:[May 3 21:44:20] VERBOSE[24064][C-0000029d] app_dial.c: == Everyone is busy/congested at this time (1:0/1/0)
messages-20150505:[May 4 12:09:26] VERBOSE[24576][C-000002a9] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-000003e4", "metric,ring-r2d2") in new stack
messages-20150505:[May 4 16:55:53] VERBOSE[24640][C-000002b1] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/callcentric-r2d2-000003f0", "metric,ring-r2d2") in new stack
messages-20150506:[May 5 12:14:00] VERBOSE[25218][C-000002e1] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000435", "metric,ring-r2d2") in new stack
messages-20150507:[May 6 08:34:16] VERBOSE[25705][C-000002f4] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000452", "metric,ring-r2d2") in new stack
messages-20150507:[May 6 23:19:46] VERBOSE[26062][C-00000309] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/callcentric-00000473", "metric,ring-oskar") in new stack
messages-20150508:[May 7 11:46:20] VERBOSE[26453][C-00000315] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000487", "metric,ring-r2d2") in new stack
messages-20150508:[May 7 14:01:45] VERBOSE[26541][C-0000031f] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/callcentric-00000498", "metric,ring-r2d2") in new stack
messages-20150508:[May 7 14:58:09] VERBOSE[26546][C-00000321] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-0000049b", "metric,ring-r2d2") in new stack
messages-20150508:[May 8 00:01:46] VERBOSE[1367][C-00000001] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000001", "metric,ring-r2d2") in new stack
messages-20150509:[May 8 23:34:13] VERBOSE[2087][C-00000024] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/66.193.176.35-00000033", "metric,ring-oskar") in new stack
messages-20150509:[May 8 23:34:36] VERBOSE[2090][C-00000025] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/66.193.176.35-00000035", "metric,ring-oskar") in new stack
messages-20150510:[May 9 12:49:04] VERBOSE[2489][C-0000002b] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-0000003f", "metric,ring-r2d2") in new stack
messages-20150510:[May 9 15:41:40] VERBOSE[2547][C-00000030] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000046", "metric,ring-r2d2") in new stack
messages-20150510:[May 9 19:30:33] VERBOSE[2824][C-0000003b] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000055", "metric,ring-r2d2") in new stack
messages-20150510:[May 9 19:56:27] VERBOSE[2829][C-0000003d] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000058", "metric,ring-r2d2") in new stack
messages-20150510:[May 9 23:28:10] VERBOSE[2879][C-0000003f] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/66.193.176.35-0000005a", "metric,ring-oskar") in new stack
messages-20150510:[May 9 23:29:10] VERBOSE[2879][C-0000003f] app_dial.c: == Everyone is busy/congested at this time (1:0/1/0)
messages-20150513:[May 12 14:58:23] VERBOSE[4400][C-00000062] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/66.193.176.35-0000008f", "metric,ring-oskar") in new stack
messages-20150513:[May 12 14:59:23] VERBOSE[4400][C-00000062] app_dial.c: == Everyone is busy/congested at this time (1:0/1/0)
messages-20150514:[May 13 20:12:08] VERBOSE[5042][C-0000007b] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/callcentric-000000b6", "metric,ring-r2d2") in new stack
messages-20150515:[May 14 05:57:44] VERBOSE[5418][C-00000091] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/callcentric-000000db", "metric,ring-oskar") in new stack
messages-20150515:[May 14 11:42:45] VERBOSE[5515][C-00000099] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-000000e8", "metric,ring-r2d2") in new stack
messages-20150515:[May 14 17:07:11] VERBOSE[5628][C-000000a7] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-000000fa", "metric,ring-r2d2") in new stack
messages-20150515:[May 14 20:11:04] VERBOSE[5668][C-000000a9] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/66.193.176.35-000000fd", "metric,ring-oskar") in new stack
messages-20150515:[May 14 20:12:04] VERBOSE[5668][C-000000a9] app_dial.c: == Everyone is busy/congested at this time (1:0/1/0)
messages-20150516:[May 15 07:54:27] VERBOSE[6020][C-000000ac] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000103", "metric,ring-r2d2") in new stack
messages-20150516:[May 15 13:01:41] VERBOSE[6197][C-000000be] pbx.c: -- Executing [s@ring-r2d2:1] Macro("SIP/66.193.176.35-00000118", "metric,ring-r2d2") in new stack
messages-20150516:[May 15 17:59:59] VERBOSE[6347][C-000000d6] pbx.c: -- Executing [s@ring-oskar:1] Macro("SIP/66.193.176.35-00000144", "metric,ring-oskar") in new stack
[futel@futel-prod old]$

add mojave phone booth nostalgia conference line destination

from the voip list

Lucky 225 via VoIP
Nov 8 (3 days ago)

to chuckrr
Looks like you might be delayed or maybe I am. The number is mine. :)

You can also reach it on CNET +17339969

The MF tones are Operator Attached + Coin Refund, during early media without answer supervision, followed by Callwaiting Caller ID of Mojave Payphone / 7607339969 though no date/time is supplied, which my NEW panasonic cordless phones don't seem to like :( My old ones handled this fine.

The number was originally the Mojave Phone Booth, a phone booth in the middle of the desert that had been there since the 60s due to California regulations that Bell serve rural communities. Pac Bell took the phone out in May of 2000 and vowed never to re-assign the number. Then they sold the number (well, the whole 733-9xxx block actually since they stopped offering payphone service and that whole block was to that day reserved for payphones) to Peerless in 2013, a CLEC I have contacts with, and I purchased the number and ported it in to my VoIP provider.

Here's a short article about it: http://www.dailydot.com/technology/mojave-phone-booth-back-number/

It's gotten a little more popular since some conspiracy radio show host talked about it a few weeks back so I added 'rooms' to it to cut down on the traffic. :)

oracle has a loop

If user gets to number entry in oracle-dead and does not respond, IVR will loop forever. This is annoying because we sometimes fail to notice hangup, so we have a call spamming the logs, and possibly sending data to the ATA. Solution is to put that in its own context with an iterate guard.

metric dial outcomes

We don't metric why an outgoing or incoming call ends. For example, we can't tell the difference between an outgoing call that ends when either party hangs up and one which fails because we can't auth to the sip provider. And we can't tell between an incoming call that rings an extension, gets picked up, or gets a subscriber absent.

get voip.ms service

cheaper than callcentric, and should have a second provider in any case for future fallback. Callcentric is currently our biggest expense.

fix menu voice fallthrough

A menu entry should be able to look in several ordered directories until it finds the appropriately named sound file, falling back to the synthesized voice.

IIRC the AGI scripts do this but the extensions do not.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.