# jambonz-feature-server [![CI](https://github.com/jambonz/jambonz-feature-server/actions/workflows/build.yml/badge.svg)](https://github.com/jambonz/jambonz-feature-server/actions/workflows/build.yml) This application implements the core feature server of the jambones platform. > Note: If you are a developer looking to work on the code please read our [how-to for that](./docs/contributing.md). ## Configuration Configuration is provided via environment variables: | variable | meaning | required?| |----------|----------|---------| |AWS_ACCESS_KEY_ID| aws access key id, used for TTS/STT as well SNS notifications|no| |AWS_REGION| aws region| no| |AWS_SECRET_ACCESS_KEY| aws secret access key, used per above|no| |AWS_SNS_TOPIC_ARN| aws sns topic arn that scale-in lifecycle notifications will be published to|no| |DRACHTIO_HOST| ip address of drachtio server (typically '127.0.0.1')|yes| |DRACHTIO_PORT| listening port of drachtio server for control connections (typically 9022)|yes| |DRACHTIO_SECRET| shared secret|yes| |ENABLE_METRICS| if 1, metrics will be generated|no| |ENCRYPTION_SECRET| secret for credential encryption(JWT_SECRET is deprecated) |yes| |GOOGLE_APPLICATION_CREDENTIALS| path to gcp service key file|yes| |HTTP_PORT| tcp port to listen on for API requests from jambonz-api-server|yes| |HTTP_IP| IP Address for API requests from jambonz-api-server |no| |JAMBONES_GATHER_EARLY_HINTS_MATCH| if true and hints are provided, gather will opportunistically review interim transcripts if possible to reduce ASR latency |no| |JAMBONES_FREESWITCH| IP:port:secret for Freeswitch server (e.g. '127.0.0.1:8021:JambonzR0ck$'|yes| |JAMBONES_LOGLEVEL| log level for application, 'info' or 'debug'|no| |JAMBONES_MYSQL_HOST| mysql host|yes| |JAMBONES_MYSQL_USER| mysql username|yes| |JAMBONES_MYSQL_PASSWORD| mysql password|yes| |JAMBONES_MYSQL_DATABASE| mysql data|yes| |JAMBONES_MYSQL_CONNECTION_LIMIT| mysql connection limit |no| |JAMBONES_NETWORK_CIDR| CIDR of private network that feature server is running in (e.g. '172.31.0.0/16')|yes| |JAMBONES_REDIS_HOST| redis host|yes| |JAMBONES_REDIS_PORT|redis port|yes| |JAMBONES_SBCS| list of IP addresses (on the internal network) of SBCs, comma-separated|yes| |STATS_HOST| ip address of metrics host (usually '127.0.0.1' since telegraf is installed locally|no| |STATS_PORT| listening port for metrics host|no| |STATS_PROTOCOL| 'tcp' or 'udp'|no| |STATS_TELEGRAF| if 1, metrics will be generated in telegraf format|no| |JAMBONZ_RECORD_WS_BASE_URL| recording websocket URL to send the recording audio|no| |JAMBONZ_RECORD_WS_USERNAME| recording websocket username|no| |JAMBONZ_RECORD_WS_PASSWORD| recording websocket password|no| |ANCHOR_MEDIA_ALWAYS| keep media on media server|no| |JAMBONZ_DISABLE_DIAL_PAI_HEADER| control P-Asserted-Identity header on B-Leg|no| ### running under pm2 Typically, this application runs under [pm2](https://pm2.io) using an [ecosystem.config.js](https://pm2.keymetrics.io/docs/usage/application-declaration/) file similar to this: ```js module.exports = { apps : [ { name: 'jambonz-feature-server', cwd: '/home/admin/apps/jambonz-feature-server', script: 'app.js', instance_var: 'INSTANCE_ID', out_file: '/home/admin/.pm2/logs/jambonz-feature-server.log', err_file: '/home/admin/.pm2/logs/jambonz-feature-server.log', exec_mode: 'fork', instances: 1, autorestart: true, watch: false, max_memory_restart: '1G', env: { NODE_ENV: 'production', GOOGLE_APPLICATION_CREDENTIALS: '/home/admin/credentials/gcp.json', AWS_ACCESS_KEY_ID: 'XXXXXXXXXXXX', AWS_SECRET_ACCESS_KEY: 'YYYYYYYYYYYYYYYYYYYYY', AWS_REGION: 'us-west-1', ENABLE_METRICS: 1, STATS_HOST: '127.0.0.1', STATS_PORT: 8125, STATS_PROTOCOL: 'tcp', STATS_TELEGRAF: 1, AWS_SNS_TOPIC_ARN: 'arn:aws:sns:us-west-1:xxxxxxxxxxx:terraform-20201107200347128600000002', JAMBONES_NETWORK_CIDR: '172.31.0.0/16', JAMBONES_MYSQL_HOST: 'aurora-cluster-jambonz.cluster-yyyyyyyyyyy.us-west-1.rds.amazonaws.com', JAMBONES_MYSQL_USER: 'admin', JAMBONES_MYSQL_PASSWORD: 'foobarbz', JAMBONES_MYSQL_DATABASE: 'jambones', JAMBONES_MYSQL_CONNECTION_LIMIT: 10, JAMBONES_REDIS_HOST: 'jambonz.zzzzzzz.0001.usw1.cache.amazonaws.com', JAMBONES_REDIS_PORT: 6379, JAMBONES_LOGLEVEL: 'debug', HTTP_PORT: 3000, DRACHTIO_HOST: '127.0.0.1', DRACHTIO_PORT: 9022, DRACHTIO_SECRET: 'sharedsecret', JAMBONES_SBCS: '172.31.32.10', JAMBONES_FREESWITCH: '127.0.0.1:8021:sharedsecret' } }] }; ``` #### Running the test suite Please [see this](./docs/contributing.md#run-the-regression-test-suite).