├── 127.0.0.1 ├── README.md ├── accounts.md ├── architecture.md ├── asr.md ├── background.md ├── call_recording.md ├── carriers.md ├── cccp.md ├── cdr.md ├── cluster_management.md ├── conferences.md ├── couchdb.md ├── debian_packages.md ├── demographics.md ├── developing.md ├── dids.md ├── dns.md ├── erlang.md ├── fax.md ├── federation.md ├── firewall.sh ├── glossary.md ├── haproxy.md ├── highperformance.md ├── install.md ├── journey.md ├── kamailio.md ├── languages.md ├── linux_versions.md ├── maintenance ├── couchdb.md ├── daily_kazoo_backup.sh ├── freeswitch.md ├── freeswitch_compile.md ├── kamailio.md ├── rabbitmq.md └── whapps.md ├── monster-ui.md ├── names.md ├── phone_numbers.md ├── phones ├── cisco.md ├── grandstream.md ├── polycom.md ├── readme.md ├── snom.md └── yealink.md ├── ports.md ├── provisioning.md ├── rabbit.md ├── security.md ├── selling_services ├── README.md ├── braintree.md ├── cgrates.md ├── limits.md ├── rating.md └── resellers.md ├── servers.md ├── service_plans.md ├── sup.md ├── sup_commands ├── sysadmin_tools.md ├── timezones.md ├── troubleshooting ├── README.md ├── accounts_missing_docs.md ├── cookies.md ├── couchdb_cleanup.md ├── freeswitch.md ├── install.md ├── languages.md ├── passwords.md ├── permissions.md └── sipcapture.md ├── tts.md ├── ui.md ├── updating.md ├── versions.md ├── versions_compare.md └── zones.md /127.0.0.1: -------------------------------------------------------------------------------- 1 | # The best Warez/ISO/MOVIE site is @127.0.0.1 2 | 3 | * Ok seriously the goods are at 4 | http://github.com/stormqloud/kazoo-tgbbok/blob/master/install 5 | 6 | 7 | stormwloqd|wlloyd@prodosec.com 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ``` 2 | `::::::::::::::::::::::::::. `::::::::::::::::::::::::::. 3 | .//////////////////////////- .//////////////////////////- 4 | .//////////////////////////- .//////////////////////////- 5 | .//////////////////////////- .//////////////////////////- 6 | .//////////////////////////- .//////////////////////////- 7 | .//////////////////////////- .//////////////////////////- 8 | .//////////////////////////- .//////////////////////////- 9 | ``````````````````````````://///////////`````````````````````````` 10 | :///////////// 11 | :///////////// 12 | :///////////// 13 | :///////////// 14 | :///////////// 15 | `..........................://///////////..........................` 16 | .//////////////////////////////////////////////////////////////////- 17 | .//////////////////////////////////////////////////////////////////- 18 | .//////////////////////////////////////////////////////////////////- 19 | .//////////////////////////////////////////////////////////////////- 20 | .//////////////////////////////////////////////////////////////////- 21 | .//////////////////////////////////////////////////////////////////- 22 | `..................................................................` 23 | ``` 24 | kazoo-tgbbok 25 | ============ 26 | 27 | The Great Big Book Of Kazoo (2600hz Open Source platform) 28 | 29 | These ramblings are here so I can add to them easily (no approvals), and a tiny little bit of Google juice. 30 | 31 | When I put it here, I'm fairly sure where to find it again. 32 | 33 | Kazoo is so large that it's easy to forget what you already learned about Kazoo. 34 | 35 | Remember, "You don't know, what you don't know". (TM some person before lawyers and Coryright existed) 36 | 37 | * If you are just starting Kazoo or wanting to install for the first time... 38 | * https://github.com/stormqloud/kazoo-tgbbok/blob/master/127.0.0.1 39 | 40 | If you are a new user, play with the single sever ISO. Install it multiple times. 41 | 42 | If you are lost, you should call/email the 2600hz folks. They wrote the software and know it really well!! 2600hz offers a managed hosted platform. 43 | 44 | For programmers/admin/techs and others that are trying to justify their jobs by doing themselves what 2600hz can already do better, you might find some useful things here. 45 | 46 | This is mostly for the system admin that gets lost looking for the Kazoo yellow brick road. 47 | 48 | I offer you some yellow bricks. 49 | 50 | Think of it as tips and tricks once the platform is installed and you have made a first few calls. 51 | 52 | 99.99% of the things you find here are the creation of 2600hz or other people. I'm not the genius behind the code. 53 | 54 | This github is a set of ideas, links etc. 55 | 56 | You should already be familiar with the following resources at this point. 57 | 58 | #### Websites: 59 | * https://2600hz.com/ 60 | * http://www.kazoocon.com/ 61 | * https://github.com/2600hz/kazoo 62 | * https://github.com/2600hz/kazoo/tree/master/applications/crossbar/doc 63 | 64 | ##### Atlassian is a nightmare IMHO. However there is a lot of info there and in Jira. 65 | * https://2600hz.atlassian.net/wiki/display/docs/Overview 66 | * Make sure to get yourself a jira login. 67 | * Links to Jira from Google will not work without a login. 68 | 69 | ### Mailing list 70 | * `https://groups.google.com/forum/#!forum/2600hz-users` 71 | * How do I setup? How do I turn on reseller? 72 | * `https://groups.google.com/forum/#!forum/2600hz-dev` 73 | * Dev mailing list is not for setup questions.. 74 | 75 | ## Background 76 | 77 | Asterisk is single server compared to the Kazoo cloud (http://www.beadaptive.ca/cloud-drinking-game/) platform. 78 | 79 | The VOIP landscape has changed since Asterisk was the only Open Source VOIP project. 80 | 81 | Asterisk strong point, an embedded core platorm with various gui stapled to the side, that can be burned into disposable appliances. It's your $99 onsite PBX box. It's the Swiss Army Knife for SIP (IAX die die die) and VOIP. 82 | 83 | Asterisk is a revolutionary product. 84 | 85 | Everybody runs Asterisk already in some form, for some purpose. Stop thinking of Asterisk and Kazoo competing. They are complementary products in many ways. 86 | 87 | When you embrace Kazoo you will not be giving up Asterisk anytime soon, if ever. Everything has it's place! 88 | 89 | REPEAT: I still often (moves/adds/changes) extensions.conf 90 | 91 | ## Kazoo Again 92 | 93 | Kazoo has emerged as the successive technology for ISP, Carriers, Service providers of all kinds. 94 | 95 | Multi-Tennant PBX (Remember these?) 96 | 97 | There is a cost however. The Kazoo learning curve cannot be understated! 98 | 99 | Please never say that Kazoo does not have some feature because you can't find it documented online here. The things here are mostly personally tested under various configurations by You Know Who. 100 | 101 | The best documentation is the source code. 102 | 103 | wlloyd@stormqloud.ca (sometime known as _wlloyd_@_prodosec_._com_) 104 | 105 | tx 106 | 107 | -------------------------------------------------------------------------------- /accounts.md: -------------------------------------------------------------------------------- 1 | # Account Structure 2 | 3 | ## These suggestions fall under the category of good Kazoo policy. 4 | 5 | When you start screwing around with Kazoo it's important to understand you need to flush out the system to a *MINIMUM* of 3 levels. 6 | 7 | Your first inclination is going to want to create some phones right after you log in. Resist the temptation and create and account. Use that account if you want a shortcut. Never use the master/root/superuser for anything but creating and managing accounts. It is not a PBX in itself (unless you force it..). 8 | 9 | * Master Account For the entire Kazoo system (install account) [ 1st level account ] 10 | * Reseller account (your clients?) [ 2nd level account ] 11 | * PBX (Your clients clients) [ 3rd level account ] 12 | 13 | To keep your Kazoo cluster running as cleanly as possible from an administrative perspective you need to keep your top level account to mostly (only) creating sub-accounts. 14 | 15 | Many functions such as whitelabel require you to have sub-accounts to see the correct behavior. 16 | 17 | As long as you keep your top level account clean you will be able to log in and perform other maintenance functions. 18 | 19 | The structure of Kazoo is the inherit from your parent account. Anything you want ourside of default behaviour should be done in a second level account or below. 20 | 21 | wlloyd@stormqloud.ca 22 | VOIP/SIP 23 | 24 | 25 | -------------------------------------------------------------------------------- /architecture.md: -------------------------------------------------------------------------------- 1 | #Network Architecture 2 | 3 | Many people appear to be looking for implementation details about a Kazoo cluster for a service provider. 4 | 5 | Some background emails. Bibliography.. 6 | 7 | * https://groups.google.com/forum/#!topic/2600hz-users/pfWqzD-LzOk 8 | * https://groups.google.com/forum/#!topic/2600hz-users/YDqobGAMJ-c 9 | -------------------------------------------------------------------------------- /asr.md: -------------------------------------------------------------------------------- 1 | # ASR - Automatic Speech Recognition 2 | 3 | New updates Spring 2016 4 | 5 | ## The other direction is TTS 6 | * https://github.com/stormqloud/kazoo-tgbbok/blob/master/tts.md 7 | 8 | * Option 1: OpenSource 9 | * If you are an academic or other dreamer, this might be for you. 10 | * Anyone that can demonstrate a working system please contact me. 11 | * I've plaowed many hours into this without anything working. 12 | * Works in theory. 13 | 14 | * Option 2: ispeech.org 15 | * Kazoo to ispeech.org for ASR has been fixed (yay Voxter) 16 | * Voxter announced at Kazoocon 2015 17 | * I've not tested it on Kazoo, however 18 | * voice recognition is hard 19 | * That's nothing to do with 2600hz or Kazoo. 20 | * Just because the voice recording hits the ispeech API doesn't mean they can recognize it! 21 | 22 | * Option 3: google speech rec API 23 | * No known integration but google is doing free ASR for the moment. Pricing to be announced after people get hooked on it. Otherwise it will get cancelled and everybody will be screwed. 24 | 25 | * Option 4: 26 | * There is no option 4 27 | 28 | ASR costs per word recognized. 29 | 30 | http://www.stormqloud.ca 31 | -------------------------------------------------------------------------------- /background.md: -------------------------------------------------------------------------------- 1 | #Background 2 | 3 | This is a really really *really* shortlist of some fo the "voip" pbx systems out there. 4 | 5 | It's not 1984 anymore. The world is bigger then Norstar Centrex and other crap. (All of these technologies predate 1984 but are relevant for artistic license and legal purposes). 6 | 7 | If you are reading this, it's very likely you will be sued by a patent troll for using a dialtone. In 2015 a dialtone is a "novel invention" to this crowd. 8 | 9 | The real invention is seperating you from your money. 10 | 11 | ### Have you already worked your way through the list? 12 | * 1cx, 2cx, 3cx? 13 | * Asterisk? 14 | * FreePBX? 15 | * Elastix? 16 | * Freeswitch? 17 | * Norstar BCM? 18 | * Avaya POS? (that not Point of Retail) 19 | * Norstar 20 | * Shoretel 21 | 22 | If you manage a small company, or even a large company this is all good. 23 | 24 | Eventually you will start a second pbx for something. 25 | 26 | Then you will have a third PBX. 27 | 28 | Now you stop. It's all good. 29 | 30 | You have nothing to worry about. 31 | 32 | -------------------------------------------------------------------------------- /call_recording.md: -------------------------------------------------------------------------------- 1 | # Call Recording 2 | 3 | * You need to understand that call recording at the most basic level is implemented as a callflow. 4 | * This means you must somehow "signal" that you want the call to goto 5 | * 6 | -------------------------------------------------------------------------------- /carriers.md: -------------------------------------------------------------------------------- 1 | # Carriers & Long distance 2 | 3 | These are some random notes for now on setting up a carrier. 4 | 5 | You should be aware that the base Kazoo install comes is not able to dial "international". IE anything outside of +1. 6 | 7 | Kazoo supports local carriers and global carriers. Inherited reseller carriers even. 8 | 9 | Carriers are often listed under "resources" in the Futon CouchDB filter views. 10 | 11 | The following offnet db document works to send calls to StormQloud or Prodosec 12 | 13 | Make sure to reload the docs before oyu do anything. 14 | 15 | If you want backup and promary VOIP carriers etc you handle that with weight_cost. The lower weight_cost will be picked first. 16 | 17 | ## sup stepswitch_maintenance reload_resources 18 | 19 | format_from_uri controls what you send as your outbound header when the call heads to the carrier. 20 | 21 | ### offnet document 22 | ``` 23 | { 24 | "_id": "7214b87afc96d2450b0bd0f6068891eb", 25 | "_rev": "4-22e26d9d41e33aebd4b7c387dcd5f60b", 26 | "weight_cost": "50", 27 | "enabled": true, 28 | "gateways": [ 29 | { 30 | "prefix": "1", 31 | "codecs": [ 32 | "PCMU" 33 | ], 34 | "progress_timeout": "20", 35 | "server": "68.71.63.38", 36 | "username": "", 37 | "password": "", 38 | "realm": "68.71.63.38", 39 | "format_from_uri": false, 40 | "suffix": "", 41 | "enabled": true, 42 | "custom_sip_headers": { 43 | }, 44 | "invite_format": "route", 45 | "endpoint_type": "sip", 46 | "channel_selection": "ascending", 47 | "skype_rr": true, 48 | "emergency": false 49 | } 50 | ], 51 | "rules": [ 52 | "^\\+{0,1}1{0,1}(\\d{10})$" 53 | ], 54 | "caller_id_options": { 55 | "type": "external" 56 | }, 57 | "type": "local", 58 | "name": "PP OFFNET", 59 | "peer": false, 60 | "ui_metadata": { 61 | "ui": "kazoo-ui", 62 | "version": "v3.18-2" 63 | }, 64 | "emergency": false, 65 | "grace_period": 5, 66 | "flags": [ 67 | ], 68 | "media": { 69 | "audio": { 70 | "codecs": [ 71 | "PCMU" 72 | ] 73 | }, 74 | "video": { 75 | "codecs": [ 76 | ] 77 | } 78 | }, 79 | "id": "7214b87afc9655450b0bd0f6068891eb", 80 | "pvt_type": "resource", 81 | "pvt_vsn": "1", 82 | "pvt_account_db": "offnet", 83 | "pvt_created": 63582342728, 84 | "pvt_modified": 63582342964, 85 | "pvt_request_id": "1f979c5334211f566f70c8a179043ea5" 86 | } 87 | 88 | ``` 89 | * Use your reseller carrier settings! 90 | * Send a call to another account carriers (IE reseller) 91 | * This is important if you want to get a subaccount to use the master account carriers 92 | * This assumes you want to use reseller carriers and not global carriers. 93 | * also confusingly called global resources and local resources. 94 | 95 | ``` 96 | "flow": { 97 | "data": { 98 | "hunt_account_id": "5555555555" 99 | }, 100 | "module": "resources", 101 | "children": { 102 | } 103 | }, 104 | ``` 105 | 106 | http://stormqloud.ca 107 | -------------------------------------------------------------------------------- /cccp.md: -------------------------------------------------------------------------------- 1 | # CCCP - Calling Card Callback Platform 2 | * written by https://github.com/onnet 3 | 4 | * Adventures with Calling Card Callback Platform 5 | * High level overview. 6 | * This module operates in a very useful but uncommon way in Kazoo. 7 | * This has cluster level elements and account level elements 8 | * You take 2 DID's and make them *CLUSTER WIDE* for CCCP. 9 | * One DID is for Callback 10 | * One DID is for Dialthrough/DISA 11 | * There are 2 types of client records 12 | * caller_id records 13 | * pin_records 14 | * You can see both types through views in cccps database 15 | * If you call the callback number, your caller ID must exist in the database as a caller_id record 16 | * It will call you back and give you a dialtone 17 | * If you call the dialthrough number 18 | * If it knows your caller_id, it will give you a dialtone 19 | * Otherwise it will ask you for a code (PIN) 20 | * Make sure you use 10 digit PINS. Serious! Sorter is ignored. 21 | * If you enter a valid PIN it will give you a dialtone. 22 | 23 | * This module can do callback and dialthrough despite the name. 24 | * DISA and dialthrough are the same thing. 25 | * DISA is also available as a callflow action. 26 | * DISA callflow and CCCP are 100% independant of each other. 27 | * DISA callflow is not as secure or full featured. 28 | 29 | 30 | ## Kazoo Cluster CCCP Setup 31 | 32 | * CouchDB and cccp 33 | * cccp seems to store things in a couple of spots in couchdb where you want to go looking 34 | * Inside a new CouchDB database called cccps 35 | * Docs are also created inside the account of the user using cccp. 36 | 37 | * You NEED to go looking inside system_config/cccp (which you need to create) 38 | * Modify below to your information... 39 | 40 | * The system_config/cccp doc contains the "link into the DID" to watch for. 41 | * In cccp a DID is not owned by anyones callflow. 42 | 43 | * cccp_cb_number <- this is the DID to use for CALLBACK for all Kazoo accounts and users! 44 | * You need to assign (number manager or otherwise) this DID to the master account 45 | * OR 46 | * You can assign this DID to a cccp specific account 47 | * dialthrough has 1 leg of CDR that needs to be tracked. 48 | * cccp_cc_number <- this is the DID to use for DIALTHROUGH/DISA for all Kazoo accounts and users! 49 | * You CANNOT use the same number for both services. 50 | 51 | * ensure_valid_caller_id <- Will try to check that the caller ID wanted for outbound is "allowed" 52 | * default_caller_id_number <- whenever outbound caller_id selection has an issue, it will grab this 53 | * This is a Kazoo cluster wide value not account level information 54 | 55 | ``` 56 | { 57 | "_id": "cccp", 58 | "default": { 59 | "cccp_cb_number": "5142223333", 60 | "cccp_cc_number": "5141115555", 61 | "last_number_redial_code": "*0", 62 | "ensure_valid_caller_id": true, 63 | "default_caller_id_number": "+15140000000", 64 | "allowed_callee_regex": "^\\+?\\d{11,}$", 65 | "callback_delay": 3 66 | }, 67 | "pvt_account_id": "system_config", 68 | "pvt_account_db": "system_config", 69 | "pvt_created": 63562529472, 70 | "pvt_modified": 63644318172, 71 | "pvt_type": "config", 72 | "pvt_node": "whistle_apps@kz.domain.tld" 73 | } 74 | 75 | ``` 76 | 77 | * this will enable the modules you need. 78 | * Make a config first. 79 | ``` 80 | sup whapps_controller start_app cccp 81 | sup crossbar_maintenance start_module cb_cccps 82 | 83 | check.. 84 | sup whapps_controller running_apps 85 | 86 | ``` 87 | 88 | ## Account/User Level CCCP Setup 89 | 90 | * Consult the original source for more information https://github.com/onnet/cccp/blob/master/doc/usage.md 91 | 92 | * Lets say that Bob with a cellphone of 15149072508 wants to use the dialthrough with the caller_id +15149072511. 93 | * You need to get the auth_token to be able to have access to do the transacion. 94 | * You are "mapping" the external caller_id or PIN to a PBX account and user. 95 | * Must use a 10 digit or more pin. 96 | 97 | ``` 98 | curl -X PUT -H X-Auth-Token:{AUTH_TOKEN} https://{SERVER}:8443/v1/accounts/{ACCOUNT_ID}/cccps \ 99 | -H "Content-Type:application/json" \ 100 | -d '{"data":{"pin":"150674729083", \ 101 | "outbound_cid":"+78122404700", \ 102 | "user_id":"e6da57c768533ebf0d349845394ccf26", \ 103 | "active":true}}' 104 | 105 | curl -X PUT -H X-Auth-Token:{AUTH_TOKEN} http://{SERVER}:8000/v1/accounts/{ACCOUNT_ID}/cccps \ 106 | -H "Content-Type:application/json" \ 107 | -d '{"data":{"pin":"150674729083", \ 108 | "outbound_cid":"+78122404700", \ 109 | "user_id":"e6da57c768533ebf0d349845394ccf26", \ 110 | "active":true}}' 111 | 112 | ``` 113 | 114 | 115 | # Callflows DISA module.. 116 | * You make this doc in system_config 117 | * Overwriting caller id did not work for me.. 118 | 119 | ``` 120 | { 121 | "_id": "callflow.disa", 122 | "default": { 123 | "default_use_account_caller_id": true, 124 | "default_pin_length": 10 125 | }, 126 | "pvt_account_id": "system_config", 127 | "pvt_account_db": "system_config", 128 | "pvt_created": 63598679846, 129 | "pvt_modified": 63598679846, 130 | "pvt_type": "config", 131 | "pvt_node": "whistle_apps@test.stormqloud.com" 132 | } 133 | ``` 134 | 135 | wlloyd@stormqloud.ca 136 | -------------------------------------------------------------------------------- /cdr.md: -------------------------------------------------------------------------------- 1 | # CDR 2 | 3 | * CDR will go into BigCouch by default. 4 | * New parallel CDR 5 | * https://github.com/stormqloud/community-scripts/tree/pgcdr/PostgreSQL-CDR 6 | * Kazoo CDR Bigcouch unaffected 7 | * Parallel insert into Postres 8 | * CDR export as a CSV 9 | * https://github.com/2600hz/kazoo/blob/master/applications/crossbar/doc/cdrs.md 10 | ``` 11 | curl -i -H "Accept: text/csv" -H "Content-Type: application/json" -H "X-Auth-Token: 4b2ff6d61a6654b26dad205870eb9fe2" -X GET http://api.stormqloud.ca:8000/v1/accounts/22a3a099fd4653a24bc333df5974b905/cdrs 12 | ``` 13 | 14 | * CDR to SQL or Radius direct from AMQP packets.. 15 | * https://github.com/2600hz/community-scripts/blob/master/RadiusCDR/cdr_radius.rb 16 | 17 | http://stormqloud.ca 18 | -------------------------------------------------------------------------------- /cluster_management.md: -------------------------------------------------------------------------------- 1 | # Cluster management 2 | 3 | * Adding and removing elements from the cluster. 4 | * Adding any single cluster element can usually be done fairly easily by following along with you original install instructions. 5 | * Removing a cluster member can be done just be turing it off and not using it again (in most cases..) 6 | 7 | I need to elaborate on this.. 8 | 9 | 10 | -------------------------------------------------------------------------------- /conferences.md: -------------------------------------------------------------------------------- 1 | # Conference 2 | 3 | * Kazoo has the option of using a different conference server as an URL. 4 | * You can always setup a simple callflow to another server also 5 | * If you are doing 50 people in a conference bridge you should setup a 6 | * dedicated Asterisk 7 | * Everybody runs Asterisk somewhere for something. 8 | * You don't have to be ashamed. You are among friends. 9 | 10 | # Confernece options inside Kazoo for the moderator 11 | 12 | * Option volume talk down press 1 13 | * Option volume talk zero press 2 14 | * Option volume talk up press 3 15 | * Option volume listen down press 4 16 | * Option volume listen zero press 5 17 | * Option volume listen up press 6 18 | * Option energy down press 7 19 | * Option energy equ press 8 20 | * Option energy up press 9 21 | * Option mute press 0 22 | * Option deaf mute press * 23 | * Option hangup press # 24 | 25 | wlloyd@prodosec.com 26 | -------------------------------------------------------------------------------- /couchdb.md: -------------------------------------------------------------------------------- 1 | # CouchDB things... 2 | 3 | * Kazoo runs Bigcouch which is a fork of CouchDB. (Ie CouchDB plus some extra stuff) 4 | * BigCouch is a dead project! 5 | * Bigcouch itself is very stable. This is one part of Kazoo system stack that ALMOST NEVER gets updated (there are no updates). 6 | * The JSON files inside BigCouch get updated, the software itself, not so much 7 | 8 | * 2600hz has said they intend to move back to CouchDB possibly for Kazoo 4.x 9 | * most if not all BigCouch improvements have found their way back into mainstream CouchDB. 10 | * See CouchDB 2.0 https://couchdb.apache.org/developer-preview/2.0/ 11 | * Futon has been replaced with Fauxton 12 | * BigCouch and CouchDB as terms are used fairly interchangably.. 13 | * BigCouch is time tested at this point. 14 | * IBM has announced a Cloudant beta of CouchDB 2.0 with all BigCouch features 15 | * https://developer.ibm.com/clouddataservices/2016/03/18/cloudant-couchdb2dot0-sandbox/ 16 | * The work continues! 17 | * There is no upgrade path current from Bigcouch to CouchDB 18 | * CouchDB 2.0 is only for developers not production! 19 | 20 | * CouchDB stuff you should know, or be prepared to learn the hard way 21 | * CouchDB databases don't shrink in space. 22 | * Append only (only grows in size..) 23 | * IE delete is really a soft delete, does not free disk space 24 | * CouchDB tools work on databases. Kazoo will have hundreds.. 25 | 26 | * Things you cannot change easily after installation.. 27 | * Inside ```/etc/kazoo/bigcouch/local.ini``` you will find a section looking something like this. 28 | ``` 29 | # Kazoo Single server ISO 30 | [cluster] 31 | q=1 32 | r=1 33 | w=1 34 | n=1 35 | #z=1 implicit default 36 | 37 | # Kazoo single cluster(data center) install 38 | # IE 3 Bigcouch server machines this is what you use 39 | [cluster] 40 | q=3 41 | r=2 42 | w=2 43 | n=3 44 | #z=1 implicit default 45 | 46 | 47 | 48 | ``` 49 | 50 | * The paramters of [cluster] section are *very* hard to change without losing *many* nights sleep. 51 | * All BigCouchDB instances that are clustered need to have the *SAME* parameter values at the *SAME* time. 52 | 53 | * Look at this for a definition of the paramters 54 | * http://www.erlang-factory.com/upload/presentations/369/Kocoloski-BigCouch-ErlangFactory.pdf 55 | 56 | * Changing q values? 57 | * Clonetools to new cluster (yes you read that right) 58 | * You need to make a new database and migrate your data over 59 | * Changing the q value is *NOT* possible. 60 | * q represets the static hash onto 1-X directories. 61 | * Repeat, you cannot change. Make a new DB cluster an duse clonetools to move over 62 | * See example below. 63 | * q=1 vs q=3, maps the dataset onto different number of underlying directories. 64 | 65 | ``` 66 | [admin@bigcouch1 bigcouch]$ ll /srv/db/shards 67 | total 4 68 | drwxr-xr-x 2 bigcouch daemon 4096 Jul 4 01:53 00000000-ffffffff 69 | 70 | [root@k3 ~]# ll /srv/db/shards/ 71 | total 12 72 | drwxr-xr-x 5 bigcouch daemon 4096 Jun 29 02:36 00000000-55555554 73 | drwxr-xr-x 5 bigcouch daemon 4096 Jun 29 02:36 55555555-aaaaaaa9 74 | drwxr-xr-x 5 bigcouch daemon 4096 Jun 29 02:37 aaaaaaaa-ffffffff 75 | 76 | ``` 77 | 78 | * Zones 79 | * You already are z=1 if z is undefined 80 | * Appears you can split z=1 into z=2 etc 81 | * https://groups.google.com/forum/#!topic/bigcouch-user/RtZF2YvXZAQ 82 | * http://bigcouch.cloudant.com/api 83 | * https://cloudant.com/blog/choosing-zone-configurations-for-bigcouch 84 | * note: this article is with q=1! 85 | 86 | * CloneTools.. 87 | * https://github.com/2600hz/community-scripts/tree/master/CloneTools 88 | * If you need to change the parameters of [cluster] 89 | 90 | 91 | * CouchDB replication 92 | * This is unlikely to be that useful for Kazoo 93 | * Replication is generally on a database by database basis. 94 | * Your Kazoo CouchDB will have HUNDREDS of databsaes 95 | * Not that useful for Kazoo cluster 96 | 97 | * Special URLs for bigcouch (appear to be called global handlers).. 98 | * You might want direct these to port 15984 instead.. 99 | 100 | ``` 101 | * http://kazoocloud.stormqloud.ca:5984/_membership 102 | * http://kazoocloud.stormqloud.ca:5984/_config 103 | * http://kazoocloud.stormqloud.ca:5984/_active_tasks 104 | * http://kazoocloud.stormqloud.ca:5984/_all_dbs 105 | * http://kazoocloud.stormqloud.ca:5984/_log 106 | * http://kazoocloud.stormqloud.ca:5984/_oath 107 | * http://kazoocloud.stormqloud.ca:5984/_replicate 108 | * http://kazoocloud.stormqloud.ca:5984/_restart 109 | * http://kazoocloud.stormqloud.ca:5984/_session 110 | * http://kazoocloud.stormqloud.ca:5984/_stats 111 | * http://kazoocloud.stormqloud.ca:5984/_system 112 | * http://kazoocloud.stormqloud.ca:5984/_utils 113 | * http://kazoocloud.stormqloud.ca:5984/_uuids 114 | ``` 115 | 116 | * Fauxton can be install and appears to work as a replacement to Futon 117 | * yum install npm 118 | * npm install fauxton 119 | * fauxton/bin/fauxton -c http://localhost:5984 -p 7999 120 | * 121 | 122 | * Things to look into one day.. 123 | 124 | * https://github.com/danielebailo/couchdb-dump/blob/master/bin/couchdb-dump.sh 125 | * http://www.greenacorn-websolutions.com/couchdb/export-import-a-database-with-couchdb.php 126 | * http://guide.couchdb.org/draft/replication.html 127 | 128 | stormloud.ca 129 | -------------------------------------------------------------------------------- /debian_packages.md: -------------------------------------------------------------------------------- 1 | # Debian packages 2 | 3 | * copy packages from one server to another.. 4 | * sudo apt-get install apt-clone 5 | * apt-clone clone foo 6 | * Copy foo.apt-clone.tar.gz to the new machine and run 7 | * sudo apt-get install apt-clone 8 | * sudo apt-clone restore foo.apt-clone.tar.gz 9 | * 10 | -------------------------------------------------------------------------------- /demographics.md: -------------------------------------------------------------------------------- 1 | # Demographics for Kazoo 2 | 3 | * Kazoo is not Asterisk 4 | * Kazoo and Asterisk are Apples and Oranges 5 | 6 | ### You should consider running Kazoo 7 | * You manage 50+ FreePBX servers 8 | * You manage 50+ Elastix servers 9 | * You manage 5 3CX servers 10 | * You manage 2 Mitel servers.. 11 | * You know what a multi-tennant PBX is 12 | * You are a *large* call center. 13 | * Large is more then a few hundred seats 14 | * You have or will have FULL TIME KAZOO staff 15 | 16 | 17 | ### You should not be running Kazoo 18 | * you are new to voip 19 | * what's an ITSP? 20 | * Your biz is not VOIP 21 | * You will not have full time Kazoo staff 22 | 23 | 24 | #### Summary 25 | 26 | * If you are planning on using Kazoo, it's the best platform for what it's designed for. 27 | * A successfull Kazoo production enviroment involves somewhere around a dozen servers in a couple of data centers. 28 | * Managing and running and beign knowledgable about Kazoo system is a _FULL TIME JOB_. 29 | -------------------------------------------------------------------------------- /developing.md: -------------------------------------------------------------------------------- 1 | # Kazoo Development 2 | 3 | * I'm a newb to git, this is where I write down the commands that are commonly used. 4 | * You should have already created a github account 5 | 6 | ``` 7 | [root@k9 kazoo-master]# pwd 8 | /opt/kazoo-master 9 | 10 | cat .git/config 11 | [core] 12 | repositoryformatversion = 0 13 | filemode = true 14 | bare = false 15 | logallrefupdates = true 16 | [remote "origin"] 17 | fetch = +refs/heads/*:refs/remotes/origin/* 18 | url = ssh://git@github.com/stormqloud/kazoo 19 | [branch "master"] 20 | remote = origin 21 | merge = refs/heads/master 22 | [remote "upstream"] 23 | url = https://github.com/2600hz/kazoo 24 | fetch = +refs/heads/*:refs/remotes/upstream/* 25 | 26 | 27 | [root@k9 kazoo-master]# git status 28 | # On branch master 29 | # Your branch is ahead of 'origin/master' by 18 commits. 30 | # 31 | nothing to commit (working directory clean) 32 | 33 | [root@k9 kazoo-master]# git fetch upstream 34 | remote: Counting objects: 1495, done. 35 | remote: Compressing objects: 100% (25/25), done. 36 | remote: Total 1495 (delta 1062), reused 1055 (delta 1055), pack-reused 415 37 | Receiving objects: 100% (1495/1495), 387.97 KiB, done. 38 | Resolving deltas: 100% (1126/1126), completed with 176 local objects. 39 | From https://github.com/2600hz/kazoo 40 | 12350d9..67f936e 3.20 -> upstream/3.20 41 | 11ca138..4d0a897 3.21 -> upstream/3.21 42 | + 5a9e5be...02f6812 KAZOO-3891 -> upstream/KAZOO-3891 (forced update) 43 | + 6980cf9...b880a88 KAZOO-3959 -> upstream/KAZOO-3959 (forced update) 44 | 7cb5cbd..f57620c KAZOO-4009 -> upstream/KAZOO-4009 45 | * [new branch] KAZOO-4079 -> upstream/KAZOO-4079 46 | * [new branch] KAZOO-4108 -> upstream/KAZOO-4108 47 | 5c1280f..849005b master -> upstream/master 48 | * [new tag] 3.20.32 -> 3.20.32 49 | * [new tag] 3.21.33 -> 3.21.33 50 | From https://github.com/2600hz/kazoo 51 | * [new tag] 3.21.32 -> 3.21.32 52 | [root@k9 kazoo-master]# 53 | [root@k9 kazoo-master]# git merge upstream/master 54 | Already up-to-date. 55 | 56 | 57 | ``` 58 | 59 | ``` 60 | 1032 git config --global user.name "wlloyd" 61 | 1033 git config --global user.email "wlloyd@stormqloud.ca" 62 | 1034 git clone git@github.com:stormqloud/community-scripts.git 63 | 1039 git remote add upstream https://github.com/community-scripts.git 64 | 1040 git status -v 65 | 1042 git remotes 66 | 1043 git remote 67 | 1044 git remote -v 68 | 1045 git branch 69 | 1046 git branch pgcdr 70 | 1047 git checkout pgcdr 71 | 1048 git pull upstream pgcdr 72 | 1049 git remote -v 73 | 1050 git pull upstream 74 | 1051 git remote set-url upstream https://github.com/2600hz/community-scripts.git 75 | 1052 git pull upstream pgcdr 76 | 1053 git remote -v 77 | 1054 git pull upstream 78 | 1055 git branch 79 | 1057 git pull upstream master 80 | 1062 git add PostgreSQL-CDR/ 81 | 1063 git commit -m "new PostgreSQL to CDR stuff" 82 | 1066 git add . 83 | 1067 git commit -m "new PostgreSQL to CDR stuff" 84 | 1068 git push origin pgsql 85 | 1069 git push origin 86 | 1070 git branch 87 | 1071 git push origin ? 88 | 1072 git push origin master 89 | 1073 git push origin pgcdr 90 | 91 | ``` 92 | 93 | ``` 94 | 95 | [root@kz532 kazoo]# /opt/kazoo/scripts/conn-to-apps.sh 96 | Erlang R15B03 (erts-5.9.3.1) [source] [64-bit] [smp:4:4] [async-threads:0] [hipe] [kernel-poll:false] 97 | 98 | Eshell V5.9.3.1 (abort with ^G) 99 | (whistl...@kz532.onnet.su)1> l(kazoo_modb_maintenance). 100 | {module,kazoo_modb_maintenance} 101 | (whistl...@kz532.onnet.su)2> 102 | 103 | 104 | And you are OK: 105 | 106 | 107 | root@kz532 kazoo]# /opt/kazoo/scripts/conn-to-apps.sh 108 | Erlang R15B03 (erts-5.9.3.1) [source] [64-bit] [smp:4:4] [async-threads:0] [hipe] [kernel-poll:false] 109 | 110 | Eshell V5.9.3.1 (abort with ^G) 111 | (whistl...@kz532.onnet.su)1> l(kazoo_modb_maintenance). 112 | {module,kazoo_modb_maintenance} 113 | (whistl...@kz532.onnet.su)2> 114 | BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded 115 | (v)ersion (k)ill (D)b-tables (d)istribution 116 | ^C[root@kz532 kazoo]sup kazoo_modb_maintenance delete_modbs 201505 117 | deleting all MODBs equal to or older than 2015/5 118 | archiving to /tmp/account%2F00%2Fdf%2Ff804b9b8a3696bc8bc2271cef711-201505.json 119 | archived 30 docs 120 | deleted: true 121 | ``` 122 | -------------------------------------------------------------------------------- /dids.md: -------------------------------------------------------------------------------- 1 | # DIDs 2 | 3 | * Kazoo-UI tweak to allow non super users to "add a number", instead of just buy and port. 4 | * "You should add the pvt_wnm_allow_additions = true in both the account document in the accounts database as well as in the account doc in the accounts own database (If I remember correctly I read once that these two documents should be in sync anyway)." 5 | * https://groups.google.com/forum/#!searchin/2600hz-dev/add$20did/2600hz-dev/suN7lCY4Pag/7HrI-DtkcTYJ 6 | * I found that this works 7 | * sup crossbar_maintenance allow_account_number_additions `` 8 | * 9 | -------------------------------------------------------------------------------- /dns.md: -------------------------------------------------------------------------------- 1 | # DNS 2 | 3 | * Designing, understanding and laying out your DNS structure for Kazoo is more important then you may think. 4 | 5 | * DNS controls redundancy at multiple levels 6 | * DNS controls Kazoo white label 7 | * DNS controls phone handsets registration 8 | * DNS is the key to the Faxbox system 9 | 10 | * Decisions 11 | * Self host DNS mgmt or DNS hosting with ISP, provider etc. 12 | * Each Kazoo cloud setup should have it's own DNS name. 13 | * TOP level DNS or secondary, your choice 14 | 15 | ## This is best explained with an example 16 | 17 | * Pretend 3 Cluster setup 18 | * 3 servers, vm or otherwise is irrelevant 19 | * 3 Public IP that are *NOT* RFC 1918 20 | * Each server will provde all tasks 21 | * IE, Kamailio, Freeswitch, haproxy, bigcouch etc 22 | 23 | http://stormqloud.ca 24 | -------------------------------------------------------------------------------- /erlang.md: -------------------------------------------------------------------------------- 1 | # ERLANG 2 | 3 | * Lets face it, you were hoping to escape learning this. This description resembles myself.. 4 | 5 | * http://www.erlang.org/download/armstrong_thesis_2003.pdf 6 | 7 | ## Erlang syntax is part of the mystery. 8 | 9 | * Some resources to help cope with ELS (Erlang Learning Syndrome). 10 | * http://learnyousomeerlang.com/content 11 | * http://opensource.erlang-solutions.com/erlang-handbook/ 12 | * http://erldocs.com/ 13 | 14 | ### Erlang Cheat Sheets 15 | * http://apoie.org/Erlang%20-%20CheatSheet%20v1.0.pdf 16 | * https://github.com/stolowski/Erlang-Quick-Reference-Card/blob/master/erlang-quickref.pdf 17 | 18 | http://www.stormqloud.ca 19 | -------------------------------------------------------------------------------- /fax.md: -------------------------------------------------------------------------------- 1 | # FAX 2 | 3 | Kazoo has inbound and outbound faxing to/from PDF. 4 | 5 | Faxing has progressed from 3.16 to 3.18 and now 3.19. Master is ahead of what you will discover here. 6 | 7 | There are certainly more parts to faxing on Kazoo then are documented here. As they say, the best documentation is the source code.. 8 | 9 | ## Fax to Email gateway 10 | * This should work with no problem. Assign a callflow with a DID number to go into "receive fax". The "receive fax" application will associate with a user record. The PDF will be delivered to the users email address. 11 | * There is inbound faxbox funcationality also. 12 | * You set this up the same way, just ue the "faxbox" callflow. 13 | * The faxbox has extra functionality related to the "user app" in kazoo app store within your accounts. 14 | * There is some code for an online fax document viewer. I think it's only in monster-ui and not kazoo-ui. 15 | 16 | ## Email to Fax gateway 17 | * This is _much_ _much_ more complicated to setup. 18 | * This example shows some of the setup required. Depending on your needs there might be some steps left out.. 19 | * You want to fax a pdf to +15147872030 for example. 20 | * You send an EMAIL to a faxbox like this 21 | * +15147872030@4nfk24btd.fax.stormqloud.ca 22 | * Include your document as an attachment 23 | * PDF/PS/TIFF should all be ok 24 | * Subject line, other text goes to /dev/null ( http://en.wikipedia.org/wiki/Null_device ) 25 | * The faxbox has a personal individual unique dns name. 26 | * Each user of the fax system will need a unique DNS domain record. 27 | * I repeat, each faxbox requires a unique DNS MX record and name 28 | * This means 4nfk24btd.fax.stormqloud.ca must resolve to a MX record and is unique per faxbox. 29 | * Be RFC compliant, don;'t be lazy and go for A records for email!~ 30 | 31 | * Make sure to turn on the specific user "fax notification" checkbox if you want return error/status messages. 32 | * Carrier flags can select a "fax specific" call path! 33 | * If your regular SIP trunk provider doesn;t handle T38, you can ship it to second provider path 34 | 35 | * In my own case, I already restrict spam filtering for the fax domain. I'm skipping over it but it's needed in a serious setup. Kazoo isn;t built for spam filtering. It's done "upstream". Email me for more information or borrow from the installations that cover it. 36 | 37 | * Email always arrives on SMTP port 25. 38 | * On Kazoo port 25 is running Postfix. 39 | * Postfix uses the file 40 | `/etc/postfix/transport` 41 | 42 | * This will require multiple configuration changes. The shortlist.. 43 | * DNS MX records, get the email to Kazoo server 44 | * make sure you have gs (ghostscript) installed in /usr/bin/gs 45 | 46 | * These 2 links have much more information 47 | * https://groups.google.com/forum/#!topic/2600hz-users/IHtSwuuveTQ 48 | * https://github.com/2600hz/kazoo/tree/master/applications/fax/doc 49 | 50 | 51 | Kazoo inbound fax service should already be running on your Kazoo servers on TCP PORT 19025. the difficultly is routing the right email to it. 52 | 53 | Try this to verify the email to fax service itself is running: 54 | 55 | ``` 56 | [root@kaz ~]# telnet lh 19025 57 | Trying 127.0.0.1... 58 | Connected to lh. 59 | Escape character is '^]'. 60 | 220 kaz.prodosec.com Kazoo Email to Fax Server 61 | ``` 62 | 63 | 64 | ### Option 1: 65 | * To get the email flowing into Kazoo you must hijack port 25 on your inbound MX mail server and point it into Kazoo instead of Postfix. 66 | * The downside is that postfix is no longer running at port 25 on Kazoo servers. Many programs rely on that for outbound email delivery. Port 25 is SMTP standard! 67 | 68 | This option is discouraged. 69 | 70 | ### Option 2: 71 | *Use Postfix to send inbound smtp traffic to kazoo and outbound traffic outbound. 72 | 73 | *This is Postgres answering the SMTP TCP port 25 in a default Linux setup. 74 | 75 | * So your email arrives at port 25 by SMTP 76 | * Then Postgres uses the "transport" mechanism to push it to haproxy running on 2525 77 | * Haproxy does it's thing mapping the email onto port 19025 78 | 79 | * Got it? ;-) 80 | 81 | 82 | ``` 83 | [root@kaz ~]# telnet lh 25 84 | Trying 127.0.0.1... 85 | Connected to lh. 86 | Escape character is '^]'. 87 | 220 kaz.prodosec.com ESMTP Postfix 88 | 89 | ``` 90 | 91 | Now you need to make sure your Postgres SMTP server is answering *EXTERNAL* traffic. 92 | 93 | ``` 94 | In /etc/postfix/main.cf 95 | transport_maps = hash:/etc/postfix/transport 96 | ``` 97 | 98 | Edit or create /etc/postfix/transport 99 | 100 | ``` 101 | # contents of /etc/postfix/transport 102 | # 103 | .k6.prodosec.com smtp:[127.0.0.1]:2525 104 | .yourdomain.com smtp:[127.0.0.1]:2525 105 | 106 | 107 | 108 | ``` 109 | 110 | Listening ports for this can be changed in haproxy.cfg 111 | 112 | 113 | ``` 114 | #haproxy.cfg 115 | global 116 | log 127.0.0.1 local0 117 | log 127.0.0.1 local1 notice 118 | maxconn 4096 119 | user haproxy 120 | group haproxy 121 | stats socket /tmp/haproxy.sock mode 777 122 | 123 | defaults 124 | log global 125 | maxconn 2000 126 | retries 3 127 | timeout connect 6000ms 128 | timeout client 12000ms 129 | timeout server 12000ms 130 | 131 | listen kazoo-fax-smtp 132 | bind *:2525 133 | mode tcp 134 | no option http-server-close 135 | maxconn 50 136 | log global 137 | option tcplog 138 | timeout client 1m 139 | timeout server 1m 140 | timeout connect 5s 141 | balance roundrobin 142 | server k6.prodosec.com 127.0.0.1:19025 check check-send-proxy send-proxy 143 | 144 | listen bigcouch-data 127.0.0.1:15984 145 | balance roundrobin 146 | mode http 147 | option httplog 148 | server k6.prodosec.com 127.0.0.1:5984 149 | 150 | listen bigcouch-mgr 127.0.0.1:15986 151 | balance roundrobin 152 | mode http 153 | option httplog 154 | server k6.prodosec.com 127.0.0.1:5986 155 | 156 | listen haproxy-stats 127.0.0.1:22002 157 | mode http 158 | stats uri / 159 | 160 | ``` 161 | SIP Trunks stormqloud.ca 162 | -------------------------------------------------------------------------------- /federation.md: -------------------------------------------------------------------------------- 1 | # Federation/Zones 2 | 3 | ## The Holy Grail. 4 | 5 | * http://en.wikipedia.org/wiki/Federation 6 | 7 | * Bigcouch is designed to this standard which explains some background to the shards, quorum etc 8 | * http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html 9 | 10 | I searched to fgure out really what this means in Kazoo. 11 | 12 | Kazoo uses AMQP and BigCouch so Federation/Zones is a mix of what is defined in the other projects. 13 | 14 | * https://www.rabbitmq.com/federation-reference.html 15 | * http://www.erlang-factory.com/upload/presentations/369/Kocoloski-BigCouch-ErlangFactory.pdf 16 | 17 | Federation appear to rest on a few paramters of bigcouch 18 | 19 | * BigCouch databases are governed by 4 parameters 20 | * Q: Number of shards 21 | * N: Number of redundant copies of each shard 22 | * R: Read quorum constant 23 | * W: Write quorum constant 24 | 25 | Consider the following in determining how you will define these paramters. 26 | 27 | 28 | 29 | # Examples 30 | * Single Server install 31 | ``` 32 | [cluster] 33 | q=1 34 | r=1 35 | w=1 36 | n=1 37 | ``` 38 | 39 | * 2600hz setup 40 | * https://github.com/2600hz/kazoo-configs/blob/master/bigcouch/local.ini#L19-L23 41 | 42 | ``` 43 | [cluster] 44 | q=3 45 | r=2 46 | w=2 47 | n=3 48 | ``` 49 | 50 | From IRC 51 | ``` 52 | zones ensures data is replicated to multiple zones, typically defined geographically 53 | mc_ 54 | so you'd have two zones, east and west, defined to group servers in la and nyc 55 | mc_ 56 | the z param would then ensure at least one of the n replications would happen in east and west 57 | mc_ 58 | so you would have geo-redundancy 59 | mc_ 60 | of course, zone names are arbitrary so you could map them to whatever you want 61 | mc_ 62 | but typically people use the datacenter, country, etc as the zone name 63 | ``` 64 | 65 | * Information on setting up zones 66 | * https://groups.google.com/forum/#!searchin/2600hz-users/zone/2600hz-users/sclhrzkA1Sw/mPl6eaj2rAMJ 67 | * 68 | * https://github.com/2600hz/kazoo/blob/305053c762795ba279028c82c5e83b25f4d8901e/doc/installation.md 69 | -------------------------------------------------------------------------------- /firewall.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Ver 0.05 3 | # 4 | # wlloyd@stormqloud.ca 5 | 6 | # Standing on the shoulders of others. 7 | # https://2600hz.atlassian.net/wiki/display/Dedicated/Setting+up+IPTABLES 8 | # 9 | # cwd=/etc/sysconfig/ 10 | # 11 | 12 | # - BIGCOUCH-DB ZONE-1 SERVER 001 13 | bc11=10.200.255.110 14 | # - BIGCOUCH-DB ZONE-1 SERVER 002 15 | bc12=10.200.255.111 16 | # - BIGCOUCH-DB ZONE-1 SERVER 003 17 | bc13=10.200.255.112 18 | 19 | fs11=10.200.255.115 20 | fs12=10.200.255.116 21 | 22 | apps11=10.200.255.115 23 | apps12=10.200.255.116 24 | # flush all existing rules and chains 25 | iptables -F 26 | iptables -X 27 | 28 | # allow inbound ssh connection on external/public interface 29 | # you probably want to remap this from port 22 to port blabla 30 | iptables -A INPUT -p tcp --dport 22 --sport 1024:65535 -m state --state NEW,ESTABLISHED -j ACCEPT 31 | 32 | # set default policies (allow any outbound, block inbound, restrict forwarding between interfaces) 33 | iptables -P INPUT DROP 34 | iptables -P FORWARD DROP 35 | iptables -P OUTPUT ACCEPT 36 | 37 | # Allow TCP 80 and 443 for apache if you installed KAZOO-UI 38 | iptables -A INPUT -p tcp --dport 80 -j ACCEPT 39 | iptables -A INPUT -p tcp --dport 443 -j ACCEPT 40 | 41 | # Allow SNMP 42 | iptables -A INPUT -p udp -m udp --dport 161 -j ACCEPT 43 | 44 | # Allow TCP 8000 for crossbar/cowboy (API back end for Kazoo-UI/Monster-UI) 45 | iptables -A INPUT -p tcp --dport 8000 -j ACCEPT 46 | iptables -A INPUT -p tcp --dport 8443 -j ACCEPT 47 | 48 | # Allow RTP traffic 49 | iptables -A INPUT -p udp --dport 16384:32768 -j ACCEPT 50 | 51 | # Allow KAMAILIO traffic 52 | # regular ports plus 53 | # SIP ALG avoidance ports.. 54 | iptables -A INPUT -p tcp --dport 5060 -j ACCEPT 55 | iptables -A INPUT -p tcp --dport 5061 -j ACCEPT 56 | # 5064 replaces 8080 57 | iptables -A INPUT -p tcp --dport 5064 -j ACCEPT 58 | # 5065 replaces 8443 59 | iptables -A INPUT -p tcp --dport 5065 -j ACCEPT 60 | iptables -A INPUT -p tcp --dport 7000 -j ACCEPT 61 | iptables -A INPUT -p tcp --dport 7001 -j ACCEPT 62 | #iptables -A INPUT -p tcp --dport 8080 -j ACCEPT 63 | #iptables -A INPUT -p tcp --dport 8443 -j ACCEPT 64 | 65 | iptables -A INPUT -p udp --dport 5060 -j ACCEPT 66 | iptables -A INPUT -p udp --dport 5061 -j ACCEPT 67 | iptables -A INPUT -p udp --dport 5064 -j ACCEPT 68 | iptables -A INPUT -p udp --dport 5065 -j ACCEPT 69 | iptables -A INPUT -p udp --dport 7000 -j ACCEPT 70 | iptables -A INPUT -p udp --dport 7001 -j ACCEPT 71 | #iptables -A INPUT -p udp --dport 8080 -j ACCEPT 72 | #iptables -A INPUT -p udp --dport 8443 -j ACCEPT 73 | 74 | # allow all inbound traffic coming in on loopback and the internal/private interfaces 75 | #iptables -A INPUT -i eth0 -j ACCEPT 76 | iptables -A INPUT -i lo -j ACCEPT 77 | 78 | # allow your home / office ip 79 | iptables -A INPUT -s "XXX.XXX.XXX.XXX" -j ACCEPT # YOUR STATIC IP 80 | 81 | #iptables -A INPUT -s "" -j ACCEPT # whatever IP u want if u want someone else to see the db 82 | #PUBLIC IP ADDRESSES OF YOUR SERVERS - REPLACE X'S 83 | iptables -A INPUT -s $fs11 -j ACCEPT # - FREESWITCH ZONE-1 SERVER-1 84 | iptables -A INPUT -s $fs12 -j ACCEPT # - FREESWITCH ZONE-1 SERVER-2 85 | 86 | iptables -A INPUT -s $bc11 -j ACCEPT # - BIGCOUCH-DB LOCATION-1 SERVER 001 87 | iptables -A INPUT -s $bc12 -j ACCEPT # - BIGCOUCH-DB LOCATION-1 SERVER 002 88 | iptables -A INPUT -s $bc13 -j ACCEPT # - BIGCOUCH-DB LOCATION-1 SERVER 003 89 | 90 | iptables -A INPUT -s $apps11 -j ACCEPT # - WHAPPS/KAZOO LOCATION-1 SERVER-1 91 | iptables -A INPUT -s $apps12 -j ACCEPT # - WHAPPS/KAZOO LOCATION-1 SERVER-2 92 | 93 | # block traffic coming into db unless ACCEPTED in INPUT above which server setup IP's are placed in with home/office IP's above. 94 | iptables -A INPUT -p tcp --dport 15984 -j DROP 95 | iptables -A INPUT -p tcp --dport 15986 -j DROP 96 | 97 | # allow inbound traffic for established connections on external/public interface 98 | iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 99 | 100 | # block packets coming in with invalid source ips 101 | iptables -A INPUT -s 10.0.0.0/8 -j DROP 102 | iptables -A INPUT -s 172.16.0.0/12 -j DROP 103 | iptables -A INPUT -s 192.168.0.0/16 -j DROP 104 | iptables -A INPUT -s 224.0.0.0/4 -j DROP 105 | iptables -A INPUT -s 240.0.0.0/5 -j DROP 106 | iptables -A INPUT -s 0.0.0.0/8 -j DROP 107 | iptables -A INPUT -s 169.254.0.0/16 -j DROP 108 | iptables -A INPUT -s 127.0.0.0/8 -j DROP 109 | 110 | # ICMP 111 | #iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/sec -j ACCEPT 112 | 113 | # SYN flood limiter 114 | iptables -A INPUT -p tcp --syn -m limit --limit 5/s -j ACCEPT 115 | 116 | # catch-all for end of rules 117 | # LOG and DENY other traffic to help identify additional filters required 118 | iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level debug 119 | iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited 120 | 121 | # Save settings 122 | # 123 | # On CentOS / Fedora this will output the current IPTables to the stdout, which we can pipe to a file that sets these on boot 124 | iptables-save > /etc/sysconfig/iptables 125 | # 126 | # List rules 127 | # 128 | iptables -L -v 129 | -------------------------------------------------------------------------------- /glossary.md: -------------------------------------------------------------------------------- 1 | # Kazoo Glossary 2 | 3 | # 4 | ## shit you need to know when people use names.. 5 | 6 | # Check the glossary section also. 7 | 8 | * core kazoo => Erlang core that sup, crossbar, stepswitch, freeswitch use 9 | * kazoo => same as "core Kkazoo" 10 | * crossbar => http API that translates HTTP functions into "Core Kazoo" Erlang calls 11 | * kazoo-ui => web application that uses crossbar v1 API calls to control core kazoo 12 | * monster-ui => web app 2.0, that uses crossbar v2(v1 fallback) API calls to control core kazoo 13 | * MODB => Month Only DataBase. IE 1 month data for 1 client. 14 | 15 | * application names can also be dound on one of my other pages... 16 | * 17 | -------------------------------------------------------------------------------- /haproxy.md: -------------------------------------------------------------------------------- 1 | # HAPROXY 2 | # Under-appreciated element of the stack. 3 | 4 | So when you make a call to port 15984 on a Kazoo box, what's really happening is haproxy is running on that machine and it will proxy that request to port 5984. 5 | 6 | HAPROXY will often proxy your request to a different server then you made the call to. That's the *HA* part. High Availability. 7 | 8 | 9 | ``` 10 | https://groups.google.com/forum/#!searchin/2600hz-dev/zone/2600hz-dev/3m2C374mKbg/VUTEsJjrSHEJ 11 | 12 | Zone 1 - Customer/Region 13 | 14 | listen bigcouch-data 127.0.0.1:15984 15 | balance roundrobin 16 | server db1.zone1.mydomain.com 127.0.0.1:5984 check 17 | server db2.zone1.mydomain.com 127.0.0.2:5984 check 18 | server db3.main.mydomain.com 127.0.0.3:5984 check backup 19 | server db4.main.mydomain.com 127.0.0.4:5984 check backup 20 | 21 | 22 | Zone 2 - Customer/Region 23 | 24 | listen bigcouch-data 127.0.0.1:15984 25 | balance roundrobin 26 | server db1.zone2.mydomain.com 127.0.0.1:5984 check 27 | server db2.zone2.mydomain.com 127.0.0.2:5984 check 28 | server db3.main.mydomain.com 127.0.0.3:5984 check backup 29 | server db4.main.mydomain.com 127.0.0.4:5984 check backup 30 | 31 | 32 | ``` 33 | 34 | -------------------------------------------------------------------------------- /highperformance.md: -------------------------------------------------------------------------------- 1 | # Some tips.. 2 | 3 | * syslog - change to asynch 4 | * Remote syslog server.. 5 | 6 | 7 | * kamaillio 4.2 anyway.. 8 | * from 9 | * modparam("kazoo", "amqp_max_channels", 100); 10 | * modparam("kazoo", "amqp_internal_loop_count", 1); 11 | * modparam("kazoo", "amqp_consumer_loop_count", 4); 12 | 13 | *to something more like.. 14 | * modparam("kazoo", "amqp_max_channels", 400); 15 | * modparam("kazoo", "amqp_internal_loop_count", 5); 16 | * modparam("kazoo", "amqp_consumer_loop_count", 25); 17 | -------------------------------------------------------------------------------- /install.md: -------------------------------------------------------------------------------- 1 | # The Install but Not Install instructions. 2 | 3 | * Kazoo is a big project. 4 | 5 | * It's not a question of what version I'm running at the moment. 6 | * It's a question of how many Kazoo versions you have running at the same time. 7 | 8 | * If you are a first time user, do a single ISO single server install. 9 | * Use stable if promted. 10 | * Plan to install each major version for ISO as a test enviroment. 11 | 12 | * If you are a long time user looking to expand you cluster then you should dig in 13 | * https://github.com/stormqloud/kazoo-tgbbok/tree/master/maintenance 14 | 15 | Just a few links to keep track of... 16 | 17 | * random guy instructions 18 | * http://www.powerpbx.org/content/kazoo-v3-single-or-multiple-server-voip-telephony-platform-install-guide-v1 19 | 20 | * 2600hz version of random guy page 21 | * https://github.com/2600hz/kazoo/blob/305053c762795ba279028c82c5e83b25f4d8901e/doc/installation.md 22 | 23 | * ln -s /usr/share/zoneinfo/America/Montreal /etc/localtime 24 | * comm -3 k6 yul01 25 | 26 | -------------------------------------------------------------------------------- /journey.md: -------------------------------------------------------------------------------- 1 | # Your Journey with Kazoo 2 | 3 | > It's not the destination, it's the journey. 4 | ### True, but let's try this again. 5 | > You plant a Kazoo seed, and the damn thing needs water.. 6 | ### Lies, damn lies. 7 | > I got some servers, backups (maybe). I wonk Kazoo. 8 | ### There is no need for waterboarding. They are breaking. 9 | >I need to split or rearrange my Kazoo infrastructure and I'm fucking lost. 10 | 11 | stormqloud|wlloyd@prodosec.com 12 | -------------------------------------------------------------------------------- /kamailio.md: -------------------------------------------------------------------------------- 1 | # Kamailio 2 | 3 | * Kamailio is a book unto itself 4 | * After a decade, I'm still not an expert in this program config file! 5 | * How many forks are there? 6 | * Kamailio 7 | * OpenSer 8 | * OpenSIPs 9 | * Ser 10 | * Others 11 | * Kamailio is what Kazoo uses. 12 | * It is *key* part of the system. 13 | 14 | * Kamailio handles.. 15 | * WebRTC (convert to SIP) 16 | * UDP SIP 17 | * TCP SIP 18 | * failover 19 | 20 | kamctl ul show --brief 21 | 22 | 23 | ##### wlloyd@prodosec.com 24 | -------------------------------------------------------------------------------- /languages.md: -------------------------------------------------------------------------------- 1 | # Languages 2 | 3 | * Kazoo does have multi languge support. 4 | * Language support has matured (changed) as of 3.20 5 | 6 | * Kazoo-ui 7 | * Lanaguge support is lacking in Kazoo-ui and has gotten left behind with recent changes 8 | * Use Monster-UI/accounts to change and manage an accounts language profile 9 | * You cannot use the sup way to change languages anymore. 10 | * Will not be recognized. 11 | 12 | * Where is the language stuff kept? 13 | * pre 3.20 language was mostly in couchdb accounts/xxxxxxx/media_master 14 | * Now language support is kept inside the account doc for the account. 15 | 16 | 17 | * Use 18 | * 'en-US' 19 | * 'fr-FR' 20 | * 'fr-CA' 21 | 22 | -------------------------------------------------------------------------------- /linux_versions.md: -------------------------------------------------------------------------------- 1 | # Linux versions.. 2 | 3 | ## `````` 4 | 5 | * What version of Linux should you use for Kazoo? 6 | * You should only use FreeBSD, Linux is only for Penguins. 7 | * Just kidding 8 | * I love FreeBSD, but there is little Kazoo support at this time 9 | * Erlang on FreeBSD is super production quality 10 | * Ever heard of Whatsapp? 11 | * https://www.erlang-solutions.com/about/news/erlang-powered-whatsapp-exceeds-200-million-monthly-users 12 | * a couple hundred million users on Erlag/FreeBSD 13 | * moving on.. 14 | 15 | * The answer used to be simple Centos 6 16 | * 2600hz distributes Centos 6 RPM's for everything.. 17 | 18 | * Centos 6 and Freeswitch (1.6+) do not "play nice" 19 | * dependancies.. 20 | 21 | * Centos 6 has python 2.6 baked in (boo hiss) 22 | 23 | * Kazoo 4.0 will likely require Debian for Freeswitch 24 | * This is a Freeswitch recommendation/requirement more then 2600hz 25 | 26 | * Debian binary install packages are showing up for Freeswitch on repo.2600hz.com 27 | 28 | ## `````` 29 | 30 | http://stormqloud.ca 31 | -------------------------------------------------------------------------------- /maintenance/couchdb.md: -------------------------------------------------------------------------------- 1 | # CouchDB 2 | 3 | ## Drop a month of everybody records 4 | 5 | * Generally a good idea to only keep a few months in couchdb. 6 | * This will archive older then 6 months to /tmp/ 7 | * ``` sup kazoo_modb_maintenance archive_modbs ``` 8 | * This will then let you delete the info in couchdb now that it is archived. 9 | * ``` sup kazoo_modb_maintenance delete_modbs 201503 ``` 10 | 11 | -------------------------------------------------------------------------------- /maintenance/daily_kazoo_backup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Version 0.22 3 | # kazoo-tgbbok 4 | # stormqloud (wlloyd@prodosec.com) 5 | 6 | # This script will backup 7 | # CouchDB (ie /srv) 8 | # /etc/kazoo 9 | # /tmp/*json (files created from sup kazoo archive) 10 | 11 | # They will be encrypted and uploaded to Google Cloud Storage 12 | # They will not be sotred with absolute path names. 13 | # This should prevent you from blowing away your real config on a restore.. 14 | 15 | # To backup BigCouchDB to Google Cloud Storage 16 | # and do a little MODB cleanup. 17 | # IE prune your couchdb database after the backup if it's the end of the month 18 | # and things are over 6 months. 19 | 20 | # Ideally for Kazoo from 2600hz.com! 21 | 22 | # Run this daily on each BigCouchDB server. 23 | # Like this in cron.. 24 | # 0 8 * * * /bin/sh /root/daily_kazoo_backup.sh 25 | # FYI, your big couch server should be setup for GMT(insert PC name) timezone. 26 | 27 | # Signup for Google Compute Account. You get 90 days free. 28 | # This login contains storage space. Everything will say compute engine. 29 | # Here's the thing, when you have a compute engine (virtual machine), you need disk space right.. 30 | # "Nearline" is like $0.01 per GB per month. 31 | 32 | # Under permissions, create a service account 33 | # You will get a json or pk12 (choose json) 34 | # rename it service-account.json and save it in /root on your CouchDB server 35 | 36 | # enable google storage api 37 | # under storage tab, create bucket 38 | 39 | # bucket in this is calles kazoo-backups 40 | # couchdb is a directory in the bucket that you create with the web interface (or remote it) 41 | 42 | # Per BigcouchDB server 43 | 44 | # Centos6 you need 45 | # yum install gcc openssl-devel python-devel python-setuptools libffi-devel 46 | # yum install python-pip 47 | # pip install gsutil 48 | # curl https://sdk.cloud.google.com | bash 49 | 50 | # gcloud auth activate-service-account --key-file service-account.json 51 | 52 | # If you are on CentOS 6 this will help remove this nag. 53 | #diff /usr/lib/python2.6/site-packages/cryptography-1.1.2-py2.6-linux-x86_64.egg/cryptography/__init__.py /usr/lib/python2.6/sickages/cryptography-1.1.2-py2.6-linux-x86_64.egg/cryptography/__init__.py~ 21,26c21,26 54 | #< #if sys.version_info[:2] == (2, 6): 55 | #< # warnings.warn( 56 | #< # "Python 2.6 is no longer supported by the Python core team, please " 57 | #< # "upgrade your Python.", 58 | #< # DeprecationWarning 59 | #< # ) 60 | #--- 61 | #> if sys.version_info[:2] == (2, 6): 62 | #> warnings.warn( 63 | #> "Python 2.6 is no longer supported by the Python core team, please " 64 | #> "upgrade your Python.", 65 | #> DeprecationWarning 66 | #> ) 67 | 68 | # the actual magic is short... 69 | # This will encrypt the files with password as below 70 | password='password' 71 | 72 | d=`date +%Y%m%d%H` 73 | subdir=`date +%Y%m` 74 | kd=`date --date "7 months ago" +%Y%m` 75 | h=`hostname` 76 | f="/tmp/couchdb_${h}_${d}.tar.bz2" 77 | dest="gs://kazoo-backups/couchdb/${h}/${subdir}/" 78 | #echo $dest 79 | cd / 80 | tar -cJf ${f} srv 81 | tar --append -cJf ${f} etc/kazoo 82 | echo ${password} | gpg -vvv --symmetric --batch --passphrase-fd 0 --output ${f}.gpg -c ${f} 83 | /root/google-cloud-sdk/bin/gcloud auth activate-service-account --key-file /root/service-account.json 84 | /root/google-cloud-sdk/bin/gsutil -q cp -c ${f}.gpg ${dest} 85 | rm ${f} 86 | rm ${f}.gpg 87 | 88 | # Do a little cleanup while in the vicinity.. 89 | #echo 'sup kazoo_modb_maintenance archive_modbs' 90 | sup kazoo_modb_maintenance archive_modbs 91 | 92 | if ls /tmp/*json 1> /dev/null 2>&1; then 93 | /root/google-cloud-sdk/bin/gsutil -q cp -c /tmp/*json ${dest} 94 | #rm -rf /tmp/*json 95 | echo "Archive json modb to google" 96 | else 97 | echo "Nothing to archive" 98 | fi 99 | 100 | echo 'sup kazoo_modb_maintenance delete_modbs' ${kd} 101 | sup kazoo_modb_maintenance delete_modbs ${kd} 102 | 103 | # When you want to restore a copy 104 | # cd /tmp 105 | # echo 'password' | gpg --batch -q -o /tmp/couchdb_restore.tar.bz2 --passphrase-fd 0 --decrypt /tmp/file.tgz.gpg 106 | # mkdir /tmp/couchdb_restore 107 | # tar vxJf couchdb_restore.tar.bz2 --directory /tmp/couchdb_restore 108 | # Now if you want to copy to /srv that's your own decision.. 109 | -------------------------------------------------------------------------------- /maintenance/freeswitch.md: -------------------------------------------------------------------------------- 1 | # Growing Freeswitch in the cluster. 2 | 3 | * Freeswitch for Kazoo requires the following packages to operate 4 | * kazoo-configs (/etc/kazoo/freeswitch) 5 | * kazoo-prompts 6 | * kazoo-freeswitch 7 | 8 | * Understand that ecallManager connects to Freeswitch not the other way around. 9 | * Ecallmanager and stepswitch are Freeswtich conenction to RabbitMQ etc. 10 | * SIP/RTP too obviously 11 | 12 | * install and config ntp and ntpdate 13 | * timezone is set to GMT no matter where you are in the world. Timezones are changed in accounts. 14 | 15 | * iptables firewall 16 | * install freeswitch kazoo package 17 | * install kazoo configs package 18 | 19 | * install haproxy if not already there 20 | * Freeswitch can use haproxy to read media files from CouchDB. 21 | * It will not fail on startup if not exist. 22 | * Occasional media might not work.. 23 | 24 | * edit /etc/kazoo/freeswitch/autoload_configs/kazoo.conf.xml 25 | * Erlang cookie.. 26 | * `````` 27 | * ```sup -n ecallmgr ecallmgr_maintenance add_fs_node freeswitch@$FQDN ``` 28 | * command will auto flush it seems. 29 | * ```fs_cli -x 'erlang status'``` 30 | * should show that ecallmgr is connecting to freeswitch 31 | * you do not need to change the "acls" section in ecallmg config doc. 32 | * Specifically ```"network-list-name": "authoritative",``` is for Kamaillio NOT Freeswitch. 33 | * "TRUSTED" is for your carriers IP 34 | 35 | * language packs.. /usr/share/freeswitch/sounds 36 | * make sure you have all your languages. 37 | * 38 | ``` 39 | [root@fs01 sounds]# ls -la /usr/share/freeswitch/sounds 40 | total 20 41 | drwxr-xr-x 4 freeswitch daemon 4096 Oct 9 19:32 . 42 | drwxr-xr-x 6 root root 4096 Apr 24 04:13 .. 43 | drwxr-xr-x 3 freeswitch daemon 4096 Jul 17 21:26 en 44 | drwxr-xr-x 3 freeswitch daemon 4096 Jul 17 21:26 music 45 | -rw-r--r-- 1 freeswitch daemon 125 Jul 17 21:26 VERSION 46 | ``` 47 | 48 | * sup -necallmgr ecallmgr_maintenance reload_acls 49 | * 50 | 51 | sip trunks from www.stormqloud.ca 52 | -------------------------------------------------------------------------------- /maintenance/freeswitch_compile.md: -------------------------------------------------------------------------------- 1 | # On the random chance you want to compile FreeSwitch yourself to add in an extra module. 2 | 3 | * yum groupinstall 'Development Tools' 4 | * git clone https://github.com/2600hz/kazoo-freeswitch.git --branch=1.4.15 5 | * ./bootstrap.sh 6 | * yum install git gcc-c++ autoconf automake libtool wget python ncurses-devel zlib-devel libjpeg-devel openssl-devel e2fsprogs-devel sqlite-devel libcurl-devel pcre-devel speex-devel ldns-devel libedit-devel 7 | * I was doing this for xml_rpc .. 8 | 9 | -------------------------------------------------------------------------------- /maintenance/kamailio.md: -------------------------------------------------------------------------------- 1 | # Growing Kamailio 2 | 3 | * Kamailio uses mod_kazoo to speak to RabbitMQ 4 | * All communications with other components are by way of RabbitMQ messaging 5 | 6 | 7 | * Change dispatchers without restart of Kamailio 8 | * https://groups.google.com/forum/#!searchin/2600hz-dev/uri/2600hz-dev/K30V0Tp3xNM/PVw0svzRU-EJ 9 | 10 | stormqloud.ca 11 | -------------------------------------------------------------------------------- /maintenance/rabbitmq.md: -------------------------------------------------------------------------------- 1 | # RabbitMQ 2 | 3 | * If you clone a VM or change the IP/HOSTNAME, reinstall RabbitMQ 4 | * The hostname is kept inside MNESIA (Erlang DB) and will cause you problems.. 5 | * You need to cleanout /var/lib/rabitmq stuff 6 | -------------------------------------------------------------------------------- /maintenance/whapps.md: -------------------------------------------------------------------------------- 1 | # Adding Whapps/Ecallmgr/Rabbit server. 2 | 3 | * This might be too bundled up for some people.. 4 | * you can split this up even further. 5 | 6 | ** Rememebr to deal with your Erlang cookies that I'm skipping over.. 7 | 8 | * Install 9 | * haproxy 10 | * configure to "haproxy" to your bigcouch servers 11 | * kazoo-configs 12 | * kazoo itself 13 | * chkconfig kz-ecallmgr on 14 | * chkconfig kz-whistle_apps on 15 | 16 | * kazoo librabbitmq 17 | * chkconfig rabbitmq-server on 18 | 19 | * Rabbit 20 | * rabbitmqctl list_bindings 21 | * 22 | -------------------------------------------------------------------------------- /monster-ui.md: -------------------------------------------------------------------------------- 1 | # Monster-UI 2 | 3 | ### tl;dr: Monster-UI is an awesome product. Until callflows editor is available, it's not production. Use Kazoo-UI. 4 | 5 | ## Monster-UI replaces Kazoo-UI 6 | * Monster-UI looks awesome 7 | * Monster-UI is a great product 8 | * It's different then Kazoo-UI and makes more assumptions. 9 | * "thats a good thing" TM 10 | 11 | ## If you are new to Kazoo. 12 | * Kazoo-UI has more features and has a "lower level" interface. 13 | * Monster-UI is missing some critical apps/features in open source 14 | * callflows 15 | * Moster is missing some useful apps as well 16 | * blacklists 17 | * developer 18 | * end user 19 | 20 | * Change the URL but otherwise this will troll through the directory looking for apps to install 21 | * sup crossbar_maintenance init_apps '/var/www/html/monster-ui/apps' 'http://sip.stormqloud.ca:8000/v2' 22 | -------------------------------------------------------------------------------- /names.md: -------------------------------------------------------------------------------- 1 | #Naming Conventions 2 | 3 | Unfortunately, Kazoo has some very badly named applications that go along with it. 4 | 5 | ###Two examples before we provide a translation matrix 6 | 7 | * `jonny5` 8 | * For exmaple, somehow "jonny5" is an appropriate name for the module that does limiting. Whatever comic book or other minor cultural reference `jonny5` comes from is unknown. 9 | * In reality this is a module for controlling max channel limits for an account etc. 10 | * `hotornot` 11 | * `hotornot` is an application for `rating` calls. IE determining call cost/price. 12 | * The main application is named `hotornot` yet the databse table where the values reside is called `ratedeck` 13 | 14 | | Kazoo name | Status |What it does | 15 | |--------------|--------|------------------------------------| 16 | | acdc | |Automatic Call Distribution | 17 | | blackhole | | Block stuff | 18 | callflow | | Callflows, this is important Kazoo concept hiding lots of stuff 19 | camper | | Hold a call in various ways 20 | cccp | | Calling Card Callback Platform 21 | cdr | | self evident 22 | conference | | self evident 23 | crossbar | | asdf 24 | doodle | | SMS app of some kind 25 | dth | | unkown 26 | ecallmgr | |core 27 | fax | | self evident 28 | hangups | | self evident 29 | hotornot | | rate calls 30 | jonny5 | | limit calls 31 | konami | | Cool Transfer Feature 32 | milliwatt | | Milliwatt test tone, echo test, readback callerid etc 33 | notify | | email templates 34 | omnipresence | |Phone presenece 35 | pivot | |API Call control (asterisk AGI like) 36 | registrar | | self evident 37 | reorder | |redorder with forward and other unknown features 38 | skel | | Only for developers 39 | spyvsspy | | unkown status, evesdropping program for pbx mode 40 | stats | | SNMP Stats 41 | stepswitch | | 42 | sysconf | | 43 | teletype | |replacing notify..... 44 | trunkstore | | self evident 45 | webhooks | | unkn 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /phone_numbers.md: -------------------------------------------------------------------------------- 1 | # Phone numbmers 2 | 3 | # Numbers Lifecycle 4 | * This is very important when you start to care about DID's. 5 | * https://2600hz.atlassian.net/wiki/display/Dedicated/Number+Lifecycle 6 | 7 | * CNAM 8 | * Cnam gets enabled or disabled on a per number basis 9 | * CNAM is a USA thing only 10 | * Canadian DID's do not support CNAM for example 11 | 12 | 13 | * To make sure CNAM is enabled and running on the DID make sure to set these attributes. 14 | 15 | ``` 16 | "cnam": { 17 | "inbound_lookup": true 18 | }, 19 | 20 | and 21 | 22 | "pvt_features": [ 23 | "inbound_cnam" 24 | ] 25 | ``` 26 | 27 | * If you need to be able to handle 'Dial 9 for an outside line' on a Kazoo system, you can handle that with a dial_plan on a per account basis. 28 | * Dial 9 outside trunks is obviously not needed in Kazoo, however it makes it easier for transitioning clients. 29 | * SIP trunking and LCR routing makes this mostly not used anymore. 30 | ``` 31 | "dial_plan": { 32 | "^91?(\\d{10})$": { 33 | "description": "PBX Dial9", 34 | "prefix": "+1" 35 | } 36 | }, 37 | ``` 38 | 39 | 40 | * www.stormqloud.ca 41 | * http://www.canadadids.ca 42 | -------------------------------------------------------------------------------- /phones/cisco.md: -------------------------------------------------------------------------------- 1 | # Cisco Handsets 2 | 3 | * 7940 & 7960 4 | * These were awesome phones, I loved mine them 5 | * 2005 is calling and needs some extra handsets 6 | * junk them 7 | * Replace immediately, way old SIP 8 | * broken remote provisioning 9 | * Sipura/Linksys/Cisco 10 | * SPA504G etc 11 | 12 | * Some sipura magic you might want to find easily like me.. 13 | * 14 | ``` 15 | http://192.168.100.132/admin/upgrade?http://www.prodosec.com/spa504g/firmware/spa50x-30x-7-6-1.bin 16 | http://192.168.100.128/admin/resync?http://www.prodosec.com/spa504g/$MA.cfg 17 | 18 | ``` 19 | * Upgrade rule to auto get over the 7.5.2b manditory bus stop 20 | ``` 21 | 22 | ($SWVER lt 7.5.2b) ? http://prov.bla.net/spa/spa50x-30x-7-5-2b.bin | http://prov.bla.net/spa/spa50x-30x-7-6-1.bin 23 | 24 | ``` 25 | 26 | 27 | http://www.stormloud.ca 28 | -------------------------------------------------------------------------------- /phones/grandstream.md: -------------------------------------------------------------------------------- 1 | # Grandstream 2 | * Have gotten a lot better over the years. 3 | * They used to be total garbage 4 | * Have gotten better 5 | * still too many models/firmware 6 | 7 | * Firmware Bugs 8 | * Lots 9 | 10 | * Provisioning 11 | * Messy... 12 | * Not supported by 2600hz hosted platform yet 13 | 14 | 15 | stormqloud.ca 16 | 17 | -------------------------------------------------------------------------------- /phones/polycom.md: -------------------------------------------------------------------------------- 1 | # Polycom 2 | 3 | wlloyd+spam@stormqloud.ca 4 | 5 | -------------------------------------------------------------------------------- /phones/readme.md: -------------------------------------------------------------------------------- 1 | ### Random Phone handset Vendor info 2 | ### Kazoo compatability 3 | 4 | ### Anybody that wants me to test their phones please send them in.. 5 | 6 | #### The cost of phones is low enough that "broken" handsets should just be swapped out. 7 | #### Just because a handset supports SIP vs a proprietary protocol does not mean it provides a good user experience! 8 | 9 | * Yealink 10 | * 2600hz really like Yealink. 11 | * use Yealink for the best Kazoo experience 12 | 13 | * Polycom 14 | * Enterprise vendor 15 | * Everybody need to support Polycom 16 | * Kazoo like Polycom 17 | * Cisco 18 | * Cisco 19 | * 7940 Replace 20 | * 7960 Replace 21 | * Sipura/Linksys 22 | * SPA504G 23 | * Widely used with Kazoo 24 | * Grandstream 25 | * Snom 26 | * Avoid. 27 | * Offer free replacement phones 28 | * Aastra 29 | * Avoid. 30 | * Offer free replacement phones 31 | * Mitel 32 | * Offer free replacement phones 33 | * There isn't much in this section.. 34 | 35 | stormqloud.ca 36 | -------------------------------------------------------------------------------- /phones/snom.md: -------------------------------------------------------------------------------- 1 | #Snom 2 | 3 | * Avoid at all cost. 4 | * plan to replace immediately 5 | * scrap them 6 | * they will never work 7 | * no matter how many firmware you try... 8 | * same shit, different pile! 9 | 10 | -------------------------------------------------------------------------------- /phones/yealink.md: -------------------------------------------------------------------------------- 1 | #Yealink 2 | 3 | ### I have little hands on experience. 4 | ### I need more handsets to test with, hint, hint hint.. 5 | 6 | ## 2600hz approved. 7 | 8 | www.stormqloud.ca 9 | -------------------------------------------------------------------------------- /ports.md: -------------------------------------------------------------------------------- 1 | # Ports 2 | 3 | The following ports are involved in a running Kazoo setup. 4 | 5 | You may want to check out https://github.com/stormqloud/kazoo-tgbbok/blob/master/firewall 6 | 7 | This assumes a one server system. 8 | 9 | If you run a 6/7/8/etc server cluster the same ports are at play. It's just you may want to lock down traffic even more. 10 | 11 | You should firewall ACL these appropriately at your border router. 12 | 13 | Specifically you should by default deny all public traffic to your Kazoo machines. Open up ports below as required. 14 | 15 | This is probably not an exhaustive list. Remember about TCP/UDP. 16 | 17 | Each port really exists twice. 18 | 19 | 20 | | Port | World/Private(ie FW) | What it does | 21 | |--------------|--------|------------------------------------| 22 | | 25 | | SMTP 23 | | 80 | | www 24 | | 443 | | HTTPS 25 | | 2525 | P | Haproxy to 19025 26 | | 4369 | P | epmd 27 | | 5060 | | Kamailio (inbound SIP, outbound to handsets) 28 | | 5061 | | Kamailio TLS 29 | | 5064 | | Kamailio WebRTC 30 | | 5065 | | Kamailio WebRTC SSL 31 | | 5672 | P | RabbitMQ amqp main port 32 | | 5984 | P | CouchDB Data 33 | | 5986 | P | CouchDB Mgr 34 | | 7000 | | Kamailio ALG SIP 35 | | 7001 | | Kamailio ALG TLS SIP 36 | | 8000 | | Cowboy (API into Kazoo), Kazoo-UI uses this.. 37 | | 8021 | P | Freeswtich Event socket 38 | | 8080 | depreciated | Kamailio websocket 39 | | 8031 | ? | Freeswitch 40 | | 8443 | P | HTTPS for the Kazoo API (crossbar), old Kamailio WebSocket TLS 41 | | 11000 | | Freeswitch (Kamailio Dispatcher sends to this), outbound to CARRIERS from here 42 | | 11500 | ? | - BigCouch used for ? 43 | | 15672 | P | RabbitMQ GUI (guest/guest) 44 | | 15984 | P | Haproxy to 5984 45 | | 15986 | P | Haproxy to 5986 46 | | 19025 | P | Email to Fax 47 | | 22002 | P | HAProxy Stats 48 | 49 | 50 | * For RTP traffic. That's the audio packets. 51 | * You must have this range open for RTP audio packets. Deal with it... 52 | 53 | ``` 54 | switch.conf.xml: 55 | switch.conf.xml: 56 | ``` 57 | 58 | wlloyd@stormqloud.ca 59 | http://www.stormqloud.ca 60 | 61 | -------------------------------------------------------------------------------- /provisioning.md: -------------------------------------------------------------------------------- 1 | # Provisioning 2 | 3 | ## If you are from 2600hz.org please consider renting your provisioner as a monthly service. 4 | ## Provisioning is the most commonly frequented page on this blog. 5 | 6 | * As of early 2015, "Open Source Provisioning" is so hopelessly complicated as to be unknown in the wild. 7 | * 2600hz apparently has provisioning built for monster-ui. This is not an open source product as far as I can find. It does appear it wil ever be. 8 | 9 | * https://groups.google.com/forum/#!searchin/2600hz-dev/provisioner/2600hz-dev/573YWxdxz9E/b6okNxauIqQJ 10 | * "The provisioner is in a state of flux. The old one is completely unstable so we’re not really encouraging people to use that at this point." 11 | 12 | # To the reader: you have two options to get Provisioning working ;-) 13 | 14 | * Buy support from 2600hz.com or move to their hosted platform ( good idea ;-) ) 15 | 16 | * Research and rewrite the old unreliable provisioning yourself and send me (stormqloud.ca) the instructions ;-) 17 | 18 | # Kazoo-ui and Monster-ui appear to have slightly different provisioning. If you are to implement things yourself you need to pick one.. 19 | 20 | # What's in the Kazoo source tree? 21 | * There are currently 4 versions of provisiong in the Kazoo backend. It's unclear how different or similar these are to each other. Based on the dates things were checked into the source tree, it would appear that provisioner_v5 is the newest. Newest doesn;t mean the best working however! 22 | 23 | * super_awesome_provisioner 24 | * awesome_provisioner 25 | * simple_provisioner 26 | * provisioner_v5 (Feb 2014) 27 | 28 | 29 | # Open Source Provisioning (provisioner-v5) 30 | * The old open source code is now know as provisioner-v5 in the source tree. 31 | * It's not secure, it's unreliable 32 | * Making a DB mistake can take out all your phones in a matter of hours. 33 | 34 | In the meantime here are a few random things. 35 | 36 | Do not think this is going to get provisioning installed. Provisioning is broken and undeveloped. Nobody can help you except yourself. 37 | 38 | * Some random doc links (this will not match exactly the code...) 39 | * https://2600hz.atlassian.net/wiki/pages/viewpage.action?pageId=27066376 40 | 41 | * The provisioner-v5 code 42 | * https://github.com/provisioner/Provisioner/tree/v5-dev 43 | 44 | * This probably refers to code that is not open source. IE NOT provisioner-v5, not checked. 45 | * https://github.com/bluesandnz/kazoo-provisioner 46 | * The Kazoo-ui has old provisioning code in another source tree. 47 | * https://github.com/2600hz/phone 48 | * You should install this code inside you kazoo-ui/applications/voip folder 49 | * /var/www/html/kazoo-ui/whapps/voip/phone/phone.js 50 | 51 | * Edit /var/www/html/kazoo-ui/config/config.js 52 | * Add a line like 53 | * ``` provisioner_url: '/p', ``` 54 | 55 | * To turn on the old provisioner-v5 in kazoo-ui needs a ui_flag that does not already exist. 56 | * You need to track down in futon the doc for your master user in the master account. 57 | * In there you will find an "apps"->"voip" section where you can add these flags. 58 | 59 | ``` 60 | "ui_flags": { 61 | "provision_admin": true, 62 | "super_duper_admin": true 63 | } 64 | ``` 65 | 66 | * there are about a billion other things that need to be done. 67 | * rewrite provisioner-v5 cause it's not compatable with Kazoo 3.18 ! 68 | -------------------------------------------------------------------------------- /rabbit.md: -------------------------------------------------------------------------------- 1 | # Rabbit 2 | 3 | * Not the animal that people eat. 4 | * RabbitMQ (built on Erlang of course) 5 | 6 | * rabbitmqctl cluster_status 7 | 8 | * Rabbit clustering 9 | ** More importantly unclustering when you clone etc.. 10 | ** https://www.rabbitmq.com/clustering.html 11 | 12 | * My understanding is Rabbit clustering is not used for Kazoo Federation/zones 13 | * Have been known to be wrong 14 | 15 | http://www.of.rabbit:15672/ 16 | 17 | username guest 18 | password guest 19 | 20 | wlloyd@stormqloud.ca 21 | -------------------------------------------------------------------------------- /security.md: -------------------------------------------------------------------------------- 1 | # Security 2 | 3 | * SSL 4 | * Warning, self signed certificates are basically useless for Kazoo 5 | * The API calls will silently fail in your browser because the cert is not part of a chain 6 | * Because the requests come from javascript your browser will not ask you to accept the key.. 7 | * Get a "real" cert or use Certbot to start with 8 | * It's your time to waste, you have been warned. 9 | * https://2600hz.atlassian.net/wiki/display/Dedicated/Secure+Your+REST+APIs+with+SSL 10 | * https://groups.google.com/forum/#!searchin/2600hz-dev/syslog/2600hz-dev/KGI6ss580Gg/xG_pmfblZzUJ 11 | 12 | * You can also use haproxy or nginx to proxy the HTTPS into HTTP 13 | * This avoids much of the complecity you see here. 14 | * I have not tried this approach, but it's also a good way to approach the issue. 15 | 16 | * Extra notes 17 | * You can use Kazoo with certbot.eff.org (ie free certs) 18 | * Use Certbot to create the certs. It creates all certs as "pem files" 19 | * These files work with Kazoo without issues 20 | * I just renamed them.. 21 | * reload crossbar (changing the cert) etc 22 | * `sup whapps_controller restart_app crossbar` 23 | 24 | * All *USERS* that logs into Kazoo will need to be upgraded to change their application defaults in the user 'doc' 25 | 26 | ``` 27 | cp /etc/letsencrypt/live/testkazoo.prodosec.com/cert.pem /opt/kazoo/applications/crossbar/priv/ssl/crossbar.crt 28 | cp /etc/letsencrypt/live/testkazoo.prodosec.com/privkey.pem /opt/kazoo/applications/crossbar/priv/ssl/crossbar.key 29 | ``` 30 | 31 | * Convert Kazoo-ui config.js 32 | ``` 33 | 34 | /bin/sed -i s/'http'/https/g /var/www/html/kazoo-ui/config/config.js 35 | /bin/sed -i s/'httpss'/https/g /var/www/html/kazoo-ui/config/config.js 36 | /bin/sed -i s/8000/8443/g /var/www/html/kazoo-ui/config/config.js 37 | /bin/sed -i s/'api.stormqloud.ca'/'api2.stormqloud.ca'/g /var/www/html/kazoo-ui/config/config.js 38 | 39 | ``` 40 | 41 | * Make a daily certbot crontab.. 42 | * Certbot certificates are valid for 90 days only 43 | * You need a daily cron job to renew your certs 44 | * If they are still under 80 days it, the job will do nothing. 45 | * IF the cert gets replaced then the renew-hook gets called. 46 | ``` 47 | # sample cron job entry. 48 | 23 4 * * * /opt/certbot/certbot-auto renew --renew-hook "/opt/certbot/certbot-kazoo.sh" 49 | ``` 50 | 51 | 52 | * Certbot restart script hook for kazoo 53 | ``` 54 | #!/bin/sh 55 | # certbot-kazoo.sh 56 | /bin/cp /etc/letsencrypt/live/kazoo.prodosec.com/cert.pem /opt/kazoo/applications/crossbar/priv/ssl/crossbar.crt 57 | /bin/cp /etc/letsencrypt/live/kazoo.prodosec.com/privkey.pem /opt/kazoo/applications/crossbar/priv/ssl/crossbar.key 58 | sup whapps_controller restart_app crossbar 59 | ``` 60 | 61 | http://www.stormqloud.ca 62 | -------------------------------------------------------------------------------- /selling_services/README.md: -------------------------------------------------------------------------------- 1 | # Home for 2 | * money 3 | * billing 4 | * invoicing 5 | * cdr 6 | * etc 7 | * Business type stuff 8 | 9 | -------------------------------------------------------------------------------- /selling_services/braintree.md: -------------------------------------------------------------------------------- 1 | # Braintree 2 | 3 | * http://www.braintree.com 4 | * Currently this is all the Kazoo supports. 5 | 6 | ## Starting Braintree module 7 | ``` 8 | sup crossbar_maintenance load_module braintree 9 | sup crossbar_maintenance start_module braintree 10 | sup crossbar_maintenance start_module cb_braintree 11 | ``` 12 | 13 | stormqloud.ca 14 | -------------------------------------------------------------------------------- /selling_services/cgrates.md: -------------------------------------------------------------------------------- 1 | # cgrates 2 | 3 | #### https://docs.google.com/viewer?a=v&pid=forums&srcid=MTU2NjEzNDcyNjAyMTA2MDA1NzUBMDAwODA3NzQwMzE2NjY3ODU5MDABQ1lVMlpfRTRwTHNKATAuMQEBdjI&authuser=0 4 | -------------------------------------------------------------------------------- /selling_services/limits.md: -------------------------------------------------------------------------------- 1 | # Limits 2 | 3 | * Account limits document.. 4 | * make sure jonny5 is running (use sup ..) 5 | * Make sure hotornot is running? 6 | * Schema https://github.com/2600hz/kazoo/blob/master/applications/crossbar/priv/couchdb/schemas/limits.json 7 | 8 | * https://2600hz.atlassian.net/wiki/display/Dedicated/Account+Limits 9 | * https://2600hz.atlassian.net/wiki/display/Dedicated/Limits 10 | * "default_to" email address in system_config/notify.system_alert 11 | * example "default_to": "wlloyd@stormqloud.ca" 12 | 13 | ``` 14 | "default": { 15 | "default_text_template": "Alert\n{{message}}\n\nProducer:\n{% for key, value in request %}{{ key }}: {{ value }}\n{% endfor %}\n{% if details %}Details\n{% for key, value in details %}{{ key }}: {{ value }}\n{% endfor %}\n{% endif %}{% if account %}Account\nAccount ID: {{account.pvt_account_id}}\nAccount Name: {{account.name}}\nAccount Realm: {{account.realm}}\n\n{% endif %}{% if admin %}Admin\nName: {{admin.first_name}} {{admin.last_name}}\nEmail: {{admin.email}}\nTimezone: {{admin.timezone}}\n\n{% endif %}{% if account.pvt_wnm_numbers %}Phone Numbers\n{% for number in account.pvt_wnm_numbers %}{{number}}\n{% endfor %}\n{% endif %}Service\nURL: {{service.url}}\nName: {{service.name}}\nService Provider: {{service.provider}}\n\nSent from {{service.host}}", 16 | "default_html_template": "

