{"version":1,"pages":[{"id":"-MPK9mBVUtVqZNE0yJ5g","title":"MikoPBX development guide","pathname":"/mikopbx-development","siteSpaceId":"sitesp_8pixK","description":"This guide helps you to create new modules for MikoPBX and understand its internal structure."},{"id":"-MPKAexHJaevLnjgxFpm","title":"Prepare IDE and system tools","pathname":"/mikopbx-development/prepare-ide-tools","siteSpaceId":"sitesp_8pixK","description":"How to organize workspace for MikoPBX extension developement."},{"id":"5gYzahMhtNSliE8zJn06","title":"Windows","pathname":"/mikopbx-development/prepare-ide-tools/windows","siteSpaceId":"sitesp_8pixK","description":"How to organize workspace for MikoPBX extension developement.","breadcrumbs":[{"label":"Prepare IDE and system tools"}]},{"id":"fvtSHP5qcaccAkyp4sHm","title":"Linux","pathname":"/mikopbx-development/prepare-ide-tools/linux","siteSpaceId":"sitesp_8pixK","description":"How to organize workspace for MikoPBX extension developement.","breadcrumbs":[{"label":"Prepare IDE and system tools"}]},{"id":"GAyWMguyETJoONkla0SU","title":"Mac","pathname":"/mikopbx-development/prepare-ide-tools/mac","siteSpaceId":"sitesp_8pixK","description":"How to organize workspace for MikoPBX extension developement.","breadcrumbs":[{"label":"Prepare IDE and system tools"}]},{"id":"-MPKAGXyscMh5-_WFN-D","title":"How to start","pathname":"/mikopbx-development/module-developement/template-module-structure","siteSpaceId":"sitesp_8pixK","description":"Clone the module template and prepare it for development.","breadcrumbs":[{"label":"Modules developement"}]},{"id":"8uBUgmY67oWoIFqU6kQ5","title":"Module anatomy","pathname":"/mikopbx-development/module-developement/module-anatomy","siteSpaceId":"sitesp_8pixK","description":"The complete directory and file map of a MikoPBX module — every folder, the class it holds, and how the App / Lib / Worker tiers fit together.","breadcrumbs":[{"label":"Modules developement"}]},{"id":"eRMzRcdWg7L1L1v2wVPA","title":"module.json reference","pathname":"/mikopbx-development/module-developement/module-json","siteSpaceId":"sitesp_8pixK","description":"Field reference for the module.json manifest, version constraints, and how dependencies actually work in MikoPBX.","breadcrumbs":[{"label":"Modules developement"}]},{"id":"-MU4IRqInrgv30R8ROc7","title":"Data model","pathname":"/mikopbx-development/module-developement/data-model","siteSpaceId":"sitesp_8pixK","description":"Phalcon 5 models, table conventions, relationships and metadata in a MikoPBX module.","breadcrumbs":[{"label":"Modules developement"}]},{"id":"-MPKAqZFtR1BsPFfO8-Q","title":"Module installer class","pathname":"/mikopbx-development/module-developement/module-installer","siteSpaceId":"sitesp_8pixK","description":"The PbxExtensionSetup lifecycle: install, setup and uninstall an extension module.","breadcrumbs":[{"label":"Modules developement"}]},{"id":"-MPKAtDwDpP7JP-dTXBw","title":"Module main class","pathname":"/mikopbx-development/module-developement/module-class","siteSpaceId":"sitesp_8pixK","description":"The ConfigClass-based hub: features, hooks, REST API methods, and PBX core interaction.","breadcrumbs":[{"label":"Modules developement"}]},{"id":"NVDFiyWUW7f9oYJeK80Q","title":"Hooks reference","pathname":"/mikopbx-development/module-developement/hooks-reference","siteSpaceId":"sitesp_8pixK","description":"The complete verified catalog of MikoPBX module extension points (hooks): exact signatures, the interface that declares each constant, and the Core call site that fires them.","breadcrumbs":[{"label":"Modules developement"}]},{"id":"ql5CsS4ZSGkgXVDw7nYn","title":"Recipes","pathname":"/mikopbx-development/module-developement/recipes","siteSpaceId":"sitesp_8pixK","description":"Capability building blocks: the recipes that compose a MikoPBX module.","breadcrumbs":[{"label":"Modules developement"}]},{"id":"K4pjgwJO1AU0RIorcHpC","title":"Workers and background processes","pathname":"/mikopbx-development/module-developement/workers","siteSpaceId":"sitesp_8pixK","description":"Long-running background workers: Beanstalk and AMI patterns, registration and supervision via WorkerSafeScriptsCore.","breadcrumbs":[{"label":"Modules developement"}]},{"id":"-MUiIruEmyMi8oNeKLMC","title":"Module interface","pathname":"/mikopbx-development/module-developement/module-interface-empty","siteSpaceId":"sitesp_8pixK","description":"Building the admin-cabinet UI: controllers, forms, Volt views, providers and JS/CSS.","breadcrumbs":[{"label":"Modules developement"}]},{"id":"sEfxoguz03NTQsi1SoDB","title":"REST API in modules","pathname":"/mikopbx-development/module-developement/rest-api-in-modules","siteSpaceId":"sitesp_8pixK","description":"Exposing a module REST API: the modern v3 attribute-routed pattern with auto-discovered #[ApiResource] controllers, Processor + Action classes, and a DataStructure single source of truth that drives O","breadcrumbs":[{"label":"Modules developement"}]},{"id":"-MU4IH3uQmWJ3_7IUA2E","title":"Translations","pathname":"/mikopbx-development/module-developement/translations","siteSpaceId":"sitesp_8pixK","description":"Module localization: Messages files and the 29-language translation workflow.","breadcrumbs":[{"label":"Modules developement"}]},{"id":"GdWDaudOwuSJGBZMqFcz","title":"Best practices","pathname":"/mikopbx-development/module-developement/best-practices","siteSpaceId":"sitesp_8pixK","description":"Conventions, PHP 8.4 idioms, and anti-patterns to avoid when building MikoPBX modules.","breadcrumbs":[{"label":"Modules developement"}]},{"id":"-MPKBDfvMhUWK3doEl0v","title":"Debuging","pathname":"/mikopbx-development/module-developement/debuging","siteSpaceId":"sitesp_8pixK","description":"","breadcrumbs":[{"label":"Modules developement"}]},{"id":"6fvbQBydVf7D7rASWI0q","title":"Configuring IDE","pathname":"/mikopbx-development/module-developement/debuging/configuring-ide","siteSpaceId":"sitesp_8pixK","description":"","breadcrumbs":[{"label":"Modules developement"},{"label":"Debuging"}]},{"id":"nIoFV8T0rXGao2wry69r","title":"Debug PHP-AGI","pathname":"/mikopbx-development/module-developement/debuging/debug-php-agi","siteSpaceId":"sitesp_8pixK","description":"","breadcrumbs":[{"label":"Modules developement"},{"label":"Debuging"}]},{"id":"uUn1ffTpzU9ZdKXU14z8","title":"Debug PHP Worker","pathname":"/mikopbx-development/module-developement/debuging/debug-php-worker","siteSpaceId":"sitesp_8pixK","description":"","breadcrumbs":[{"label":"Modules developement"},{"label":"Debuging"}]},{"id":"3DJNi5t6m4TwAKKQXrLZ","title":"Debug PHP Script","pathname":"/mikopbx-development/module-developement/debuging/debug-php-script","siteSpaceId":"sitesp_8pixK","description":"","breadcrumbs":[{"label":"Modules developement"},{"label":"Debuging"}]},{"id":"mU9yva9phTubZf4DaVH9","title":"Debugging behind NAT","pathname":"/mikopbx-development/module-developement/debuging/debugging-behind-nat","siteSpaceId":"sitesp_8pixK","description":"","breadcrumbs":[{"label":"Modules developement"},{"label":"Debuging"}]},{"id":"-MPKACYNAu0QV4F3pA9l","title":"Admin interface","pathname":"/mikopbx-development/internal-structure/admin-interface","siteSpaceId":"sitesp_8pixK","description":"Architecture of the MikoPBX admin-cabinet web application.","breadcrumbs":[{"label":"Internal structure"}]},{"id":"vLXT5wYVglLmSuJ0Fddr","title":"API","pathname":"/mikopbx-development/internal-structure/api","siteSpaceId":"sitesp_8pixK","description":"Overview of MikoPBX APIs and integration surfaces — REST API v3, AMI/AJAM, AGI, and the legacy module REST callback — with guidance on when to use each.","breadcrumbs":[{"label":"Internal structure"}]},{"id":"-MPKAXhD9xz8av5Pmjls","title":"REST API","pathname":"/mikopbx-development/internal-structure/api/rest-api","siteSpaceId":"sitesp_8pixK","description":"The MikoPBX PBXCoreREST API: v3 architecture, auth, routing and async processing.","breadcrumbs":[{"label":"Internal structure"},{"label":"API"}]},{"id":"esK1BDe2HXgyCTiWS9bO","title":"AMI / AJAM","pathname":"/mikopbx-development/internal-structure/api/ami-ajam","siteSpaceId":"sitesp_8pixK","description":"Interacting with Asterisk via AMI (TCP 5038) and AJAM (HTTP).","breadcrumbs":[{"label":"Internal structure"},{"label":"API"}]},{"id":"kQrcnbAAibdS6IsVlsef","title":"AGI","pathname":"/mikopbx-development/internal-structure/api/agi","siteSpaceId":"sitesp_8pixK","description":"MikoPBX implementation of the PHP-AGI library and how to write AGI scripts that hook into the Asterisk dialplan from a module.","breadcrumbs":[{"label":"Internal structure"},{"label":"API"}]},{"id":"-MPKAcaggVQuM6hALZRV","title":"Core","pathname":"/mikopbx-development/internal-structure/core","siteSpaceId":"sitesp_8pixK","description":"Architecture overview of the MikoPBX core engine: the six MikoPBX\\ namespaces, the Phalcon 5 / SQLite / Redis platform, and the core data-model graph.","breadcrumbs":[{"label":"Internal structure"}]},{"id":"-MPKBZrZjVESbIUHglh9","title":"Licensing","pathname":"/mikopbx-development/marketplace/licensing","siteSpaceId":"sitesp_8pixK","description":"How module licensing and the MikoPBX marketplace work, at a high level — the author-facing model for commercial modules and version-filtered distribution.","breadcrumbs":[{"label":"Marketplace"}]},{"id":"qmI2Z4x3U4rBXMCj8fJH","title":"Forms","pathname":"/mikopbx-development/cookbook/forms","siteSpaceId":"sitesp_8pixK","description":"Recipes for building module admin forms and data tables.","breadcrumbs":[{"label":"Cookbook"}]},{"id":"pfedyrzsFYJvGtv7kyNl","title":"Create module form","pathname":"/mikopbx-development/cookbook/forms/create-module-form","siteSpaceId":"sitesp_8pixK","description":"Step-by-step: build a settings form for your module.","breadcrumbs":[{"label":"Cookbook"},{"label":"Forms"}]},{"id":"L1wqrKMEMVmD0c04RflB","title":"Create datatable","pathname":"/mikopbx-development/cookbook/forms/create-datatable","siteSpaceId":"sitesp_8pixK","description":"Step-by-step: build a server-paginated list grid backed by the v3 getList endpoint.","breadcrumbs":[{"label":"Cookbook"},{"label":"Forms"}]},{"id":"LCnP7s8D6YAMcj88FuzI","title":"Add field into existing form","pathname":"/mikopbx-development/cookbook/forms/add-field-into-existing-form","siteSpaceId":"sitesp_8pixK","description":"Inject a custom field into a core MikoPBX form from your module.","breadcrumbs":[{"label":"Cookbook"},{"label":"Forms"}]},{"id":"MIm7UHH8gVS2QMubYb8R","title":"Asterisk","pathname":"/mikopbx-development/cookbook/asterisk","siteSpaceId":"sitesp_8pixK","description":"Recipes for integrating modules with the Asterisk dialplan, AMI and configs.","breadcrumbs":[{"label":"Cookbook"}]},{"id":"NxKN4vnZLMUGRKRhbsDz","title":"Hook on incoming call","pathname":"/mikopbx-development/cookbook/asterisk/hook-on-incoming-call","siteSpaceId":"sitesp_8pixK","description":"Run custom logic on an incoming call using dialplan generation hooks.","breadcrumbs":[{"label":"Cookbook"},{"label":"Asterisk"}]},{"id":"ZeGhe9TTUa3MlpjPX6jG","title":"Interact with AMI","pathname":"/mikopbx-development/cookbook/asterisk/interact-with-ami","siteSpaceId":"sitesp_8pixK","description":"Listen to live Asterisk events and send AMI commands from a module worker.","breadcrumbs":[{"label":"Cookbook"},{"label":"Asterisk"}]},{"id":"oJIzrSkJLU3HXBjmsqh8","title":"Modify extensions.conf","pathname":"/mikopbx-development/cookbook/asterisk/modify-extensions.conf","siteSpaceId":"sitesp_8pixK","description":"Add custom contexts and dialplan rules to the generated extensions.conf.","breadcrumbs":[{"label":"Cookbook"},{"label":"Asterisk"}]},{"id":"BJTUGiXANODLTt5qdoRs","title":"Rights and auth","pathname":"/mikopbx-development/cookbook/rights-and-auth","siteSpaceId":"sitesp_8pixK","description":"Recipes for authentication, ACL roles and per-role data filtering in modules.","breadcrumbs":[{"label":"Cookbook"}]},{"id":"9R1BwqoUGJ9WwHCOHmSz","title":"External authentication","pathname":"/mikopbx-development/cookbook/rights-and-auth/external-authentication","siteSpaceId":"sitesp_8pixK","description":"Integrate LDAP/OAuth login via the authenticateUser hook.","breadcrumbs":[{"label":"Cookbook"},{"label":"Rights and auth"}]},{"id":"V1gNoHBREUM0sFDPGzB5","title":"Limited rights","pathname":"/mikopbx-development/cookbook/rights-and-auth/limited-rights","siteSpaceId":"sitesp_8pixK","description":"Define ACL roles, controller permissions and per-role data filtering so that module-managed users see only what their role allows.","breadcrumbs":[{"label":"Cookbook"},{"label":"Rights and auth"}]},{"id":"cAnjhQBMV5jmTVBG25GF","title":"Overview","pathname":"/mikopbx-development/ai-assisted-development/ai-assisted-development","siteSpaceId":"sitesp_8pixK","description":"Using the /mikopbx-module AI skill to create, augment and optimize modules.","breadcrumbs":[{"label":"AI-assisted development"}]},{"id":"bCF0a5fhCYKpq9dOyADz","title":"Using the skill","pathname":"/mikopbx-development/ai-assisted-development/using-the-skill","siteSpaceId":"sitesp_8pixK","description":"How to drive the /mikopbx-module skill: prompting, the discovery dialog and recipe selection.","breadcrumbs":[{"label":"AI-assisted development"}]},{"id":"0QB06tCKMmVO20acHOnt","title":"What it generates","pathname":"/mikopbx-development/ai-assisted-development/what-it-generates","siteSpaceId":"sitesp_8pixK","description":"The files the /mikopbx-module skill produces, the post-generation checks it runs, and how to verify the output yourself.","breadcrumbs":[{"label":"AI-assisted development"}]}]}