Экспорт информации о звонках в Asterisk/FreePBX можно реализовать различными способами. Рассмотрим один из наиболее распространенных и надежных методов с использованием AMI (Asterisk Manager Interface) и AGI (Asterisk Gateway Interface) для получения нужной информации и записи её в файл.
### 1. Использование AMI
Asterisk Manager Interface позволяет отслеживать события звонков и получать нужную информацию в реальном времени.
#### Шаги:
1. **Настройка AMI:**
- Откройте файл `manager.conf`, который обычно находится в `/etc/asterisk/`.
- Добавьте пользователя с соответствующими правами. Например:
```ini
[myuser]
secret=mysecret
read = all
write = all
```
2. **Создание скрипта для обработки событий:**
- Используйте язык программирования, поддерживающий TCP соединения (например, Python или PHP).
- В скрипте устанавливайте TCP-соединение с Asterisk и прослушивайте события, такие как `Newchannel`, `Hangup`, и др.
- Когда получите событие `Hangup`, соберите нужные данные (время, продолжительность, направление, номер, запись) и запишите их в файл.
Пример на Python:
```python
import socket
def connect_to_ami():
ami_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ami_socket.connect(("localhost", 5038))
ami_socket.sendall(b"Action: Login\r\nUsername: myuser\r\nSecret: mysecret\r\n\r\n")
return ami_socket
def log_call_data(data):
with open("call_log.txt", "a") as f:
f.write(data)
def main():
ami_socket = connect_to_ami()
while True:
response = ami_socket.recv(4096).decode()
if "Hangup" in response: # Обработка события Hangup
# Извлечение нужной информации из response
# Например, можно использовать регулярные выражения
log_call_data(response)
if __name__ == '__main__':
main()
```
### 2. Использование AGI
Если вам нужно больше контроля и возможность обработать звонки в процессе выполнения, можете использовать AGI. Это позволит вам вызывать ваш скрипт на любой стадии звонка.
#### Шаги:
1. **Создание AGI-скрипта:**
- Напишите AGI-скрипт на любом поддерживаемом языке (например, Perl, Python).
- Используйте скрипт для записи в файл нужной информации при вызове.
Например, простой AGI на Python:
```python
#!/usr/bin/env python
import sys
def log_call_details():
# Получение параметров из Asterisk
caller_id = sys.stdin.readline().strip() # Получить caller ID
duration = sys.stdin.readline().strip() # Получить продолжительность, если передано
with open("call_data.txt", "a") as f:
f.write(f"{caller_id},{duration}\n")
if __name__ == "__main__":
log_call_details()
```
2. **Изменение диалплана для вызова AGI:**
- В `extensions_additional.conf` или в вашем пользовательском диалплане добавьте вызов AGI, как показано ниже:
```plaintext
exten => _X.,n,AGI(myagi_script.py)
```
### 3. Использование существующих модулей
Существуют различные модули для FreePBX, такие как "Call Reporting", которые могут предоставить вам нужно (с возможностью экспорта).
### Заключение
Вы можете выбрать метод, который лучше всего соответствует вашим потребностям. Использование AMI позволит вам получить информацию в реальном времени, в то время как AGI может быть более удобным для обработки звонков во время их выполнения.