Alert

{{message}}

Producer

{% for key, value in request %}{% endfor %}
{{ key }}: {{ value }}
{% if details %}

Details

{% for key, value in details %}{% endfor %}
{{ key }}: {{ value }}
{% endif %}{% if account %}

Account

Account ID: {{account.pvt_account_id}}
Account Name: {{account.name}}
Account Realm: {{account.realm}}
{% endif %}{% if admin %}

Admin

Name: {{admin.first_name}} {{admin.last_name}}
Email: {{admin.email}}
Timezone: {{admin.timezone}}
{% endif %}{% if account.pvt_wnm_numbers %}

Phone Numbers

{% endif %}

Service

URL: {{service.url}}
Name: {{service.name}}
Service Provider: {{service.provider}}

Sent from {{service.host}}

", 17 | "default_subject_template": "2600hz-Platform: {{request.level}} from {{request.node}}", 18 | "default_service_url": "http://apps.2600hz.com", 19 | "default_service_name": "VOIP Services", 20 | "default_service_provider": "2600hz", 21 | "default_support_number": "(415) 886-7900", 22 | "default_support_email": "support@2600hz.com", 23 | "default_from": "no_reply@k6.prodosec.com", 24 | "default_template_charset": "", 25 | "default_to": "wlloyd@prodosec.com" 26 | }, 27 | "pvt_account_id": "system_config", 28 | "pvt_account_db": "system_config", 29 | "pvt_created": 63584408587, 30 | "pvt_modified": 63584408772, 31 | "pvt_type": "config" 32 | } 33 | ``` 34 | 35 | * Set "authz_enabled": 'true' on system_config/ecallmgr 36 | 37 | 38 | 39 | Set "authz_enabled" to true on system_config/ecallmgr 40 | Set "authz_default_action" to either "allow" or "deny" on system_config/ecallmgr. This is used when jonny5 fails to reply. 41 | If you just want to test (and not actually limit) set "authz_dry_run" to true on system_config/ecallmgr. 42 | 43 | ``` 44 | { 45 | "_id": "limits", 46 | "_rev": "1-7f33de24a1fe71380b7d7023cf3e23b5", 47 | "inbound_trunks": 0, 48 | "twoway_trunks": 1, 49 | "allow_prepay": true, 50 | "id": "limits", 51 | "pvt_type": "limits", 52 | "pvt_vsn": "1", 53 | ``` 54 | 55 | ``` 56 | 57 | "inbound_trunks": 0, 58 | "twoway_trunks": 0, 59 | "allow_prepay": false, 60 | "id": "limits", 61 | "pvt_allow_postpay": true, 62 | "pvt_allow_prepay": false, 63 | "pvt_max_postpay_amount": 100, 64 | "ui_metadata": { 65 | "ui": "kazoo-ui", 66 | "version": "RT-2.16(k3.12)(UI1)" 67 | }, 68 | "pvt_vsn": 1, 69 | "pvt_modified": 63569634590, 70 | "pvt_created": 63568813682, 71 | "pvt_type": "limits", 72 | "pvt_enabled": true, 73 | ``` 74 | 75 | * No calls on system.. 76 | ``` 77 | [root@k src]# sup jonny5_maintenance authz_summary 78 | no channels found 79 | [root@k src]# sup jonny5_maintenance limits_summary 80 | no limits found 81 | ``` 82 | 83 | * 1 call up 84 | ``` 85 | [root@k src]# sup jonny5_maintenance limits_summary 86 | +----------------------------------+-------+----------------+------------+--------------------------+------------+-------------+ 87 | | Account ID | Calls | Resource Calls | Allotments | Trunks | Per Minute | Max Postpay | 88 | | | | | | In | Out | Both | Burst | | | 89 | +==================================+=======+================+============+==========================+============+=============+ 90 | | 35822499eedbed49facb241a2f12ba5b | -1 | -1 | 0 | 0 | 0 | -1 | 0 | 0.0 | disabled | 91 | +----------------------------------+-------+----------------+------------+--------------------------+------------+-------------+ 92 | | d4ef4d857be41bcaaf6cae02dc50fbd6 | -1 | -1 | 0 | 0 | 0 | -1 | 0 | 111.11 | disabled | 93 | +----------------------------------+-------+----------------+------------+--------------------------+------------+-------------+ 94 | [root@k src]# sup jonny5_maintenance authz_summary 95 | +----------------------------------+-------+----------------+------------+----------------+-----------------+------------+ 96 | | Account ID | Calls | Resource Calls | Allotments | Inbound Trunks | Outbound Trunks | Per Minute | 97 | +==================================+=======+================+============+================+=================+============+ 98 | | d4ef4d857be41bcaaf6cae02dc50fbd6 | 1 | 1 | 0 | 0 | 1 | 0 | 99 | +----------------------------------+-------+----------------+------------+----------------+-----------------+------------+ 100 | | 35822499eedbed49facb241a2f12ba5b | 1 | 1 | 0 | 0 | 1 | 0 | 101 | +----------------------------------+-------+----------------+------------+----------------+-----------------+------------+ 102 | 103 | ``` 104 | 105 | * Call ended, switch quiet again 106 | 107 | ``` 108 | 109 | [root@k src]# sup jonny5_maintenance limits_summary 110 | +----------------------------------+-------+----------------+------------+--------------------------+------------+-------------+ 111 | | Account ID | Calls | Resource Calls | Allotments | Trunks | Per Minute | Max Postpay | 112 | | | | | | In | Out | Both | Burst | | | 113 | +==================================+=======+================+============+==========================+============+=============+ 114 | | 35822499eedbed49facb241a2f12ba5b | -1 | -1 | 0 | 0 | 0 | -1 | 0 | 0.0 | disabled | 115 | +----------------------------------+-------+----------------+------------+--------------------------+------------+-------------+ 116 | | d4ef4d857be41bcaaf6cae02dc50fbd6 | -1 | -1 | 0 | 0 | 0 | -1 | 0 | 111.11 | disabled | 117 | +----------------------------------+-------+----------------+------------+--------------------------+------------+-------------+ 118 | [root@k src]# sup jonny5_maintenance authz_summary 119 | no channels found 120 | 121 | 122 | ``` 123 | 124 | ``` 125 | [root@k src]# sup jonny5_maintenance limits_details 35822499eedbed49facb241a2f12ba5b 126 | Account Info: 127 | Account ID : 35822499eedbed49facb241a2f12ba5b 128 | Account DB : account%2F35%2F82%2F2499eedbed49facb241a2f12ba5b 129 | Current Balance : 0.0 130 | Configuration: 131 | Enabled : true 132 | Prepay Allowed : true 133 | Postpay Allowed : false 134 | Max Postpay Amount : 0.0 135 | Reserve Amount : 0.5 136 | Soft Limit Inbound : false 137 | Soft Limit Outbound : false 138 | Limits: 139 | Calls Hard Limit : -1 140 | Resources Hard Limit : -1 141 | Inbound Trunks : 0 142 | Bundled Inbound Trunks : 0 143 | Outbound Trunks : 0 144 | Bundled Outbound Trunks: 0 145 | Twoway Trunks : -1 146 | Bundled Twoway Trunks : 0 147 | Allotments: 148 | -none- 149 | ``` 150 | -------------------------------------------------------------------------------- /selling_services/rating.md: -------------------------------------------------------------------------------- 1 | # Rating calls 2 | * Hotornot plus Jonny5 3 | 4 | 5 | * activate prepaid or postpaid billing 6 | 7 | # jonny5 doc example (this would exist within each account) 8 | ``` 9 | · { 10 | · "_id": "jonny5", 11 | · "_rev": "13-8935836403cf7ad7adace4124931cf39", 12 | · "default": { 13 | · "default_enabled": true, 14 | · "default_calls": -1, 15 | · "default_resource_consuming_calls": -1, 16 | · "default_inbound_trunks": 0, 17 | · "default_outbound_trunks": 0, 18 | · "default_twoway_trunks": -1, 19 | · "default_burst_trunks": 0, 20 | · "default_max_postpay_amount": 0, 21 | · "default_reserve_amount": 0.5, 22 | "default_allow_prepay": true, 23 | · "default_allow_postpay": false, 24 | · "default_soft_limit_inbound": false, 25 | · "default_soft_limit_outbound": false 26 | · } 27 | · } 28 | ``` 29 | 30 | # Limits doc (per account) 31 | ``` 32 | · { 33 | · "_id": "limits", 34 | · "_rev": "3-c5e7e82ae4f9aeca8676e82ab3067201", 35 | · "pvt_account_db": "account%2Ffd%2F71%2F3ef5cad939bc7f204a14cbf4541a", 36 | · "pvt_account_id": "fd713ef5cad939bc7f204a14cbf4541a", 37 | · "pvt_type": "limits", 38 | · "inbound_trunks": 0, 39 | · "twoway_trunks": 1, 40 | · "allow_prepay": true, 41 | · "pvt_created": 63569818616, 42 | · "pvt_modified": 63569818616, 43 | · "pvt_vsn": 1 44 | · } 45 | 46 | ``` 47 | 48 | # Make a ratedeck.. 49 | ``` 50 | · { 51 | · "_id": "US-1", 52 | · "_rev": "1-580637de86ca66ee85d0adec14124bcb", 53 | · "direction": [ 54 | · "inbound", 55 | · "outbound" 56 | · ], 57 | · "pvt_internal_rate_cost": "0.01", 58 | · "iso_country_code": "US", 59 | · "options": [ 60 | · ], 61 | · "prefix": "1", 62 | · "rate_cost": "0.02", 63 | · "rate_increment": 60, 64 | · "rate_minimum": 60, 65 | · "rate_name": "US-1", 66 | · "rate_surcharge": "0.00", 67 | · "routes": [ 68 | · "^0111(\\d{10})$", 69 | · "^\\+1(\\d{10})$" 70 | · ], 71 | · "pvt_type": "rate" 72 | · } 73 | ``` 74 | 75 | 76 | # Example 77 | ``` 78 | [root@sip.stormqloud.ca]# sup hotornot_maintenance rates_for_did +1234567890 79 | Candidates: 80 | RATE NAME | COST | INCREMENT | MINIMUM | SURCHARGE | WEIGHT | PREFIX | 81 | NA-1 | 0.01 | 60 | 60 | 0.0 | 9 | 1 | 82 | Matching: 83 | RATE NAME | COST | INCREMENT | MINIMUM | SURCHARGE | WEIGHT | PREFIX | 84 | * NA-1 | 0.01 | 60 | 60 | 0.0 | 9 | 1 | 85 | ok 86 | ``` 87 | -------------------------------------------------------------------------------- /selling_services/resellers.md: -------------------------------------------------------------------------------- 1 | #Resellers 2 | 3 | ##Reseller Accounts 4 | * Annoint an account Reseller Status 5 | * sup whistle_services_maintenance make_reseller `` 6 | * sup whistle_services_maintenance demote_reseller `` 7 | * sup wh_services find_reseller_id `` 8 | * sup wh_services is_reseller `` 9 | 10 | * Flush all cached docs for all accounts: 11 | * sup couch_mgr flush_cache_docs 12 | * Flush all cached docs for a specific account: 13 | * sup couch_mgr flush_cache_docs `account%2Fab%2Fcd%2Fefghi` 14 | * sup couch_mgr flush_cache_docs accounts 15 | 16 | * If you want to make a sub account use the resellers carriers do something like this for their "no_match" callflow 17 | * This must be done inside couchdb directly. No idea how to accomplish otherwise. 18 | * The account_id is that of the reseller above the account you are changing. 19 | * reload.. 20 | 21 | ``` 22 | "flow": { 23 | "data": { 24 | "hunt_account_id": "d99df1f8c41b9b9e333b1383f2e971f5" 25 | }, 26 | "module": "resources", 27 | "children": { 28 | } 29 | }, 30 | ``` 31 | 32 | -------------------------------------------------------------------------------- /servers.md: -------------------------------------------------------------------------------- 1 | # Servers 2 | 3 | ## How many Kazoo servers do I really need? 4 | 5 | * To be redundant everythign needs to be have two copies minimum 6 | * couchdb requires three copies to sort out redundancy and replication 7 | 8 | * Ergo Kazoo requires a *minimum* of 3 servers to be redundant. 9 | 10 | * Consider seperating your SIP control plane from your RTP. 11 | * Put Freeswitch on it's own servers, don't run other Kazoo services on these servers 12 | * RTP makes your QOS 13 | * SIP makes your ASR, PDD etc 14 | 15 | * In this way you can reboot ecallmanager stuff for example without interferring with ongoing calls. 16 | * Kazoo *rarely* (they do do it..) update freeswitch itself. 17 | * Freeswitch speaks directly to AMPQ, the config files are static. 18 | 19 | http://stormqloud.ca 20 | -------------------------------------------------------------------------------- /service_plans.md: -------------------------------------------------------------------------------- 1 | # Service Plans. 2 | 3 | # Reworking in different directory.. 4 | ### https://github.com/stormqloud/kazoo-tgbbok/tree/master/selling_services 5 | 6 | ## This is not cleaned up yet and getting old. 7 | ## Specifically, some new service plan code has been committed to the tree in 3.19+ 8 | ## Check back soon, I will be updating this section as I dig through the code and test.. 9 | ## stormqloud.ca 10 | 11 | * The information is mostly taken from this link written by "cando" for 3.08 or the 2600hz documents. 12 | * https://docs.google.com/document/d/1--LCpmRXG4iCYUNcLvMPzt6kQztw12O3BsAoI39jguo/edit 13 | * https://2600hz.atlassian.net/wiki/display/Dedicated/Service+Plans 14 | 15 | * Other useful links 16 | * https://github.com/2600hz/kazoo/tree/master/core/whistle_services-1.0.0/priv 17 | * http://pastebin.com/wSD89nFD 18 | 19 | ## Prerequisites 20 | * Jonny5 (limits) Also called j5 21 | * HotOrNot (per-minute rating with rate deck - recommended) 22 | * BrainTree https://www.braintreepayments.com (Credit card processing) 23 | 24 | ## Possible code changes needed depending on your use case 25 | * If you add numbers from a carrier not using the buy number method your number will be set as “local” carrier. The erlang code for that carrier definition returns false when requested if the number is billable. So it doesn’t get counted in the services for the account. If you want them billed you just need to make 1 change. 26 | * In /opt/kazoo/core/whistle_number_manager-1.0.0/src/carriers/wnm_local.erl 27 | * change 28 | * is_number_billable(_Number) -> 'false'. 29 | * to 30 | * is_number_billable(_Number) -> 'true'. 31 | * re-compile: (cd /opt/kazoo/core/whistle_number_manager-1.0.0/ ; make) 32 | * restart kz-whistle_apps 33 | 34 | # Set account(s) as reseller per your needs. 35 | * There is only ONE Braintree account for entire system. 36 | * You cannot have different accoutns or resellers use different Braintree accounts. 37 | 38 | # Road map 39 | * Abstracted braintree logic to bookkeeper to support other billing connections like quickbooks, freshbooks... 40 | * resellers can have their own bookkeeper config/account for trickle down. (eg: customer adds money to their per-minute balance and money goes to reseller’s bank account. Reseller per-minute (local) balance is not affected) 41 | 42 | ## Setting an account as a reseller. 43 | * All sub accounts of it will set it as their reseller 44 | * sup whistle_services_maintenance make_reseller 45 | *If you need to demote an account from being a reseller: 46 | * sup whistle_services_maintenance demote_reseller 47 | 48 | ## Create Reseller service plan(s) 49 | * Important notes about phone_numbers, IE: inbound assigned DIDs. 50 | * The identifiers under phone_numbers, ex “did_us”, are derived from the classification of numbers, the same as what is used for restriction of outbound calls. So be sure classifications cover the numbers you are selling. They are also used for j5 allotments. There can be overlap of classification definition but only the first match is used in each system. So careful planning is essential. 51 | * http://db.fqdn:15984/_utils/document.html?system_config/number_manager 52 | * The reseller (pvt_reseller_id) for an account is found in the doc in the services db with the _id the same as the account_id. db.myfqdn:15984/_utils/document.html?services/ 53 | * If pvt_account_id is the same as pvt_reseller_id, they are their own reseller. 54 | * Service plan(s) available for an account go in the reseller’s account DB as a new document 55 | with "pvt_type": "service_plan" 56 | * good to make the _id for the doc be descriptive (eg: mycompany_default_plan ) rather than a uuid 57 | * Samples from: /op/kazoo/core/whistle_services-1.0.0/priv/example_service_plan_[12].json 58 | 59 | ## Set a default service plan for a Reseller 60 | * Open the reseller’s services/ doc 61 | * add a new field: 62 | * "default_service_plan" 63 | * Set the value to the resellers service plan you want to be assigned to new sub accounts of the reseller. 64 | * Setup Braintree account service plans 65 | * Create Add-ons and discounts for all entries in the kazoo service plan. 66 | * For example, from the example_service_plan_1.json, under the bookkeepers->braintree section you have phone_numbers->did_us you would create in your braintree account an Add-on with the ID “did_ud” for the “addon”: “did_us” and create in your braintree account a discount with the ID “discount_did_us” for the “discounts”: { “cumulative”: “discount_did_us”}. 67 | * When you’re creating the Add-on and Discount in your braintree account, the name and description may be seen by the customer may be seen by the billed customer depending on how you configure to bill/charge/notify them but the amount doesn’t matter. Kazoo will send the amount and override the value you put in here. 68 | * Be sure to create Add-ons and Discounts in your Braintree account for every “addon” and “discount” entry in the braintree section of the service plan 69 | * Create a Recurring Billing Plan in your braintree account. 70 | * The Plan ID should match the “plan” name used in the braintree section of the kazoo service plan. 71 | * From the plan in the example json file ("plan": "SIP_Services") the Plan ID would be "SIP_Services". 72 | 73 | ##P lan Price. 74 | * I don’t know if kazoo can or does sends the Price of the plan. Test for yourself and update here. :) 75 | * Assign Add-ons and Discounts to the service plan you just created in your braintree account. 76 | * SAVE :) 77 | * User API to create the plan 78 | 79 | ## Assign Service Plan to Account 80 | * HTTP POST something like this to link the plan and account 81 | * http://server:8000/v2/accounts/{{ACCOUNT_ID}}/service_plans/{{PLAN_ID}} 82 | 83 | 84 | * db.fqdn:15984/_utils/document.html?services/ 85 | * example: /opt/kazoo/core/whistle_services-1.0.0/priv/example_account_services.json 86 | * for end customers pvt_reseller: false 87 | * pvt_reseller_id -> probably parent account 88 | * billing_id -> most cases the customer’s account id 89 | * plans 90 | * match the _id of the plan created (eg: mycompany_default_plan) created above 91 | * account_id -> match the value for pvt_reseller_id 92 | * db.myfqdn:15984/_utils/document.html?system_config/services 93 | 94 | ## To activate service plan billing. 95 | * for testing probably use frequent checks and syncs: 96 | ``` 97 | { "_id": "services", 98 | "_rev": "", 99 | "default": { 100 | "sync_services": true, 101 | "sync_buffer_period": 60, 102 | "scan_rate": 20000, 103 | "master_account_bookkeeper": "wh_bookkeeper_braintree" 104 | } } 105 | ``` 106 | 107 | # For production probably set 108 | * "scan_rate": 60000 -> check for service changes to sync every 60 sec. 109 | * "sync_buffer_period": 600 -> wait 10 min (600 sec) after the last change to an account’s services doc before syncing/updating the service plan (subscription) on braintree 110 | * save the doc 111 | * start services 112 | * sup whapps_controller start_app whistle_services 113 | * add whistle_services to db.myfqdn:15984/_utils/document.html?system_config/whapps_controller 114 | * sync/re-process an account 115 | * good for when a plan changed or configured an account to use a plan. 116 | * sup whistle_services_maintenance sync 117 | 118 | ## Account TOP UP - Add money to account 119 | * https://github.com/2600hz/kazoo/blob/master/core/whistle_transactions-1.0.0/doc/top_up.md 120 | 121 | -------------------------------------------------------------------------------- /sup.md: -------------------------------------------------------------------------------- 1 | #SUP 2 | 3 | * The "SUP" command is used to interact with the Erlang server at a very low level for Kazoo. 4 | * 99% of the functions you want are available in the HTTP REST API [ie not here] 5 | * The REST API makes mutilple Erlang calls for each HTTP transactation.. 6 | * The REST to Erlang process is "Crossbar". 7 | * Erlang web server that then makes more Erlang calls. 8 | * Ok, you probably missed it, 9 | * This is "long tail" enformation, you probably are looking for 10 | * https://github.com/2600hz/kazoo/tree/master/applications/crossbar/doc 11 | 12 | ## Help 13 | * You need to understand what the SUP command does.. 14 | * The sup command allows you to call Erlang (procedures?) from the unix cli 15 | * You can interact with running code like POST/GET to the REST API with sup 16 | * SUP lets you bypass the "crossbar" level for simple calls. 17 | * crossbar among other things converts HTTP REST calls to Erlang calls. 18 | 19 | * Here is the master list if you want just that.. 20 | * This is not complete 21 | * Also installs for you bash autocomplete for these commands. 22 | * https://github.com/stormqloud/kazoo-tgbbok/blob/master/sup_commands 23 | * whapps_controller are missing from this list.. 24 | 25 | There are too many sup commands listed in too many places so far... The super ingenius will know how to scan the Erlang source code to sniff out their own sup commands. 26 | 27 | It is almost impossible to define all the sup commands. The best way would be to write a script to parse the Erlang source. 28 | 29 | * Update: Somebody made such a script.. 30 | * https://github.com/2600hz/kazoo/pull/1062 31 | * 32 | 33 | Read below for discovering your own sup command and you should understand why. 34 | 35 | This list is for the mere mortals but mostly me. Things may appear multiple times under different categories. 36 | 37 | Mostly it's stolen from https://2600hz.atlassian.net/wiki/display/Dedicated/How+to+use+the+SUP+command with additions I find around the net or needed myself. 38 | 39 | The sup command is an almost limitless since it passes values directly to Erlang 40 | functions running out in VM land. 41 | 42 | sup lives in `/opt/kazoo/utils/sup/sup` on most installations. You might need to prefix your commands with that 43 | or add that path into your unix shell. 44 | 45 | ie: if you have problems substitute 46 | `sup` 47 | for 48 | `/opt/kazoo/utils/sup/sup` 49 | 50 | 51 | #### Remote hosts 52 | 53 | Everything except this part assumes you are running the `sup` command on the same host as the the Erlang VM you want to talk to. 54 | 55 | For example this is a local command that operates on localhost 56 | * `sup whapps_controller restart_app crossbar` 57 | 58 | This is the same command operating on a remote host 59 | * `sup -h www.stormqloud.ca -c erlang_token whapps_controller restart_app crossbar` 60 | 61 | Of course you need to change the -h and the -c values. 62 | 63 | Try `sup --help` for more options. 64 | 65 | ##Flushing: 66 | 67 | Probably the first thing you need from sup are the various cache flushing. When you are developing or playing better to do all these every time.. 68 | 69 | Depeding on your unix experience you might want to run everything thrice. 70 | http://utcc.utoronto.ca/~cks/space/blog/unix/TheLegendOfSync 71 | 72 | It's probably not safe to do this on a super busy production cluster. However, if you run a super busy production cluster, you arn't reading this. 73 | 74 | * Flush all cached docs for all accounts: 75 | * sup couch_mgr flush_cache_docs 76 | * sup -necallmgr ecallmgr_maintenance flush_acls 77 | * sup stepswitch_maintenance reload_resources 78 | * sup whapps_config flush 79 | 80 | 81 | ##Reseller Accounts 82 | * Annoint an account Reseller Status 83 | * sup whistle_services_maintenance make_reseller `` 84 | * sup whistle_services_maintenance demote_reseller `` 85 | * sup wh_services find_reseller_id `` 86 | * sup wh_services is_reseller `` 87 | 88 | * Flush all cached docs for all accounts: 89 | * sup couch_mgr flush_cache_docs 90 | * Flush all cached docs for a specific account: 91 | * sup couch_mgr flush_cache_docs `account%2Fab%2Fcd%2Fefghi` 92 | * sup couch_mgr flush_cache_docs accounts 93 | 94 | 95 | ##Logging 96 | 97 | * Increase the log level for whapps to *max*: 98 | * sup whistle_maintenance syslog_level debug 99 | * Increase the log level for ecallmgr to *max*: 100 | * sup -n ecallmgr whistle_maintenance syslog_level debug 101 | 102 | You can use any of the syslog severity levels (in order) to change what is logged. 103 | 104 | * emerg,alert,crit,err,warn,notice,info,debug 105 | 106 | * To turn off all logging use 107 | * sup -n ecallmgr whistle_maintenance syslog_level emerg 108 | 109 | If you want permanent changes look in `/etc/kazoo/config.ini` 110 | 111 | ## Monthly 112 | 113 | * sup kazoo_modb_maintenance verify_rollups 114 | 115 | ## Notify 116 | ``` 117 | sup notify_maintenance configure_smtp_relay my.relay.com 118 | sup notify_maintenance configure_smtp_username username 119 | sup notify_maintenance configure_smtp_password password 120 | sup notify_maintenance configure_smtp_auth always 121 | sup notify_maintenance configure_smtp_port 123 122 | ``` 123 | 124 | ## ecallmgr 125 | * sup ecallmgr_maintenance channel_summary 126 | * sup ecallmgr_maintenance channel_detail 127 | * sup ecallmgr_maintenance flush_authn 128 | * sup ecallmgr_maintenance flush_util 129 | * sup ecallmgr_maintenance enable_authz 130 | * sup ecallmgr_maintenance registrar_details 131 | * sup ecallmgr_maintenance registrar_summary 132 | * sup ecallmgr_maintenance carrier_acls 133 | 134 | ## amqp 135 | sup whistle_amqp_maintenance broker_summary 136 | 137 | ## whapps_account_config 138 | * sup whapps_account_config set `` media default_language fr-ca 139 | 140 | ## whapps_maintenance 141 | * sup whapps_maintenance migrate 142 | * sup whapps_maintenance refresh 143 | * sup whapps_maintenance refresh system_schemas (covered by above?) 144 | * sup whapps_maintenance blocking_refresh 145 | * sup whapps_maintenance sup kazoo_modb_maintenance verify_rollups 146 | * sup whapps_maintenance find_invalid_acccount_dbs 147 | * sup whapps_maintenance ensure_aggregate_devices 148 | * sup whapps_maintenance get_all_account_views 149 | 150 | ## whapps_controller 151 | * sup whapps_controller running_apps 152 | * sup whapps_controller restart_app conference 153 | 154 | ## whistle_media_maintenance 155 | * sup whistle_media_maintenance refresh 156 | * sup whistle_media_maintenance set_account_language `` fr-ca 157 | 158 | ## whistle_number_manager (wnm) 159 | * sup whistle_number_manager_maintenance reconcile_accounts 160 | * sup whistle_number_manager_maintenance reconcile_numbers 161 | * sup whistle_number_manager_maintenance reconcile_providers 162 | 163 | ## whistle_services 164 | * sup whistle_services_maintenance credit account_id amount 165 | * sup whistle_services_maintenance debit account_id amount 166 | 167 | # crossbar 168 | * sup whapps_controller restart_app crossbar 169 | * sup crossbar_maintenance start_module cb_braintree 170 | * sup crossbar_maintenance find_account_by_number 5149072508 171 | * sup crossbar_maintenance running_modules 172 | * sup crossbar_maintenance allow_account_number_additions `` 173 | * sup crossbar_maintenance init_apps '/var/www/html/monster-ui/apps' 'http://sip.stormqloud.ca:8000/v2' 174 | 175 | ##Whapps 176 | /opt/kazoo/utils/sup/sup whapps_config get whapps_controller whapps 177 | * Get the currently running whapps: 178 | * /opt/kazoo/utils/sup/sup whapps_controller running_apps 179 | * Get list of freeswitch nodes that ecallmgr is configured to connect to:: 180 | * /opt/kazoo/utils/sup/sup -n ecallmgr ecallmgr_config get fs_nodes 181 | * Get list of freeswitch nodes that ecallmgr is connected to: 182 | * /opt/kazoo/utils/sup/sup -n ecallmgr ecallmgr_maintenance list_fs_nodes 183 | * Restart a whapp on a remote host: 184 | * /opt/kazoo/utils/sup/sup -h apps002-dev-vb.2600hz.com -c change_me whapps_controller restart_app crossbar 185 | * Check the running whapps on a remote host: 186 | * /opt/kazoo/utils/sup/sup -h apps002-dev-vb.2600hz.com -c change_me whapps_controller running_apps 187 | * Check which amqp host this server is connected to: 188 | * /opt/kazoo/utils/sup/sup amqp_mgr get_host 189 | * Flush the whapps_config cache: (in case you modified some settings such as FS nodes) 190 | * /opt/kazoo/utils/sup/sup whapps_config flush 191 | * You can also use this command for any document in the system_config database, for example: 192 | * /opt/kazoo/utils/sup/sup whapps_config flush number_manager 193 | * Flush the ecallmgr_config cache: (in case you modified some settings such as FS nodes) 194 | * /opt/kazoo/utils/sup/sup -n ecallmgr ecallmgr_config flush 195 | * Add FS nodes to ecallmgr: 196 | This command adds a FreeSWITCH node to the currently running ecallmgr, but it does not update the persistent configuration. 197 | * /opt/kazoo/utils/sup/sup -n ecallmgr ecallmgr_maintenance add_fs_node freeswitch@hostname.mydomain.com 198 | * Migrate (update) database documents: 199 | * /opt/kazoo/utils/sup/sup -t 3600 whapps_maintenance migrate 200 | * Flush whistle_apps couch cache: 201 | * /opt/kazoo/utils/sup/sup whistle_couch_maintenance flush 202 | * Restart conference whapp 203 | * /opt/kazoo/utils/sup/sup whapps_controller restart_app conference 204 | * Stop the whistle_apps erlang VM 205 | * /opt/kazoo/utils/sup/sup erlang halt 206 | * or 207 | * /opt/kazoo/utils/sup/sup -n whistle_apps erlang halt 208 | * Stop the ecallmgr erlang VM 209 | * /opt/kazoo/utils/sup/sup -n ecallmgr erlang halt 210 | 211 | * Alias the sup command: (for the user you are logged as) 212 | * /opt/kazoo/utils/sup/add_alias.sh 213 | 214 | * Lookup an account via the realm: 215 | * /opt/kazoo/utils/sup/sup crossbar_maintenance find_account_by_realm 83a99b.sip.mydomain.com 216 | * Lookup an account via the phone number: 217 | * /opt/kazoo/utils/sup/sup crossbar_maintenance find_account_by_number 4158867900 218 | * Find out which carrier will be used for a DID: 219 | * /opt/kazoo/utils/sup/sup stepswitch_maintenance process_number 4158867900 220 | * Flush the wh_cache (to refresh the schemas for example) 221 | * /opt/kazoo/utils/sup/sup wh_cache flush 222 | * Manually create the first account on a Kazoo system: 223 | ( change the values for ACCOUNT_NAME, REALM, USERNAME, PASSWORD) 224 | * /opt/kazoo/utils/sup/sup crossbar_maintenance create_account ACCOUNT_NAME REALM USERNAME PASSWORD 225 | * Reload stepswitch to update carriers manually: 226 | * /opt/kazoo/utils/sup/sup stepswitch_maintenance reload_resources 227 | * Reload a module: 228 | * /opt/kazoo/utils/sup/sup crossbar_maintenance start_module cb_braintree 229 | * List all crossbar running modules: 230 | * /opt/kazoo/utils/sup/sup crossbar_maintenance running_modules 231 | * List crossbar bindings: 232 | * /opt/kazoo/utils/sup/sup crossbar_bindings modules_loaded 233 | * Refresh whapps after update: 234 | * /opt/kazoo/utils/sup/sup whapps_maintenance refresh 235 | (whapps_maintenance refresh can not be done in some circumstances from the foreground, it will try to output status info to a shell that has already closed and will error. The command is valid but not via sup if the command needs to output data. Use blocking_refresh) 236 | *Blocking Refresh whapps: 237 | * /opt/kazoo/utils/sup/sup whapps_maintenance blocking_refresh 238 | 239 | * Increase the log level for whapps: 240 | * /opt/kazoo/utils/sup/sup whistle_maintenance syslog_level debug 241 | * Increase the log level for ecallmgr: 242 | * /opt/kazoo/utils/sup/sup -n ecallmgr whistle_maintenance syslog_level debug 243 | * You can use any of the syslog severity levels to change what is logged. 244 | * Show the nodes sharing the same Rabbitmq: 245 | * /opt/kazoo/utils/sup/sup whistle_maintenance nodes 246 | 247 | * Display Registrations status: 248 | * /opt/kazoo/utils/sup/sup -n ecallmgr ecallmgr_maintenance registrar_summary 249 | 250 | 251 | ##Hotornot (Call rating) 252 | 253 | * Lookup the cost to call a number 254 | * sup hotornot_maintenance rates_for_did "15149072508" 255 | ``` 256 | sup hotornot_maintenance rates_for_did +14161230000 257 | Candidates: 258 | RATE NAME | COST | INCREMENT | MINIMUM | SURCHARGE | WEIGHT | PREFIX | 259 | US-1 | 0.01 | 60 | 60 | 0.0 | 9 | 1 | 260 | Matching: 261 | RATE NAME | COST | INCREMENT | MINIMUM | SURCHARGE | WEIGHT | PREFIX | 262 | * US-1 | 0.01 | 60 | 60 | 0.0 | 9 | 1 | 263 | ok 264 | 265 | 266 | ``` 267 | * sup hotornot_maintenance rates_for_did +15149072511 268 | * sup hotornot_maintenance rates_for_did 15149072511 269 | * sup hotornot_maintenance rates_for_did 5149072511 270 | 271 | All three queries should return the same result if things are setup correctly. 272 | 273 | ## Jonny5 274 | * sup jonny5_maintenance authz_summary 275 | * sup jonny5_maintenance limits_summary 276 | * sup jonny5_maintenance flush 277 | * Known undocumented variants exist... 278 | 279 | ##Carriers 280 | * Manipulate carriers and ACLs 281 | * sup -necallmgr ecallmgr_maintenance allow_carrier CarrierName CarrierIP 282 | * sup -necallmgr ecallmgr_maintenance allow_carrier CarrierName CIDR 283 | * sup -necallmgr ecallmgr_maintenance allow_sbc SBCName SBCIP 284 | * sup -necallmgr ecallmgr_maintenance deny_carrier CarrierName CarrierIP 285 | * sup -necallmgr ecallmgr_maintenance deny_sbc SBCName SBCIP 286 | * sup -necallmgr ecallmgr_maintenance remove_acl CarrierName|SBCName 287 | * sup -necallmgr ecallmgr_maintenance carrier_acls list_acls 288 | * sup -necallmgr ecallmgr_maintenance sbc_acls list_acls 289 | * sup -necallmgr ecallmgr_maintenance reload_acls -> issues a reloadacl on all FreeSWITCH servers 290 | * sup -necallmgr ecallmgr_maintenance flush_acls -> just flushes the caches, not FreeSWITCH 291 | 292 | ####Reload stepswitch to update carriers manually: 293 | * /opt/kazoo/utils/sup/sup stepswitch_maintenance reload_resources 294 | 295 | ####Number Classifier 296 | 297 | * sup wnm_util classify_number 15149072508 298 | * sup wnm_util classify_number +15149072508 299 | * sup wnm_util classify_number 5149072508 300 | 301 | 302 | All three of these should give the same result. Just different ways of saying the same thing. 303 | 304 | ## Monitoring 305 | * sup hangups_maintenance hangups_summary 306 | * sup hangups_maintenance hangup_summary progress_timeout 307 | 308 | #### Notify.. 309 | * sup notify_account_crawler check 35822499eedbed39facb241a2f12ba5b 310 | * sup notify_account_crawler low_balance_threshold <> 311 | 312 | 313 | ####Secret SUP hiding places, Looking for your own sup commands.. 314 | 315 | SUP commands are actually a way of calling Erlang functions directly 316 | 317 | For example to tunderstand how you can find your own SUP command look at this example.. 318 | 319 | The 2 example commands are below.. 320 | 321 | `/opt/kazoo/utils/sup/sup hornot_maintenance local_summary 322 | use rates_for_did/1 to see what rates would be used for a DID 323 | ok` 324 | `/opt/kazoo/utils/sup/sup hotornot_maintenance rates_for_did "15149072511"` 325 | 326 | 327 | anything that is in erlang with export and /1 328 | 329 | 330 | [root@k6 ~]# /opt/kazoo/utils/sup/sup hotornot_maintenance local_summary 331 | use rates_for_did/1 to see what rates would be used for a DIDok 332 | [root@k6 ~]# 333 | [root@k6 ~]# 334 | [root@k6 ~]# 335 | [root@k6 ~]# 336 | [root@k6 ~]# 337 | [root@k6 ~]# /opt/kazoo/utils/sup/sup hotornot_maintenance rates_for_did "15149072511" 338 | 339 | You can find the important bit's inside the Erlang source file 340 | * kazoo/applications/hotornot/src/ hotornot_maintenance.erl 341 | * https://github.com/stormqloud/kazoo/blob/master/applications/hotornot/src/hotornot_maintenance.erl#L9-L14 342 | `-module(hotornot_maintenance). 343 | -module(hotornot_maintenance). 344 | 345 | -export([local_summary/0 346 | ,rates_for_did/1, rates_for_did/3 347 | ,rates_between/2 348 | ]). 349 | ` 350 | 351 | 352 | 353 | ## Random unsorted crap 354 | 355 | 1054 sup whistlr_maintenance nodes 356 | 1055 sup whistle_maintenance nodes 357 | 1056 sup whistle_maintenance gc_all 358 | 1057 sup whistle_maintenance etop 359 | 360 | sup omnipresence_maintenance current_subscriptions 361 | 362 | sup whistle_amqp_maintenance broker_summary 363 | -------------------------------------------------------------------------------- /sup_commands: -------------------------------------------------------------------------------- 1 | # Vaguely current as of April 2016 2 | # kazoo-tgbbok 3 | # wlloyd@stormqloud.ca 4 | 5 | # https://github.com/stormqloud/kazoo-tgbbok/blob/master/sup.md 6 | 7 | # below here comes from the output of. 8 | # This also sets you up for bash autocompletion. 9 | # Only works on 3.21+ 10 | # cd /opt/kazoo/scripts/ 11 | # ./sup-build-autocomplete.escript /etc/bash_completion.d/sup.bash /opt/kazoo > /root/sup_commands 12 | 13 | # remember this is not the exhaustive list.. 14 | 15 | sup whistle_maintenance console_level Level 16 | sup whistle_maintenance error_level Level 17 | sup whistle_maintenance etop 18 | sup whistle_maintenance gc_all 19 | sup whistle_maintenance gc_pids Ps 20 | sup whistle_maintenance gc_top_mem_consumers 21 | sup whistle_maintenance gc_top_mem_consumers N 22 | sup whistle_maintenance hotload Module 23 | sup whistle_maintenance hotload_app App 24 | sup whistle_maintenance ibrowse_cleanup 25 | sup whistle_maintenance nodes 26 | sup whistle_maintenance syslog_level Level 27 | sup whistle_maintenance top_mem_consumers 28 | sup whistle_maintenance top_mem_consumers Len 29 | sup kazoo_ips_maintenance add 30 | sup kazoo_ips_maintenance add IPAddress Zone Host 31 | sup kazoo_ips_maintenance assign 32 | sup kazoo_ips_maintenance assign IP Account 33 | sup kazoo_ips_maintenance delete 34 | sup kazoo_ips_maintenance delete IP 35 | sup kazoo_ips_maintenance refresh 36 | sup kazoo_ips_maintenance release 37 | sup kazoo_ips_maintenance release IP 38 | sup kazoo_ips_maintenance summary 39 | sup kazoo_ips_maintenance summary Host 40 | sup couch_compactor_fsm cancel_all_jobs 41 | sup couch_compactor_fsm cancel_current_job 42 | sup couch_compactor_fsm cancel_current_shard 43 | sup couch_compactor_fsm code_change _OldVsn StateName State _Extra 44 | sup couch_compactor_fsm compact 45 | sup couch_compactor_fsm compact 'compact' PLACEHOLDER 46 | sup couch_compactor_fsm compact PLACEHOLDER PLACEHOLDER 47 | sup couch_compactor_fsm compact PLACEHOLDER State 48 | sup couch_compactor_fsm compact _Msg State 49 | sup couch_compactor_fsm compact 'cancel_all_jobs' _ PLACEHOLDER 50 | sup couch_compactor_fsm compact 'cancel_current_job' _ PLACEHOLDER 51 | sup couch_compactor_fsm compact 'cancel_current_shard' _ PLACEHOLDER 52 | sup couch_compactor_fsm compact 'status' _ PLACEHOLDER 53 | sup couch_compactor_fsm compact Msg PLACEHOLDER PLACEHOLDER 54 | sup couch_compactor_fsm compact_automatically 55 | sup couch_compactor_fsm compact_automatically Boolean 56 | sup couch_compactor_fsm compact_db Db 57 | sup couch_compactor_fsm compact_db Node Db 58 | sup couch_compactor_fsm compact_db Node Db Opts 59 | sup couch_compactor_fsm compact_node Node 60 | sup couch_compactor_fsm compact_node Node Opts 61 | sup couch_compactor_fsm compact_shard Conn AdminConn S DDs 62 | sup couch_compactor_fsm current 63 | sup couch_compactor_fsm current_db 64 | sup couch_compactor_fsm current_node 65 | sup couch_compactor_fsm dbs_left 66 | sup couch_compactor_fsm handle_event _Event StateName State 67 | sup couch_compactor_fsm handle_info '$maybe_start_auto_compaction_job' CurrentState State 68 | sup couch_compactor_fsm handle_info '$maybe_start_auto_compaction_job' PLACEHOLDER State 69 | sup couch_compactor_fsm handle_info PLACEHOLDER _StateName PLACEHOLDER 70 | sup couch_compactor_fsm handle_info _Info StateName PLACEHOLDER 71 | sup couch_compactor_fsm handle_sync_event 'current' _ StateName PLACEHOLDER 72 | sup couch_compactor_fsm handle_sync_event 'dbs_left' _ StateName PLACEHOLDER 73 | sup couch_compactor_fsm handle_sync_event 'nodes_left' _ StateName PLACEHOLDER 74 | sup couch_compactor_fsm handle_sync_event _Event _From StateName State 75 | sup couch_compactor_fsm init [] 76 | sup couch_compactor_fsm is_compactor_running 77 | sup couch_compactor_fsm nodes_left 78 | sup couch_compactor_fsm ready 'compact' State 79 | sup couch_compactor_fsm ready 'next_job' PLACEHOLDER 80 | sup couch_compactor_fsm ready PLACEHOLDER State 81 | sup couch_compactor_fsm ready _Msg State 82 | sup couch_compactor_fsm ready 'cancel_all_jobs' _ PLACEHOLDER 83 | sup couch_compactor_fsm ready 'cancel_current_job' _ State 84 | sup couch_compactor_fsm ready 'cancel_current_shard' _ State 85 | sup couch_compactor_fsm ready 'status' _ PLACEHOLDER 86 | sup couch_compactor_fsm ready Msg PLACEHOLDER PLACEHOLDER 87 | sup couch_compactor_fsm rebuild_design_docs Conn D DDs 88 | sup couch_compactor_fsm start_auto_compaction 89 | sup couch_compactor_fsm start_link 90 | sup couch_compactor_fsm status 91 | sup couch_compactor_fsm stop_auto_compaction 92 | sup couch_compactor_fsm terminate _Reason _StateName _State 93 | sup couch_compactor_fsm wait PLACEHOLDER PLACEHOLDER 94 | sup couch_compactor_fsm wait _Msg State 95 | sup couch_compactor_fsm wait 'cancel_all_jobs' _ PLACEHOLDER 96 | sup couch_compactor_fsm wait 'cancel_current_job' _ PLACEHOLDER 97 | sup couch_compactor_fsm wait 'cancel_current_shard' _ State 98 | sup couch_compactor_fsm wait 'status' _ PLACEHOLDER 99 | sup couch_compactor_fsm wait Msg PLACEHOLDER PLACEHOLDER 100 | sup whistle_couch_maintenance archive Db 101 | sup whistle_couch_maintenance archive Db Filename 102 | sup whistle_couch_maintenance cancel_compaction_job 103 | sup whistle_couch_maintenance cancel_compaction_jobs 104 | sup whistle_couch_maintenance change_api_url AppName ApiUrl 105 | sup whistle_couch_maintenance change_api_url AppName ApiUrl Account 106 | sup whistle_couch_maintenance compact_all 107 | sup whistle_couch_maintenance compact_db Db 108 | sup whistle_couch_maintenance compact_db Node Db 109 | sup whistle_couch_maintenance compact_node Node 110 | sup whistle_couch_maintenance compaction_status 111 | sup whistle_couch_maintenance flush 112 | sup whistle_couch_maintenance flush Account 113 | sup whistle_couch_maintenance flush Account DocId 114 | sup whistle_couch_maintenance run_replication Host AdminPort Port TargetHost TargetPort 115 | sup whistle_couch_maintenance start_auto_compaction 116 | sup whistle_couch_maintenance stop_auto_compaction 117 | sup whistle_couch_maintenance test_admin_connection 118 | sup whistle_couch_maintenance test_connection 119 | sup kazoo_modb_maintenance archive_modbs 120 | sup kazoo_modb_maintenance archive_modbs AccountId 121 | sup kazoo_modb_maintenance delete_modbs Period 122 | sup kazoo_modb_maintenance fix_rollup Account 123 | sup kazoo_modb_maintenance rollup_account Account 124 | sup kazoo_modb_maintenance rollup_account AccountId Balance 125 | sup kazoo_modb_maintenance rollup_accounts 126 | sup kazoo_modb_maintenance verify_rollups 127 | sup kazoo_modb_maintenance verify_rollups Account 128 | sup whistle_amqp_maintenance add_broker Broker 129 | sup whistle_amqp_maintenance add_broker Broker Zone 130 | sup whistle_amqp_maintenance add_connection Broker 131 | sup whistle_amqp_maintenance add_connection Broker Zone 132 | sup whistle_amqp_maintenance broker_summary 133 | sup whistle_amqp_maintenance channel_summary 134 | sup whistle_amqp_maintenance connection_summary 135 | sup whistle_amqp_maintenance consumer_details 136 | sup whistle_amqp_maintenance consumer_details ProcessUpper 137 | sup whistle_amqp_maintenance consumer_details NodeNumber ProcessUpper ProcessLower 138 | sup whistle_amqp_maintenance primary_broker 139 | sup whistle_amqp_maintenance remove_broker Broker 140 | sup whistle_amqp_maintenance validate_assignments 141 | sup whistle_media_maintenance import_prompt Path 142 | sup whistle_media_maintenance import_prompt Path Lang 143 | sup whistle_media_maintenance import_prompts DirPath 144 | sup whistle_media_maintenance import_prompts DirPath Lang 145 | sup whistle_media_maintenance migrate 146 | sup whistle_media_maintenance migrate_prompts 147 | sup whistle_media_maintenance refresh 148 | sup whistle_media_maintenance remove_empty_media_docs AccountId 149 | sup whistle_media_maintenance set_account_language Account Language 150 | sup wnm_util are_jobjs_identical 'undefined' 'undefined' 151 | sup wnm_util are_jobjs_identical 'undefined' _ 152 | sup wnm_util are_jobjs_identical JObj1 JObj2 153 | sup wnm_util are_jobjs_identical _ 'undefined' 154 | sup wnm_util available_classifiers 155 | sup wnm_util available_classifiers 'undefined' 156 | sup wnm_util available_classifiers AccountId 157 | sup wnm_util classify_number Number 158 | sup wnm_util classify_number Num PLACEHOLDER 159 | sup wnm_util classify_number Num [PLACEHOLDER|Classifiers] 160 | sup wnm_util classify_number Num [] 161 | sup wnm_util emergency_services_configured Number PhoneNumbersJObj 162 | sup wnm_util find_account_id JObj 163 | sup wnm_util get_all_number_dbs 164 | sup wnm_util get_carrier_module JObj 165 | sup wnm_util is_1npan DID 166 | sup wnm_util is_dash_e911_configured Number PhoneNumbersJObj 167 | sup wnm_util is_e164 DID 168 | sup wnm_util is_e164 DID AccountId 169 | sup wnm_util is_npan DID 170 | sup wnm_util is_reconcilable "id" 171 | sup wnm_util is_reconcilable Number 172 | sup wnm_util is_reconcilable Number AccountId 173 | sup wnm_util is_vitelity_e911_configured Number PhoneNumbersJObj 174 | sup wnm_util list_carrier_modules 175 | sup wnm_util normalize_number Number 176 | sup wnm_util normalize_number Number 'undefined' 177 | sup wnm_util normalize_number Number AccountId 178 | sup wnm_util number_to_db_name PLACEHOLDER 179 | sup wnm_util number_to_db_name _ 180 | sup wnm_util pretty_print Number 181 | sup wnm_util pretty_print Format Number 182 | sup wnm_util to_1npan Number 183 | sup wnm_util to_e164 Number 184 | sup wnm_util to_e164 PLACEHOLDER 185 | sup wnm_util to_e164 Number 'undefined' 186 | sup wnm_util to_e164 Number PLACEHOLDER 187 | sup wnm_util to_e164 PLACEHOLDER _ 188 | sup wnm_util to_e164 Number 'undefined' _ 189 | sup wnm_util to_e164 Number AccountId 'undefined' 190 | sup wnm_util to_e164 Number AccountId DialPlan 191 | sup wnm_util to_e164 PLACEHOLDER _ _ 192 | sup wnm_util to_npan Number 193 | sup whistle_number_manager_maintenance activate_phone_number Number 194 | sup whistle_number_manager_maintenance activate_phone_number Number AccountId 195 | sup whistle_number_manager_maintenance cleanup_phone_numbers 196 | sup whistle_number_manager_maintenance cleanup_phone_numbers Account 197 | sup whistle_number_manager_maintenance create_and_activate_phone_number Number AccountId 198 | sup whistle_number_manager_maintenance create_phone_number Number 199 | sup whistle_number_manager_maintenance create_phone_number Number AccountId 200 | sup whistle_number_manager_maintenance reconcile 201 | sup whistle_number_manager_maintenance reconcile Arg 202 | sup whistle_number_manager_maintenance reconcile_accounts 203 | sup whistle_number_manager_maintenance reconcile_accounts 'all' 204 | sup whistle_number_manager_maintenance reconcile_accounts AccountId 205 | sup whistle_number_manager_maintenance reconcile_numbers 206 | sup whistle_number_manager_maintenance reconcile_numbers 'all' 207 | sup whistle_number_manager_maintenance reconcile_numbers NumberDb 208 | sup whistle_number_manager_maintenance reconcile_providers 209 | sup whistle_number_manager_maintenance refresh 210 | sup whapps_controller list_apps 211 | sup whapps_controller restart_app App 212 | sup whapps_controller running_apps 213 | sup whapps_controller running_apps Verbose 214 | sup whapps_controller start_app App 215 | sup whapps_controller start_default_apps 216 | sup whapps_controller start_link 217 | sup whapps_controller stop_app App 218 | sup whapps_maintenance blocking_refresh 219 | sup whapps_maintenance blocking_refresh Pause 220 | sup whapps_maintenance call_id_status CallId 221 | sup whapps_maintenance call_id_status CallId Verbose 222 | sup whapps_maintenance cleanup_aggregated_account Account 223 | sup whapps_maintenance cleanup_aggregated_accounts 224 | sup whapps_maintenance cleanup_aggregated_device DocId 225 | sup whapps_maintenance cleanup_aggregated_devices 226 | sup whapps_maintenance cleanup_orphan_modbs 227 | sup whapps_maintenance cleanup_voicemail_media Account 228 | sup whapps_maintenance delete_system_media_references 229 | sup whapps_maintenance ensure_aggregate_device Account 230 | sup whapps_maintenance ensure_aggregate_devices 231 | sup whapps_maintenance find_invalid_acccount_dbs 232 | sup whapps_maintenance get_all_account_views 233 | sup whapps_maintenance migrate 234 | sup whapps_maintenance migrate Pause 235 | sup whapps_maintenance migrate_limits 236 | sup whapps_maintenance migrate_limits Account 237 | sup whapps_maintenance migrate_media 238 | sup whapps_maintenance migrate_media Account 239 | sup whapps_maintenance purge_doc_type Type Account 240 | sup whapps_maintenance purge_doc_type [Type|Types] Account 241 | sup whapps_maintenance purge_doc_type [] _Account 242 | sup whapps_maintenance purge_doc_type Type Account ChunkSize 243 | sup whapps_maintenance rebuild_token_auth 244 | sup whapps_maintenance rebuild_token_auth Pause 245 | sup whapps_maintenance refresh 246 | sup whapps_maintenance refresh "accounts" 247 | sup whapps_maintenance refresh "acdc" 248 | sup whapps_maintenance refresh "anonymous_cdrs" 249 | sup whapps_maintenance refresh "cccps" 250 | sup whapps_maintenance refresh "dedicated_ips" 251 | sup whapps_maintenance refresh "faxes" 252 | sup whapps_maintenance refresh "oauth" 253 | sup whapps_maintenance refresh "offnet" 254 | sup whapps_maintenance refresh "port_requests" 255 | sup whapps_maintenance refresh "ratedeck" 256 | sup whapps_maintenance refresh "services" 257 | sup whapps_maintenance refresh "sip_auth" 258 | sup whapps_maintenance refresh "system_config" 259 | sup whapps_maintenance refresh "system_media" 260 | sup whapps_maintenance refresh "system_schemas" 261 | sup whapps_maintenance refresh "token_auth" 262 | sup whapps_maintenance refresh "webhooks" 263 | sup whapps_maintenance refresh Database 264 | sup whapps_maintenance refresh_account_db Database 265 | sup whapps_maintenance remove_aggregated_account Account 266 | sup whapps_maintenance remove_depreciated_databases 267 | sup kazoo_oauth_maintenance register_common_providers 268 | sup kazoo_oauth_maintenance register_oauth_app AccountId OAuthId EMail Secret Provider 269 | sup whapps_account_config flush Account 270 | sup whapps_account_config flush Account Config 271 | sup whapps_account_config get Account Config 272 | sup whapps_account_config get Account Config Key 273 | sup whapps_account_config get Account Config Key Default 274 | sup whapps_account_config get_global Account Category Key 275 | sup whapps_account_config get_global Account Category Key Default 276 | sup whapps_account_config set Account Config Key Value 277 | sup whapps_account_config set_global Account Category Key Value 278 | sup whapps_config flush 279 | sup whapps_config flush Category 280 | sup whapps_config flush Category Key 281 | sup whapps_config flush Category Key 'undefined' 282 | sup whapps_config flush Category Key Node 283 | sup whapps_config flush Category Keys Node 284 | sup whapps_config get Category Key 285 | sup whapps_config get Category Key Default 286 | sup whapps_config get Category Key Default 'undefined' 287 | sup whapps_config get Category Key Default Node 288 | sup whapps_config get Category Keys Default Node 289 | sup whapps_config get_all_kvs Category 290 | sup whapps_config get_atom Category Key 291 | sup whapps_config get_atom Category Key Default 292 | sup whapps_config get_atom Category Key Default Node 293 | sup whapps_config get_binary Category Key 294 | sup whapps_config get_binary Category Key Default 295 | sup whapps_config get_binary Category Key Default Node 296 | sup whapps_config get_float Category Key 297 | sup whapps_config get_float Category Key Default 298 | sup whapps_config get_float Category Key Default Node 299 | sup whapps_config get_integer Category Key 300 | sup whapps_config get_integer Category Key Default 301 | sup whapps_config get_integer Category Key Default Node 302 | sup whapps_config get_is_false Category Key 303 | sup whapps_config get_is_false Category Key Default 304 | sup whapps_config get_is_false Category Key Default Node 305 | sup whapps_config get_is_true Category Key 306 | sup whapps_config get_is_true Category Key Default 307 | sup whapps_config get_is_true Category Key Default Node 308 | sup whapps_config get_ne_binary Category Key 309 | sup whapps_config get_ne_binary Category Key Default 310 | sup whapps_config get_ne_binary Category Key Default Node 311 | sup whapps_config get_non_empty Category Key 312 | sup whapps_config get_non_empty Category Key Default 313 | sup whapps_config get_non_empty Category Key Default Node 314 | sup whapps_config get_string Category Key 315 | sup whapps_config get_string Category Key Default 316 | sup whapps_config get_string Category Key Default Node 317 | sup whapps_config is_locked 318 | sup whapps_config lock_db 319 | sup whapps_config lock_db 'false' 320 | sup whapps_config lock_db 'true' 321 | sup whapps_config lock_db Value 322 | sup whapps_config set Category Key Value 323 | sup whapps_config set Category Key Value Node 324 | sup whapps_config set_default Category Key Value 325 | sup whapps_config set_node Category Key Value Node 326 | sup whapps_config set_node Category _ _ 'undefined' 327 | sup whapps_config update_default Category Key Value 328 | sup whapps_config update_default Category Key Value Options 329 | sup whistle_transactions_maintenance disable_top_up 330 | sup whistle_transactions_maintenance enable_top_up 331 | sup whistle_services_maintenance cascade_reseller_id Reseller Account 332 | sup whistle_services_maintenance credit AccountId Amount 333 | sup whistle_services_maintenance debit AccountId Amount 334 | sup whistle_services_maintenance demote_reseller Account 335 | sup whistle_services_maintenance make_reseller Account 336 | sup whistle_services_maintenance reconcile 337 | sup whistle_services_maintenance reconcile 'all' 338 | sup whistle_services_maintenance reconcile Account 339 | sup whistle_services_maintenance refresh 340 | sup whistle_services_maintenance set_reseller_id Reseller Account 341 | sup whistle_services_maintenance sync Account 342 | sup konami_maintenance add_default_account_metaflow AccountId 343 | sup konami_maintenance add_default_metaflow 344 | sup konami_maintenance is_running 345 | sup notify_account_crawler check Account 346 | sup notify_account_crawler code_change _OldVsn State _Extra 347 | sup notify_account_crawler handle_call _Request _From State 348 | sup notify_account_crawler handle_cast _Msg State 349 | sup notify_account_crawler handle_info 'crawl_accounts' _ 350 | sup notify_account_crawler handle_info 'next_account' [Account|Accounts] 351 | sup notify_account_crawler handle_info 'next_account' [] 352 | sup notify_account_crawler handle_info _Info State 353 | sup notify_account_crawler init [] 354 | sup notify_account_crawler low_balance_threshold AccountId 355 | sup notify_account_crawler low_balance_threshold AccountJObj 356 | sup notify_account_crawler start_link 357 | sup notify_account_crawler terminate _Reason _State 358 | sup notify_maintenance check_initial_call Account 359 | sup notify_maintenance check_initial_registration Account 360 | sup notify_maintenance configure_smtp_auth Value 361 | sup notify_maintenance configure_smtp_password Value 362 | sup notify_maintenance configure_smtp_port Value 363 | sup notify_maintenance configure_smtp_relay Value 364 | sup notify_maintenance configure_smtp_username Value 365 | sup notify_maintenance refresh 366 | sup notify_maintenance refresh_template 367 | sup notify_maintenance reload_smtp_configs 368 | sup registrar_maintenance device_by_ip IP 369 | sup registrar_maintenance set_listeners Count 370 | sup crossbar_maintenance allow_account_number_additions AccountId 371 | sup crossbar_maintenance create_account Context 372 | sup crossbar_maintenance create_account AccountName Realm Username Password 373 | sup crossbar_maintenance demote_account AccountId 374 | sup crossbar_maintenance descendants_count 375 | sup crossbar_maintenance descendants_count AccountId 376 | sup crossbar_maintenance disable_account AccountId 377 | sup crossbar_maintenance disallow_account_number_additions AccountId 378 | sup crossbar_maintenance enable_account AccountId 379 | sup crossbar_maintenance find_account_by_id Id 380 | sup crossbar_maintenance find_account_by_name Name 381 | sup crossbar_maintenance find_account_by_number Number 382 | sup crossbar_maintenance find_account_by_realm Realm 383 | sup crossbar_maintenance flush 384 | sup crossbar_maintenance init_app AppPath AppUrl 385 | sup crossbar_maintenance init_apps AppsPath AppUrl 386 | sup crossbar_maintenance migrate 387 | sup crossbar_maintenance migrate Accounts 388 | sup crossbar_maintenance migrate_account_data Account 389 | sup crossbar_maintenance migrate_accounts_data 390 | sup crossbar_maintenance migrate_ring_group_callflow Account 391 | sup crossbar_maintenance move_account Account ToAccount 392 | sup crossbar_maintenance promote_account AccountId 393 | sup crossbar_maintenance refresh 394 | sup crossbar_maintenance refresh Value 395 | sup crossbar_maintenance running_modules 396 | sup crossbar_maintenance start_module Module 397 | sup crossbar_maintenance stop_module Module 398 | sup crossbar_bindings all Res 399 | sup crossbar_bindings any Res 400 | sup crossbar_bindings bind Binding Module Fun 401 | sup crossbar_bindings bind PLACEHOLDER Module Fun 402 | sup crossbar_bindings failed Res 403 | sup crossbar_bindings flush 404 | sup crossbar_bindings flush Binding 405 | sup crossbar_bindings flush_mod CBMod 406 | sup crossbar_bindings fold Routing Payload 407 | sup crossbar_bindings init 408 | sup crossbar_bindings map Routing Payload 409 | sup crossbar_bindings matches [R|Restrictions] Tokens 410 | sup crossbar_bindings matches [] _ 411 | sup crossbar_bindings modules_loaded 412 | sup crossbar_bindings succeeded Res 413 | sup cb_apps_maintenance migrate Account 414 | sup jonny5_maintenance authz_details AccountId 415 | sup jonny5_maintenance authz_details [Channel|Channels] 416 | sup jonny5_maintenance authz_details [] 417 | sup jonny5_maintenance authz_summary 418 | sup jonny5_maintenance authz_summary PLACEHOLDER 419 | sup jonny5_maintenance authz_summary [AccountId|AccountIds] 420 | sup jonny5_maintenance authz_summary [] 421 | sup jonny5_maintenance flush 422 | sup jonny5_maintenance flush_channels 423 | sup jonny5_maintenance limits_details Account 424 | sup jonny5_maintenance limits_summary 425 | sup jonny5_maintenance limits_summary AccountId 426 | sup jonny5_maintenance limits_summary [Limit|Limits] 427 | sup jonny5_maintenance limits_summary [] 428 | sup webhooks_maintenance enable_account_hooks AccountId 429 | sup webhooks_maintenance enable_descendant_hooks AccountId 430 | sup webhooks_maintenance failure_status 431 | sup webhooks_maintenance failure_status Account 432 | sup webhooks_maintenance flush_account_failures AccountId 433 | sup webhooks_maintenance flush_hook_failures AccountId HookId 434 | sup webhooks_maintenance hooks_configured 435 | sup webhooks_maintenance hooks_configured AccountId 436 | sup webhooks_maintenance reset_webhooks_list 437 | sup webhooks_maintenance set_disable_threshold Count 438 | sup webhooks_maintenance set_disable_threshold Account Count 439 | sup webhooks_maintenance set_failure_expiry Expires 440 | sup webhooks_maintenance set_failure_expiry Account Expires 441 | sup pusher_maintenance add_apple_app AppId Certfile 442 | sup pusher_maintenance add_google_app AppId Secret 443 | sup conference_maintenance blocking_refresh 444 | sup conference_maintenance refresh 445 | sup conference_maintenance refresh Account 446 | sup acdc_agent_maintenance acct_restart AcctId 447 | sup acdc_agent_maintenance acct_status AcctId 448 | sup acdc_agent_maintenance agent_restart AcctId AgentId 449 | sup acdc_agent_maintenance agent_status AcctId AgentId 450 | sup acdc_agent_maintenance status 451 | sup acdc_maintenance agent_detail AcctId AgentId 452 | sup acdc_maintenance agent_login AcctId AgentId 453 | sup acdc_maintenance agent_logout AcctId AgentId 454 | sup acdc_maintenance agent_pause AcctId AgentId 455 | sup acdc_maintenance agent_pause AcctId AgentId Timeout 456 | sup acdc_maintenance agent_presence_id AccountId AgentId 457 | sup acdc_maintenance agent_queue_login AcctId AgentId QueueId 458 | sup acdc_maintenance agent_queue_logout AcctId AgentId QueueId 459 | sup acdc_maintenance agent_resume AcctId AgentId 460 | sup acdc_maintenance agent_summary AcctId AgentId 461 | sup acdc_maintenance agents_detail 462 | sup acdc_maintenance agents_detail AcctId 463 | sup acdc_maintenance agents_summary 464 | sup acdc_maintenance agents_summary AcctId 465 | sup acdc_maintenance current_agents AccountId 466 | sup acdc_maintenance current_calls AccountId 467 | sup acdc_maintenance current_calls AccountId Props 468 | sup acdc_maintenance current_calls AccountId QueueId 469 | sup acdc_maintenance current_queues AccountId 470 | sup acdc_maintenance current_statuses AccountId 471 | sup acdc_maintenance flush_call_stat CallId 472 | sup acdc_maintenance logout_agent AccountId AgentId 473 | sup acdc_maintenance logout_agents AccountId 474 | sup acdc_maintenance migrate 475 | sup acdc_maintenance migrate_to_acdc_db 476 | sup acdc_maintenance queue_detail AcctId QueueId 477 | sup acdc_maintenance queue_restart AcctId QueueId 478 | sup acdc_maintenance queue_summary AcctId QueueId 479 | sup acdc_maintenance queues_detail 480 | sup acdc_maintenance queues_detail AcctId 481 | sup acdc_maintenance queues_restart AcctId 482 | sup acdc_maintenance queues_summary 483 | sup acdc_maintenance queues_summary AcctId 484 | sup acdc_maintenance refresh 485 | sup acdc_maintenance refresh_account Acct 486 | sup hotornot_maintenance local_summary 487 | sup hotornot_maintenance rates_between Pre Post 488 | sup hotornot_maintenance rates_for_did DID 489 | sup hotornot_maintenance rates_for_did DID Direction Opt 490 | sup hotornot_maintenance rates_for_did DID Direction RouteOptions 491 | sup ecallmgr_maintenance acl_summary 492 | sup ecallmgr_maintenance acl_summary 'false' 493 | sup ecallmgr_maintenance acl_summary 'true' 494 | sup ecallmgr_maintenance acl_summary AsDefault 495 | sup ecallmgr_maintenance add_fs_node FSNode 496 | sup ecallmgr_maintenance add_fs_node FSNode 'false' 497 | sup ecallmgr_maintenance add_fs_node FSNode 'true' 498 | sup ecallmgr_maintenance add_fs_node FSNode AsDefault 499 | sup ecallmgr_maintenance allow_carrier Name IP 500 | sup ecallmgr_maintenance allow_carrier Name IP 'false' 501 | sup ecallmgr_maintenance allow_carrier Name IP 'true' 502 | sup ecallmgr_maintenance allow_carrier Name IP AsDefault 503 | sup ecallmgr_maintenance allow_sbc Name IP 504 | sup ecallmgr_maintenance allow_sbc Name IP 'false' 505 | sup ecallmgr_maintenance allow_sbc Name IP 'true' 506 | sup ecallmgr_maintenance allow_sbc Name IP AsDefault 507 | sup ecallmgr_maintenance carrier_acls 508 | sup ecallmgr_maintenance carrier_acls 'false' 509 | sup ecallmgr_maintenance carrier_acls 'true' 510 | sup ecallmgr_maintenance carrier_acls AsDefault 511 | sup ecallmgr_maintenance channel_details 512 | sup ecallmgr_maintenance channel_details UUID 513 | sup ecallmgr_maintenance channel_summary 514 | sup ecallmgr_maintenance channel_summary Node 515 | sup ecallmgr_maintenance check_sync Username Realm 516 | sup ecallmgr_maintenance conference_details 517 | sup ecallmgr_maintenance conference_details UUID 518 | sup ecallmgr_maintenance conference_summary 519 | sup ecallmgr_maintenance conference_summary Node 520 | sup ecallmgr_maintenance deny_carrier Name IP 521 | sup ecallmgr_maintenance deny_carrier Name IP 'false' 522 | sup ecallmgr_maintenance deny_carrier Name IP 'true' 523 | sup ecallmgr_maintenance deny_carrier Name IP AsDefault 524 | sup ecallmgr_maintenance deny_sbc Name IP 525 | sup ecallmgr_maintenance deny_sbc Name IP 'false' 526 | sup ecallmgr_maintenance deny_sbc Name IP 'true' 527 | sup ecallmgr_maintenance deny_sbc Name IP AsDefault 528 | sup ecallmgr_maintenance disable_authz 529 | sup ecallmgr_maintenance disable_local_resource_authz 530 | sup ecallmgr_maintenance enable_authz 531 | sup ecallmgr_maintenance enable_local_resource_authz 532 | sup ecallmgr_maintenance flush_acls 533 | sup ecallmgr_maintenance flush_authn 534 | sup ecallmgr_maintenance flush_node_channels Node 535 | sup ecallmgr_maintenance flush_node_conferences Node 536 | sup ecallmgr_maintenance flush_registrar 537 | sup ecallmgr_maintenance flush_registrar Realm 538 | sup ecallmgr_maintenance flush_registrar Username Realm 539 | sup ecallmgr_maintenance flush_util 540 | sup ecallmgr_maintenance get_fs_nodes 541 | sup ecallmgr_maintenance hangup_long_running_channels 542 | sup ecallmgr_maintenance hangup_long_running_channels MaxAge 543 | sup ecallmgr_maintenance limit_channel_uptime MaxAge 544 | sup ecallmgr_maintenance limit_channel_uptime MaxAge AsDefault 545 | sup ecallmgr_maintenance list_fs_nodes 546 | sup ecallmgr_maintenance node_details 547 | sup ecallmgr_maintenance node_details NodeName 548 | sup ecallmgr_maintenance node_summary 549 | sup ecallmgr_maintenance registrar_details 550 | sup ecallmgr_maintenance registrar_details Realm 551 | sup ecallmgr_maintenance registrar_details Username Realm 552 | sup ecallmgr_maintenance registrar_summary 553 | sup ecallmgr_maintenance registrar_summary Realm 554 | sup ecallmgr_maintenance reload_acls 555 | sup ecallmgr_maintenance remove_acl Name 556 | sup ecallmgr_maintenance remove_acl Name 'false' 557 | sup ecallmgr_maintenance remove_acl Name 'true' 558 | sup ecallmgr_maintenance remove_acl Name AsDefault 559 | sup ecallmgr_maintenance remove_fs_node FSNode 560 | sup ecallmgr_maintenance remove_fs_node FSNode 'false' 561 | sup ecallmgr_maintenance remove_fs_node FSNode 'true' 562 | sup ecallmgr_maintenance remove_fs_node FSNode AsDefault 563 | sup ecallmgr_maintenance sbc_acls 564 | sup ecallmgr_maintenance sbc_acls 'false' 565 | sup ecallmgr_maintenance sbc_acls 'true' 566 | sup ecallmgr_maintenance sbc_acls AsDefault 567 | sup ecallmgr_maintenance show_calls 568 | sup ecallmgr_maintenance show_channels 569 | sup ecallmgr_maintenance sync_channels 570 | sup ecallmgr_maintenance sync_channels Node 571 | sup ecallmgr_maintenance sync_conferences 572 | sup ecallmgr_maintenance sync_conferences Node 573 | sup ecallmgr_maintenance test_carrier_ip IP 574 | sup ecallmgr_maintenance test_carrier_ip IP Node 575 | sup ecallmgr_maintenance test_carrier_ip IP [Node|Nodes] 576 | sup ecallmgr_maintenance test_carrier_ip _ [] 577 | sup ecallmgr_maintenance test_sbc_ip IP 578 | sup ecallmgr_maintenance test_sbc_ip IP Node 579 | sup ecallmgr_maintenance test_sbc_ip IP [Node|Nodes] 580 | sup ecallmgr_maintenance test_sbc_ip _ [] 581 | sup ecallmgr_config fetch Key 582 | sup ecallmgr_config fetch Key Default 583 | sup ecallmgr_config fetch Key Default 'undefined' 584 | sup ecallmgr_config fetch Key Default Node 585 | sup ecallmgr_config fetch Key Default PLACEHOLDER 586 | sup ecallmgr_config fetch Key Default Timeout 587 | sup ecallmgr_config fetch Key Default Node RequestTimeout 588 | sup ecallmgr_config flush 589 | sup ecallmgr_config flush Key 590 | sup ecallmgr_config flush Key 'undefined' 591 | sup ecallmgr_config flush Key Node 592 | sup ecallmgr_config flush_default 593 | sup ecallmgr_config flush_default Key 594 | sup ecallmgr_config get Key 595 | sup ecallmgr_config get Key Default 596 | sup ecallmgr_config get Key Default 'undefined' 597 | sup ecallmgr_config get Key Default Node 598 | sup ecallmgr_config get_boolean Key 599 | sup ecallmgr_config get_boolean Key Default 600 | sup ecallmgr_config get_boolean Key Default Node 601 | sup ecallmgr_config get_default Key 602 | sup ecallmgr_config get_default Key Default 603 | sup ecallmgr_config get_integer Key 604 | sup ecallmgr_config get_integer Key Default 605 | sup ecallmgr_config get_integer Key Default Node 606 | sup ecallmgr_config is_true Key 607 | sup ecallmgr_config is_true Key Default 608 | sup ecallmgr_config is_true Key Default Node 609 | sup ecallmgr_config set Key Value 610 | sup ecallmgr_config set_default Key Value 611 | sup ecallmgr_config set_node Key Value 612 | sup trunkstore_maintenance classifier_deny Classifier UserR 613 | sup trunkstore_maintenance classifier_inherit Classifier UserR 614 | sup trunkstore_maintenance clear_old_calls 615 | sup trunkstore_maintenance flush 616 | sup trunkstore_maintenance flush Account 617 | sup trunkstore_maintenance i_understand_migrate 618 | sup trunkstore_maintenance migrate 619 | sup cdr_maintenance flush 620 | sup frontier_maintenance lookup_acls Entity 621 | sup frontier_maintenance lookup_rate_limits Entity 622 | sup frontier_maintenance update_system_default Path Value 623 | sup stepswitch_maintenance cnam_flush 624 | sup stepswitch_maintenance flush 625 | sup stepswitch_maintenance lookup_number Number 626 | sup stepswitch_maintenance number_tree DID 627 | sup stepswitch_maintenance process_number Number 628 | sup stepswitch_maintenance process_number Number 'undefined' 629 | sup stepswitch_maintenance process_number Number AccountId 630 | sup stepswitch_maintenance refresh 631 | sup stepswitch_maintenance reload_resources 632 | sup stepswitch_maintenance reload_resources Account 633 | sup stepswitch_maintenance resources 634 | sup stepswitch_maintenance reverse_lookup Thing 635 | sup media_mgr_maintenance prompt_url PromptId 636 | sup media_mgr_maintenance prompt_url PromptId AccountId 637 | sup media_mgr_maintenance prompt_url PromptId AccountId Language 638 | sup doodle_maintenance check_pending_sms_for_delivery AccountId 639 | sup doodle_maintenance check_pending_sms_for_outbound_delivery AccountId 640 | sup doodle_maintenance check_sms_by_device_id AccountId DeviceId 641 | sup doodle_maintenance check_sms_by_device_id _AccountId 'undefined' 642 | sup doodle_maintenance check_sms_by_owner_id AccountId OwnerId 643 | sup doodle_maintenance check_sms_by_owner_id _AccountId 'undefined' 644 | sup doodle_maintenance flush 645 | sup doodle_maintenance send_outbound_sms To Msg 646 | sup doodle_maintenance send_outbound_sms To Msg Times 647 | sup doodle_maintenance send_outbound_sms To From RouteId Msg 648 | sup doodle_maintenance send_outbound_sms To From RouteId Msg Times 649 | sup doodle_maintenance start_check_sms_by_account AccountId JObj 650 | sup doodle_maintenance start_check_sms_by_device_id AccountId DeviceId 651 | sup doodle_maintenance start_check_sms_by_owner_id AccountId OwnerId 652 | sup hangups_maintenance account_summary AccountId 653 | sup hangups_maintenance activate_monitor AccountId HangupCause 654 | sup hangups_maintenance activate_monitors AccountId ThresholdOneMinute 655 | sup hangups_maintenance hangup_summary HangupCause 656 | sup hangups_maintenance hangup_summary HangupCause AccountId 657 | sup hangups_maintenance hangups_summary 658 | sup hangups_maintenance set_monitor_threshold HangupCause TOM 659 | sup hangups_maintenance set_monitor_threshold HangupCause ThresholdName T 660 | sup teletype_maintenance receipts 661 | sup fax_maintenance account_jobs AccountId 662 | sup fax_maintenance account_jobs AccountId State 663 | sup fax_maintenance active_jobs 664 | sup fax_maintenance faxbox_jobs FaxboxId 665 | sup fax_maintenance faxbox_jobs FaxboxId State 666 | sup fax_maintenance flush 667 | sup fax_maintenance migrate 668 | sup fax_maintenance migrate "override_existing_documents" 669 | sup fax_maintenance migrate Account 670 | sup fax_maintenance migrate [Account|Accounts] 671 | sup fax_maintenance migrate [] 672 | sup fax_maintenance migrate Account Options 673 | sup fax_maintenance migrate Accounts "override_existing_documents" 674 | sup fax_maintenance migrate Accounts Option 675 | sup fax_maintenance migrate [Account|Accounts] Options 676 | sup fax_maintenance migrate [] _ 677 | sup fax_maintenance pending_jobs 678 | sup fax_maintenance restart_job JobID 679 | sup fax_maintenance update_job JobID State 680 | sup call_inspector_maintenance callid_details CallId 681 | sup call_inspector_maintenance flush 682 | sup call_inspector_maintenance flush CallId 683 | sup call_inspector_maintenance list_active_parsers 684 | sup call_inspector_maintenance start_freeswitch_parser Filename LogIP LogPort 685 | sup call_inspector_maintenance start_hep_parser IP Port 686 | sup call_inspector_maintenance start_kamailio_parser Filename LogIP LogPort 687 | sup call_inspector_maintenance stop_active_parser Id 688 | sup callflow_maintenance account_set_classifier_deny Classifier Account 689 | sup callflow_maintenance account_set_classifier_inherit Classifier Account 690 | sup callflow_maintenance all_accounts_set_classifier_deny Classifier 691 | sup callflow_maintenance all_accounts_set_classifier_inherit Classifier 692 | sup callflow_maintenance blocking_refresh 693 | sup callflow_maintenance device_classifier_deny Classifier Uri 694 | sup callflow_maintenance device_classifier_inherit Classifier Uri 695 | sup callflow_maintenance flush 696 | sup callflow_maintenance list_account_restrictions Account 697 | sup callflow_maintenance lookup_endpoint URI 698 | sup callflow_maintenance lookup_endpoint Username Realm 699 | sup callflow_maintenance migrate_menus 700 | sup callflow_maintenance migrate_menus Account 701 | sup callflow_maintenance migrate_recorded_name Db 702 | sup callflow_maintenance migrate_recorded_names 703 | sup callflow_maintenance refresh 704 | sup callflow_maintenance refresh Account 705 | sup callflow_maintenance show_calls 706 | sup callflow_maintenance update_feature_codes 707 | sup callflow_maintenance update_feature_codes Account 708 | sup omnipresence_maintenance count_current_subscriptions 709 | sup omnipresence_maintenance current_subscriptions 710 | sup omnipresence_maintenance current_subscriptions Realm 711 | sup omnipresence_maintenance current_subscriptions Realm User 712 | sup omnipresence_maintenance list_terminated_callids 713 | sup omnipresence_maintenance reset_subscriber User 714 | sup omnipresence_maintenance reset_subscriber User Realm 715 | sup omnipresence_maintenance reset_subscription User 716 | sup omnipresence_maintenance reset_subscription User Realm 717 | sup omnipresence_maintenance send_mwi_update User New Saved 718 | sup omnipresence_maintenance subscribe Realm User 719 | -------------------------------------------------------------------------------- /sysadmin_tools.md: -------------------------------------------------------------------------------- 1 | # Useful tools 2 | 3 | ## Fabric 4 | * http://www.fabfile.org/ 5 | * Do ssh stuff on multiple machines easily and fast. 6 | * You *need* this the moment you have more then a single server install. 7 | 8 | ## ngrep 9 | * super useful to watch traffic on the network. Crafting filters is different from wireshark/tcpdump 10 | * ngrep -W byline -i eth0 'dialog-info ' 11 | * ngrep -Td lo0 port 5672 12 | 13 | ## wireshark 14 | * If you are doing VOIP you should already be using this product. VOIP is about the SIP RFC standards. 15 | Nothing better then seeing them on the wire. 16 | * you might have this installed on your Kamaillio and FreeSwitch machines 17 | * and enough resources to run it! 18 | 19 | ## SIPCAPTURE/HOMER 20 | * Capture and log SIP packets for later analysis 21 | * Hard to setup but can be very useful to see why a client got a BUSY yesterday 22 | * http://sipcapture.org/ 23 | 24 | http://stormqloud.ca 25 | -------------------------------------------------------------------------------- /timezones.md: -------------------------------------------------------------------------------- 1 | # Timezones 2 | 3 | * Timezones and log files are a very complex situation.. 4 | 5 | * All the Kazoo server itself should be setup to run in GMT (now known as UTC). 6 | * https://en.wikipedia.org/wiki/Greenwich_Mean_Time 7 | * some wankers decided to change the name to UTC 8 | * history is fun and useful 9 | 10 | 11 | * Make sure to keep your servers in sync with each other by way of NTP or similar. 12 | * Make sure not to leave your NTP ports open to amplification attack. 13 | 14 | wlloyd@stormqloud.ca 15 | -------------------------------------------------------------------------------- /troubleshooting/README.md: -------------------------------------------------------------------------------- 1 | # Some general things for when you are in trouble. 2 | 3 | * http://www.gliffy.com/publish/2853965/ 4 | 5 | * If you want to oursource your troubles and for some bizzare reason you don't use 2600hz, you can contact me at stormqloud.ca about consulting. 6 | 7 | * You can check some of the files in this directory for other issues I have run into and documented. 8 | 9 | * Run this command 10 | 11 | ``` 12 | # /opt/kazoo-scripts/kazoo-status.sh 13 | Kazoo-RabbitMQ is running [ OK ] 14 | Version: kazoo-R15B-3.19-34.el6.x86_64 15 | Kazoo-Kamailio is running [ OK ] 16 | Version: kazoo-kamailio-4.2.3-14.el6.x86_64 17 | Whistle-Apps is running [ OK ] 18 | Version: kazoo-R15B-3.19-34.el6.x86_64 19 | Ecallmgr is running [ OK ] 20 | Version: kazoo-R15B-3.19-34.el6.x86_64 21 | HTTPd is running [ OK ] 22 | Version: httpd-2.2.15-39.el6.centos.x86_64 23 | HAProxy is running [ OK ] 24 | Version: haproxy-1.5.2-2.el6.x86_64 25 | Kazoo-FreeSWITCH is running [ OK ] 26 | Version: kazoo-freeswitch-R15B-1.4.7-11.el6.x86_64 27 | Kazoo-Bigcouch is running [ OK ] 28 | Version: kazoo-bigcouch-R15B-0.4.x-1.el6.x86_64 29 | ``` 30 | -------------------------------------------------------------------------------- /troubleshooting/accounts_missing_docs.md: -------------------------------------------------------------------------------- 1 | # Possible error you might see 2 | 3 | * Notice the "500" at the end of the long line. HTTP return code that is Mochiweb throwing up. 4 | 5 | ``` 6 | [Tue, 07 Apr 2015 22:40:41 GMT] [info] [<0.15980.5>] [30a6fda5] Stacktrace: [{mochiweb_request,send,2, 7 | [{file, 8 | "src/mochiweb_request.erl"}, 9 | {line,146}]}, 10 | {couch_httpd,last_chunk,1, 11 | [{file,"src/couch_httpd.erl"}, 12 | {line,607}]}, 13 | {chttpd,handle_request,1, 14 | [{file,"src/chttpd.erl"}, 15 | {line,198}]}, 16 | {mochiweb_http,headers,5, 17 | [{file,"src/mochiweb_http.erl"}, 18 | {line,126}]}, 19 | {proc_lib,init_p_do_apply,3, 20 | [{file,"proc_lib.erl"}, 21 | {line,227}]}] 22 | [Tue, 07 Apr 2015 22:40:41 GMT] [info] [<0.15981.5>] [ca3693c2] undefined - - 'GET' /account%2F32%2Ffb%2F866ce6bae20a3ca99994507fa634-201504/_design/sms/_view/deliver_to_offnet?limit=100 500 23 | ``` 24 | -------------------------------------------------------------------------------- /troubleshooting/cookies.md: -------------------------------------------------------------------------------- 1 | # Do you have a cookie problem? 2 | -------------------------------------------------------------------------------- /troubleshooting/couchdb_cleanup.md: -------------------------------------------------------------------------------- 1 | # Couchdb cleanup.. 2 | 3 | * Remember there is no "undelete" in bigcouch. 4 | * You can visit the last revision of a document 5 | * Removing a "database" is final! 6 | 7 | * Recommended backup script 8 | * No pre-packaged otions exist 9 | * I wrote a script for my use [suggestions welcome, complaints to >/dev/null] 10 | * https://github.com/stormqloud/kazoo-tgbbok/blob/master/maintenance/daily_couchdb.sh 11 | 12 | stormqloud <__wlloyd__@prodosec.com___> 13 | -------------------------------------------------------------------------------- /troubleshooting/freeswitch.md: -------------------------------------------------------------------------------- 1 | # Troubleshoot Freeswitch server 2 | 3 | * This is only within the Kazoo context... 4 | * Say your freeswitch isn;t doing what you need. 5 | * No SIP 6 | * No RTP 7 | * Broken calls etc 8 | 9 | * Assuming Freeswitch is already running... 10 | * check what ecallmanager nodes attached to it 11 | * Ecallmgr does the attaching, freeswitch does not attach to ecallmgr! 12 | * Check the order of the results. 13 | * Make sure all Freeswitch servers have the same information IN THE SAME ORDER 14 | 15 | ``` 16 | fs_cli -x "erlang nodes list" 17 | ecallmgr@yul01.stormqloud.com (192.100.252.110) 18 | ecallmgr@yul02.stormqloud.com (192.100.252.111) 19 | ``` 20 | 21 | * Check that your Kamailio IP is currently in the ACL on this server.. 22 | * Freeswitch gets the ACL's from Ecallmgr which get tehm from couchdb->system_config->ecallmgr doc 23 | 24 | ``` 25 | [root@stormqloud_fs02 ~]# fs_cli -x "acl 192.100.252.99 authoritative" 26 | true 27 | ``` 28 | 29 | * If this fails you can also try `fs_cli -x "reloadacl"` and test again. 30 | 31 | * HAPROXY must be running on Freeswitch servers 32 | * Freeswitch pulls the needed audio files from couchdb by way of haproxy on 127.0.0.1 33 | * IVR messages, voicemails, system prompts etc 34 | 35 | stormqloud.ca 36 | -------------------------------------------------------------------------------- /troubleshooting/install.md: -------------------------------------------------------------------------------- 1 | # Installtion troubles 2 | 3 | * Really for an installation you are best to recheck your original instructions carefully to make sure you followed things properly. 4 | 5 | * 3.20 As of May 2015, make sure you are running at least this version. 6 | 7 | * 3.18 (Jan 2015) currently suffers from a showstopper install bug however. 8 | * https://2600hz.atlassian.net/browse/KAZOO-3227 9 | * Probably fixed, use a new version anyway. 10 | 11 | 12 | wlloyd@stormqloud.ca 13 | -------------------------------------------------------------------------------- /troubleshooting/languages.md: -------------------------------------------------------------------------------- 1 | # If you update the notify templates 2 | 3 | * this is the only way I found to reload the template from couchdb into kazoo.. 4 | * There must be another way, just I have not discovered. 5 | 6 | ** sup whapps_controller restart_app notify 7 | 8 | -------------------------------------------------------------------------------- /troubleshooting/passwords.md: -------------------------------------------------------------------------------- 1 | # Kazoo passwords 2 | 3 | * Any user password hash in Kazoo can be generate manaully as follows 4 | * Make sure you do this using the bash shell 5 | * You may need to use md5sum not md5 depending on unix distribution 6 | * Notice how the two values are not the same. Bash is the correct one! 7 | 8 | ``` 9 | bash-3.2$ echo $0 10 | bash 11 | bash-3.2$ echo -n "admin:foobar12and3" | md5 12 | 7aea9bb61c67caf27c21b1603b83bdcf 13 | 14 | sh-3.2$ echo $0 15 | sh 16 | sh-3.2$ echo -n "admin:foobar12and3" | md5 17 | a89c79e47ffe0988bb06eea0180a1640 18 | 19 | ``` 20 | 21 | * You lost your super duper admin user password? 22 | * Account is not used to generate the password. 23 | 24 | ``` 25 | This is the key where the password is hidden. 26 | 27 | "pvt_md5_auth": "7aea9bb61c67caf27c21b1603b83bdcf", 28 | 29 | In this example within the user couchdb document of the super user. 30 | This document will have a name something like.. 31 | 32 | http://sipcloud.stormqloud.ca:15984/_utils/document.html?account%2Fc4%2F29%2F9f9a710f4e36930c65e363c911dc/21f03403ec9b54976e45146d51fa2a68 33 | 34 | This is a made up example obviously. 35 | 36 | The key parts to look for when navigating Futon would be to find the 37 | *main top level account ID* for your Kazoo system. That's what you see above as "account%2Fc4%2F29%2F9f9a710f4e36930c65e363c911dc". 38 | 39 | "21f03403ec9b54976e45146d51fa2a68" would be the document id of the super admin user within this account. 40 | 41 | Inside that document you will find 42 | "pvt_md5_auth": "7aea9bb61c67caf27c21b1603b83bdcf", 43 | which you can manipulate as you wish 44 | 45 | 46 | ``` 47 | 48 | ** Links 49 | * https://github.com/2600hz/kazoo/blob/master/applications/crossbar/doc/user_authentication.md 50 | -------------------------------------------------------------------------------- /troubleshooting/permissions.md: -------------------------------------------------------------------------------- 1 | # Permissions issues. 2 | 3 | * Somehow I managed to mess up permissions by `yum erase` `yum install` different versions on the same server. 4 | ** my issue was really when you do yum-erase it's not a clean erase. It half fails. The user gets removed but many of the files stay around. Then you install on top with a new user.. 5 | ** Make sure you shutdown all the daemons properly before you `yum erase` 6 | ** TBD 7 | * Working kazoo installation.. 8 | ``` 9 | [root@kaz kazoo]# find / -nouser | wc 10 | find: `/proc/4241/task/4241/fd/5': No such file or directory 11 | find: `/proc/4241/task/4241/fdinfo/5': No such file or directory 12 | find: `/proc/4241/fd/5': No such file or directory 13 | find: `/proc/4241/fdinfo/5': No such file or directory 14 | 0 0 0 15 | [root@kaz kazoo]# 16 | ``` 17 | 18 | * Broken Kazoo installation like mine.. 19 | ``` 20 | [root@k6 kazoo]# find / -nouser| wc 21 | find: `/proc/4175/task/4175/fd/5': No such file or directory 22 | find: `/proc/4175/task/4175/fdinfo/5': No such file or directory 23 | find: `/proc/4175/fd/5': No such file or directory 24 | find: `/proc/4175/fdinfo/5': No such file or directory 25 | 61297 61297 5836963 26 | [root@k6 kazoo]# 27 | 28 | ``` 29 | 30 | * Thats 61297 file permissions that are assigned to non working users! 31 | 32 | * Broken Kazoo (bigcouch won;t start unless root) 33 | ``` 34 | [root@k6 kazoo]# ls -la /srv/view_index/ 35 | total 16 36 | drwxr-xr-x 4 bigcouch daemon 4096 Nov 3 19:18 . 37 | drwxr-xr-x. 4 bigcouch daemon 4096 Jan 25 17:38 .. 38 | drwxr-xr-x 2 497 daemon 4096 Jan 21 21:47 .delete 39 | drwxr-xr-x 3 497 daemon 4096 Nov 3 19:18 .shards 40 | [root@k6 kazoo]# 41 | 42 | ``` 43 | 44 | * Working Kazoo (bigcouch working..) 45 | ``` 46 | [root@kaz kazoo]# ls -la /srv/view_index/ 47 | total 16 48 | drwxr-xr-x 4 bigcouch daemon 4096 Oct 30 19:43 . 49 | drwxr-xr-x. 4 bigcouch daemon 4096 Jan 24 05:03 .. 50 | drwxr-xr-x 2 bigcouch daemon 4096 Jan 16 22:39 .delete 51 | drwxr-xr-x 3 bigcouch daemon 4096 Oct 30 19:43 .shards 52 | [root@kaz kazoo]# 53 | 54 | ``` 55 | 56 | * What is the issue? 57 | 58 | * working server 59 | ``` 60 | [root@kaz kazoo]# grep bigcouch /etc/passwd 61 | bigcouch:x:497:2::/srv:/sbin/nologin 62 | 63 | ``` 64 | 65 | * broken server 66 | ``` 67 | [root@k6 kazoo]# grep bigcouch /etc/passwd 68 | bigcouch:x:490:2::/srv:/sbin/nologin 69 | 70 | ``` 71 | 72 | 73 | * fixing on the broken server. Somethign is out of whack with the username/numbers. We can manually fix this in bulk. 74 | 75 | ``` 76 | # Make all the unknown 496 kazoo user 77 | chown --from=496 kazoo * -R / 78 | # 79 | chown --from=497 bigcouch * -R / 80 | 81 | ``` 82 | -------------------------------------------------------------------------------- /troubleshooting/sipcapture.md: -------------------------------------------------------------------------------- 1 | # SIPCAPTURE / HOMER 2 | 3 | * You need this the moment you have more then 1 machine for Kazoo. 4 | 5 | # Preferred way 6 | 7 | * yum -y groupinstall "Development Tools" 8 | * yum install -y libpcap automake expat-devel libtool git libpcap-devel file make 9 | * follow https://github.com/sipcapture/captagent 10 | 11 | # Old way 12 | * This way is a hassle, requires far more config changes... 13 | * On the plus side I'm sure it uses less CPU 14 | * Less stats, ie no jitter etc 15 | * Pollutes the regulat tcpdump when you use it 16 | 17 | * For Kazoo-Kamaillio 4.2 this is the patch you need 18 | 19 | ``` 20 | [root@kamailio]# diff -r default.cfg default.orig 21 | 205,217d204 22 | < 23 | < ############################################################# 24 | < ################## Homer addition ########################## 25 | < ############################################################# 26 | < loadmodule "siptrace.so" 27 | < # check IP and port of your capture node 28 | < modparam("siptrace", "duplicate_uri","sip:100.200.100.99:9060") 29 | < modparam("siptrace", "hep_mode_on",1) 30 | < modparam("siptrace", "trace_to_database",0) 31 | < modparam("siptrace", "trace_flag",22) 32 | < modparam("siptrace", "trace_on", 1) 33 | < ############################################################# 34 | < 35 | 221,228d207 36 | < 37 | < ############################################################# 38 | < ################## Homer addition ########################## 39 | < ### start duplicate the SIP message now for Homer Logging ### 40 | < ############################################################# 41 | < sip_trace(); 42 | < setflag(22); 43 | < 44 | 45 | ``` 46 | 47 | * Kazoo-Freeswitch 48 | 49 | ``` 50 | # diff -r sofia.conf.xml sofia.conf.xml~ 51 | 8d7 52 | < 53 | ``` 54 | 55 | ``` 56 | [root sip_profiles]# diff sipinterface_1.xml sipinterface_1.xml~ 57 | 189d188 58 | < 59 | ``` 60 | 61 | 62 | SIP trunking stormqloud.ca 63 | -------------------------------------------------------------------------------- /tts.md: -------------------------------------------------------------------------------- 1 | # TTS - Text to Speech 2 | 3 | * Good TTS (in multiple languages, multipe voices) is not free. 4 | 5 | ## Option 1: 6 | * Open source 7 | * There are open source options. 8 | * I've burned dozens of hours testing them and the results are not good. 9 | * Super double un plus good. 10 | * If you get awesome reults please contact me, even to report it! 11 | * Your time must be virtually free, or you are smarter then me. 12 | * If you are starting a business proceed to Option 2 13 | 14 | ## Option 2: 15 | * Kazoo uses an external API service [ispeech.org] when the functionality is called for. 16 | * You will need to signup for an account and pay real money(TM) and comissions. 17 | 18 | * The TTS speech quality from ispeech.org is truely awesome. 19 | * Think Star Trek Voice API. 20 | 21 | * If you buy the service and try the languages and so forth it works *really* well. 22 | * Everybody should be impressed with the TTS. 23 | 24 | * Kazoo will cache a copy of the audio stream as a wav file inside of couchdb before you ever hear it. 25 | * In general you "save money" because each IVR message is only purchased once, but used over and over. 26 | 27 | * If you need to add in a pause to the TTS enter that as ... 28 | * IF you wanted to say "Hello" (pause) "thanks for calling". 29 | * You send the TTS "Hello ... Thanks for calling". 30 | 31 | 32 | Paying ispeech solves the TTS issue. 33 | 34 | SIP trunks. 35 | 36 | www.stormqloud.ca 37 | -------------------------------------------------------------------------------- /ui.md: -------------------------------------------------------------------------------- 1 | #WTF is Kazoo-UI 2 | Production UI 3 | 4 | #WTF is Monster-UI 5 | Up and coming UI https://github.com/stormqloud/kazoo-tgbbok/blob/master/monster-ui.md 6 | 7 | ## Kazoo-UI tweaks 8 | * Extend logout 9 | * Edit ```/var/www/html/kazoo-ui/config/config.js``` 10 | * Add ``` logout_timer: '360',``` 11 | * This gives you 6 hours (ie 60*6 min) 12 | 13 | 14 | #WTF is Monster-ui 15 | Bleeding edge UI 16 | 17 | Tomato or Tomato? 18 | 19 | The reality in 2014 and early is you need to run kazoo-ui for most functionality. 20 | 21 | monster-ui is not fully baked yet but 2600hz appears to be working hard on it. 22 | 23 | * Suggest that most installions do not use ```yum update``` to track the kazoo-ui. 24 | * Remove the install package and grab your own copy of kazoo-ui directly from git. 25 | * ```yum erase kazoo-ui``` 26 | * The 2600hz supplied kazoo-ui has been compressed and the code is hard to read, and your local changes will be overwritten. It's unlikely you will be patcking the core kazoo code, however the kazoo-ui might need a patch or two for your own location. 27 | * 28 | wlloyd@stormqloud.ca 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /updating.md: -------------------------------------------------------------------------------- 1 | # Updating 2 | 3 | ## You need to decide how you will follow the main Kazoo code base. 4 | * At some point in the future you will want to upgrade. 5 | * When that happens, it's much like, "Close the stable door after the horse has bolted". 6 | * Setup Kazoo with upgrading in mind. 7 | 8 | You can tell when new yum packages are ready for Kazoo by following this site. 9 | 10 | * Short version 11 | * yum update 12 | * sup whapps_maintenance migrate 13 | * reboot (realistic..) 14 | * Long version 15 | * Follow short version, no reboot.. 16 | * Restart stuff, just *NOT* FreeSwitch or the OS itself 17 | * restart whistle apps 18 | * restart ecallmgr 19 | * restart kamaillio 20 | * restart omnipresence 21 | * Freeswitch handles calls but has no no kazoo logic, no need to disrupt calls 22 | * Things I've forgotten 23 | * You don't know what you don't know. 24 | 25 | * Check when new software updates becomes avail 26 | * http://build001-fmt.2600hz.com:8080/view/Dashboard/ 27 | 28 | * Get your YUM compatabile software updates here. 29 | * Assuming you are running CentOS, this will work for you 30 | * Dig here manually if you wish. 31 | * http://repo.2600hz.com/ 32 | * cd /etc/yum.repo.d 33 | * wget http://repo.2600hz.com/2600.repo 34 | * yum update 35 | 36 | * Kamailio builds 37 | * https://build.opensuse.org/project/show/home:lazedo:kamailio 38 | 39 | # Github 40 | * Workflow of how to maintain your own Kazoo fork on github 41 | * This is useful if you are going to check code out of github instead of yum 42 | * http://www.eqqon.com/index.php/Collaborative_Github_Workflow 43 | 44 | # Stuff you should never use 45 | 46 | * yum erase kazoo-librabbitmq-master kazoo-bigcouch-R15B kazoo-R15B kazoo-prompts kazoo-kamailio kazoo-json-c-master kazoo-freeswitch-R15B kazoo-configs 47 | * yum install kazoo-librabbitmq-master kazoo-bigcouch-R15B kazoo-R15B kazoo-prompts kazoo-kamailio kazoo-json-c-master kazoo-freeswitch-R15B kazoo-configs 48 | 49 | * chkconfig --level 2345 kz-ecallmgr off 50 | * chkconfig --level 2345 kz-whistle_apps off 51 | * chkconfig --level 2345 kamailio off 52 | * chkconfig --level 2345 freeswitch off 53 | * chkconfig --level 2345 rabbitmq-server off 54 | 55 | -------------------------------------------------------------------------------- /versions.md: -------------------------------------------------------------------------------- 1 | # Kazoo versions. 2 | 3 | * You might want to check out the information on "upgrading" as well. 4 | 5 | * Kazoo 4.0 6 | * Better than Beta 7 | * If you are new install this 8 | * If you currently run 3.22 in production, stay there for now. 9 | 10 | * Kazoo 3.x 11 | * 3.22 Spring 2016 12 | * 3.21 (fall 2015) 13 | * 3.20 (summer 2015) 14 | * 3.19 March 2015 (being retired as of May 10, 2015) 15 | * 3.18 was short lived before it 3.19 arrived 16 | * 3.16 and before are not worth starting a new install 17 | 18 | * Versions 15B, 16B, 17, 18 etc. 19 | * This refers to the version of Erlang underneath Kazoo. 20 | * As of Feb 2015 21 | * 15B is stable/running 22 | * 16B is broken 23 | * 17.5 skip 24 | * 18+ is the next target Erlang relese for Kazoo 4.0 25 | 26 | * Kamaillio 4.0 vs 4.2 27 | * Kamaillio flipped from 4.0 to 4.2 in the 3.18 to 3.19 version bump 28 | 29 | * Freeswitch 30 | * mature voip project, use the canned stuff! 31 | * No reason to maintain local changes unless you are a developer 32 | 33 | ```# rpm -qa | grep -i 'kaz\|monster' | sort``` 34 | 35 | * Monster or Kazoo-UI versions vs Kazoo versions. 36 | * These are loosely coupled.. 37 | * Having a consistent Kazoo itself is the starting point 38 | * then you can worry about your monster versions. 39 | 40 | 41 | * 3.22-63 42 | ``` 43 | kazoo-bigcouch-R15B-0.4.x-1.el6.x86_64 44 | kazoo-configs-3.22-18.el6.noarch 45 | kazoo-freeswitch-R15B-1.4.26-0.el6.x86_64 46 | kazoo-json-c-master-0.el6.x86_64 47 | kazoo-kamailio-4.3.4-8.el6.x86_64 48 | kazoo-librabbitmq-master-1.el6.x86_64 49 | kazoo-prompts-3.22-0.el6.noarch 50 | kazoo-R15B-3.22-63.el6.x86_64 51 | 52 | monster-ui-accounts-3.22-7.el6.noarch 53 | monster-ui-core-3.22-34.el6.noarch 54 | monster-ui-numbers-3.22-3.el6.noarch 55 | monster-ui-pbxs-3.22-6.el6.noarch 56 | monster-ui-voip-3.22-15.el6.noarch 57 | monster-ui-webhooks-3.22-3.el6.noarch 58 | ``` 59 | 60 | * 3.22-56 61 | ``` 62 | kazoo-bigcouch-R15B-0.4.x-1.el6.x86_64 63 | kazoo-configs-3.22-15.el6.noarch 64 | kazoo-freeswitch-R15B-1.4.26-0.el6.x86_64 65 | kazoo-json-c-master-0.el6.x86_64 66 | kazoo-kamailio-4.3.4-8.el6.x86_64 67 | kazoo-librabbitmq-master-1.el6.x86_64 68 | kazoo-prompts-3.22-0.el6.noarch 69 | kazoo-R15B-3.22-56.el6.x86_64 70 | 71 | monster-ui-accounts-3.22-7.el6.noarch 72 | monster-ui-core-3.22-26.el6.noarch 73 | monster-ui-numbers-3.22-3.el6.noarch 74 | monster-ui-pbxs-3.22-4.el6.noarch 75 | monster-ui-voip-3.22-13.el6.noarch 76 | monster-ui-webhooks-3.22-3.el6.noarch 77 | ``` 78 | 79 | * 3.22-51 80 | ``` 81 | kazoo-bigcouch-R15B-0.4.x-1.el6.x86_64 82 | kazoo-json-c-master-0.el6.x86_64 83 | kazoo-prompts-3.22-0.el6.noarch 84 | kazoo-configs-3.22-15.el6.noarch 85 | kazoo-kamailio-4.3.4-8.el6.x86_64 86 | kazoo-freeswitch-R15B-1.4.26-0.el6.x86_64 87 | kazoo-librabbitmq-master-1.el6.x86_64 88 | kazoo-R15B-3.22-51.el6.x86_64 89 | ``` 90 | 91 | * 3.22-50 92 | ``` 93 | kazoo-bigcouch-R15B-0.4.x-1.el6.x86_64 94 | kazoo-json-c-master-0.el6.x86_64 95 | kazoo-librabbitmq-master-1.el6.x86_64 96 | 97 | kazoo-prompts-3.22-0.el6.noarch 98 | kazoo-configs-3.22-15.el6.noarch 99 | kazoo-kamailio-4.3.4-8.el6.x86_64 100 | kazoo-freeswitch-R15B-1.4.26-0.el6.x86_64 101 | kazoo-R15B-3.22-50.el6.x86_64 102 | ``` 103 | 104 | * 3.22-5 composite files 105 | ``` 106 | kazoo-bigcouch-R15B-0.4.x-1.el6.x86_64 107 | kazoo-json-c-master-0.el6.x86_64 108 | kazoo-librabbitmq-master-1.el6.x86_64 109 | 110 | kazoo-prompts-3.22-0.el6.noarch 111 | kazoo-kamailio-4.3.1-5.el6.x86_64 112 | kazoo-freeswitch-R15B-1.4.23-0.el6.x86_64 113 | kazoo-configs-3.22-2.el6.noarch 114 | kazoo-R15B-3.22-5.el6.x86_64 115 | ``` 116 | 117 | * 3.21-44 composite files 118 | ``` 119 | kazoo-bigcouch-R15B-0.4.x-1.el6.x86_64 120 | kazoo-json-c-master-0.el6.x86_64 121 | kazoo-librabbitmq-master-1.el6.x86_64 122 | 123 | kazoo-prompts-3.21-1.el6.noarch 124 | kazoo-configs-3.21-4.el6.noarch 125 | kazoo-R15B-3.21-44.el6.x86_64 126 | 127 | ??kazoo-kamailio-4.2.3-16.el6.x86_64 [last 4.2.3] 128 | ??kazoo-freeswitch-R15B-1.4.15-3.el6.x86_64 129 | ``` 130 | 131 | * 3.21-36 composite files 132 | ``` 133 | kazoo-prompts-3.21-1.el6.noarch 134 | kazoo-configs-3.21-3.el6.noarch 135 | kazoo-json-c-master-0.el6.x86_64 136 | kazoo-bigcouch-R15B-0.4.x-1.el6.x86_64 137 | kazoo-librabbitmq-master-1.el6.x86_64 138 | kazoo-kamailio-4.2.3-16.el6.x86_64 139 | kazoo-R15B-3.21-36.el6.x86_64 140 | kazoo-freeswitch-R15B-1.4.15-3.el6.x86_64 141 | ``` 142 | 143 | * 3.21-33 composite files.. 144 | ``` 145 | kazoo-bigcouch-R15B-0.4.x-1.el6.x86_64 146 | kazoo-json-c-master-0.el6.x86_64 147 | kazoo-librabbitmq-master-1.el6.x86_64 148 | 149 | kazoo-prompts-3.21-1.el6.noarch 150 | kazoo-configs-3.21-3.el6.noarch 151 | kazoo-R15B-3.21-33.el6.x86_64 152 | kazoo-freeswitch-R15B-1.4.15-3.el6.x86_64 153 | kazoo-kamailio-4.2.3-16.el6.x86_64 154 | ``` 155 | 156 | * 3.20-35 composite files 157 | ``` 158 | kazoo-bigcouch-R15B-0.4.x-1.el6.x86_64 159 | kazoo-json-c-master-0.el6.x86_64 160 | kazoo-librabbitmq-master-1.el6.x86_64 161 | 162 | kazoo-prompts-3.20-0.el6.noarch 163 | kazoo-configs-3.20-4.el6.noarch 164 | 165 | kazoo-R15B-3.20-35.el6.x86_64 166 | kazoo-freeswitch-R15B-1.4.7-11.el6.x86_64 167 | kazoo-kamailio-4.2.3-16.el6.x86_64 168 | ``` 169 | 170 | * 3.20-12 composite files 171 | ``` 172 | kazoo-bigcouch-R15B-0.4.x-1.el6.x86_64 173 | kazoo-json-c-master-0.el6.x86_64 174 | kazoo-librabbitmq-master-1.el6.x86_64 175 | 176 | kazoo-prompts-3.20-0.el6.noarch 177 | kazoo-configs-3.20-3.el6.noarch 178 | 179 | kazoo-R15B-3.20-12.el6.x86_64 180 | kazoo-freeswitch-R15B-1.4.7-11.el6.x86_64 181 | kazoo-kamailio-4.2.3-16.el6.x86_64 182 | ``` 183 | 184 | * 3.22-0 composite files 185 | ``` 186 | kazoo-bigcouch-R15B-0.4.x-1.el6.x86_64 187 | kazoo-json-c-master-0.el6.x86_64 188 | kazoo-librabbitmq-master-1.el6.x86_64 189 | 190 | kazoo-prompts-3.22-0.el6.noarch 191 | kazoo-kamailio-4.3.1-5.el6.x86_64 192 | kazoo-configs-3.22-0.el6.noarch 193 | kazoo-freeswitch-R15B-1.4.23-0.el6.x86_64 194 | kazoo-R15B-3.22-0.el6.x86_64 195 | ``` 196 | 197 | stormqloud.ca 198 | -------------------------------------------------------------------------------- /versions_compare.md: -------------------------------------------------------------------------------- 1 | # Compare RPM's 2 | 3 | * This is tailored for Kazoo.. 4 | 5 | * About the only thing this is useful for is to compare RPM's of kazoo-configs 6 | * Comparing binaries is not as useful (possibly not at all) 7 | * Unlike most other things to compare RPM's on the interwebs this strategy diff's INSIDE the RPM files, not just the file name exists or not, changed yes/no. 8 | * This is useful if you want to see what a new version of Kazoo RPM will do to your current install. 9 | 10 | 11 | ``` 12 | wget http://repo.2600hz.com/Packages/Kazoo-Configs/CentOS_6/noarch/3.20/kazoo-configs-3.20-3.el6.noarch.rpm 13 | wget http://repo.2600hz.com/Packages/Kazoo-Configs/CentOS_6/noarch/3.20/kazoo-configs-3.20-4.el6.noarch.rpm 14 | wget http://repo.2600hz.com/Packages/Kazoo-Configs/CentOS_6/noarch/3.22/kazoo-configs-3.22-15.el6.noarch.rpm 15 | mkdir 3.20-3 16 | mkdir 3.20-4 17 | mkdir 3.22-15 18 | cd 3.20-3 19 | rpm2cpio ../kazoo-configs-3.20-3.el6.noarch.rpm | cpio -idmv 20 | cd ../3.20-4 21 | rpm2cpio ../kazoo-configs-3.20-4.el6.noarch.rpm | cpio -idmv 22 | cd ../3.22-15 23 | rpm2cpio ../kazoo-configs-3.22-15.el6.noarch.rpm | cpio -idmv 24 | diff -r 3.20-3 3.20-4 25 | diff -r 3.20-3 3.22-15 26 | diff -r 3.20-4 3.22-15 27 | 28 | etc 29 | 30 | ``` 31 | 32 | Enough rope to hang yourself. 33 | 34 | 35 | wlloyd@prodosec.com 36 | http://www.prodosec.com 37 | -------------------------------------------------------------------------------- /zones.md: -------------------------------------------------------------------------------- 1 | #Zones 2 | 3 | Check out federation and bigcouch documents. 4 | 5 | Kazoo zones has 2 main aspects. 6 | 7 | #bigcouch 8 | #Kazoo 9 | --------------------------------------------------------------------------------