# Module auto dialer

## Auto Dialer Module

This module provides a REST API for creating campaigns to automatically dial external numbers:

* When an employee is available, the module dials a phone number from the campaign pool.
* When the client answers, the call is connected to the internal queue or the employee’s extension.
* If the internal number is busy, the call is automatically terminated.

### REST API Authentication

For all requests, except local ones, authentication is required.

By default, you can use the web interface's administrative password for authentication.

To restrict access to specific PBX settings, the "System Access Management" module can be used.

Example request:

```bash
curl 'http://172.16.156.223/admin-cabinet/session/start' \
-X 'POST' --cookie-jar auth-cookies.txt \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
-H 'X-Requested-With: XMLHttpRequest' \
--data 'login=admin&password=adminpassword'
```

Where:

* `login` – admin, the web interface username.
* `password` – adminpassword, the web interface password.
* `172.16.156.223` – the MikoPBX server address.

Response example:

```json
{
  "success": true,
  "reload": false,
  "message": []
}
```

Example of executing requests:

```bash
curl -b auth-cookies.txt 'http://172.16.156.223pbxcore/api/sip/getPeersStatuses'
```

### Polls

Allows you to organize automatic client surveys. Using the API, you can define a set of questions, their connections, and answer options.

It is possible to use text-to-speech generation or pre-recorded mp3/wav files.

### **Adding a Poll**

Example cURL request:

```bash
JSON='{
  "name": "New polling",
  "questions": [
    {
      "questionId": "1",
      "questionText": "Hello, we have a new product. To order, press 1. Not interested, press 2. To unsubscribe, press 3.",
      "press": [
        {
          "key": "1",
          "action": "playback",
          "value": "\"Thank you for choosing this product\"",
          "valueOptions": "text"
        },
        {
          "key": "3",
          "action": "playback",
          "value": "\"Thank you for your response\"",
          "valueOptions": "text"
        }
      ],
      "nextQuestion": ""
    }
  ]
}';
curl -X POST -d "$JSON" http://127.0.0.1/pbxcore/api/module-dialer/v1/polling
```

### **Fetching Poll List**

```bash
curl 'http://127.0.0.1/pbxcore/api/module-dialer/v1/polling'
```

Response example:

```json
{
  "result": true,
  "data": {
    "results": [
      {
        "id": "8",
        "crmId": "8",
        "name": "New polling"
      },
      {
        "id": "9",
        "crmId": "9",
        "name": "New polling"
      },
      {
        "id": "10",
        "crmId": "10",
        "name": "Product Survey"
      }
    ]
  }
}
```

### **Creating a Task**

```bash
JSON="{
  "name": "New polling task",
  "state": 0,
  "innerNum": "9",
  "innerNumType": "polling",
  "maxCountChannels": 1,
  "dialPrefix": "999",
  "numbers": [
    {
      "number": "79522233446"
    },
    {
      "number": "79522233416"
    }
  ]
}";
curl -X POST -d "$JSON" http://127.0.0.1/pbxcore/api/module-dialer/v1/task
```

Response example:

```json
{
  "result": true,
  "data": {
    "id": "41",
    "crmId": "41",
    "name": "New polling task",
    "innerNum": "9",
    "innerNumType": "polling",
    "maxCountChannels": 1,
    "state": 0,
    "dialPrefix": "999"
  }
}
```

### Media Files

**Uploading Media Files**

```bash
curl -F "file=@1.mp3" 'http://127.0.0.1/pbxcore/api/module-dialer/v1/audio'
```

Response example:

```json
{
  "result": true,
  "data": {
    "filename": "/storage/usbdisk1/mikopbx/custom_modules/ModuleAutoDialer/db/audio/filename.mp3"
  }
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mikopbx.com/mikopbx/english/modules/miko/module-auto-dialer.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
