вторник, 4 марта 2025 г.

Как получать и отправлять SMS в Asterisk, а также настраивать их маршрутизацию и интеграцию с CRM для хранения переписки с клиентами?

Для организации отправки и приема SMS в Asterisk с последующей маршрутизацией в CRM можно использовать несколько решений. Рассмотрим основные этапы:


1. Выбор транспорта для SMS

Asterisk сам по себе не поддерживает работу с SMS, но это можно реализовать через SIP-операторов, VoIP-шлюзы, SMPP или API провайдеров.

Варианты получения и отправки SMS:

  1. VoIP-шлюзы с поддержкой GSM-модулей (например, OpenVox, GoIP, Dinstar):

    • Работают с физическими SIM-картами.
    • Передают SMS в Asterisk через HTTP API или SIP MESSAGE.
  2. SIP-провайдеры с поддержкой SMS (например, Twilio, Nexmo, Zadarma):

    • Используют SIP MESSAGE или HTTP API для отправки/получения SMS.
  3. SMPP-шлюзы и провайдеры (например, Jasmin, Kannel, OpenSMPP):

    • Используется SMPP-протокол, который интегрируется с Asterisk через дополнительные модули.

2. Настройка приема SMS в Asterisk

2.1. Использование SIP MESSAGE

Если оператор поддерживает SIP MESSAGE, в extensions.conf можно добавить обработчик:

[default] exten => _X.,1,NoOp(Received SIP MESSAGE from ${CALLERID(num)}) same => n,Set(MSG_BODY=${MESSAGE(body)}) same => n,Set(MSG_FROM=${CALLERID(num)}) same => n,Set(MSG_TO=${EXTEN}) same => n,System(curl -X POST -d "from=${MSG_FROM}&to=${MSG_TO}&body=${MSG_BODY}" http://crm.local/sms_receive) same => n,Hangup()

Здесь curl отправляет полученное SMS в CRM.

2.2. Прием SMS через VoIP-шлюз

Если шлюз передает SMS через HTTP API, можно настроить Asterisk для обработки входящих запросов с помощью AGI-скрипта.

Пример AGI-скрипта на Python (receive_sms.py):

#!/usr/bin/env python3 import cgi import requests form = cgi.FieldStorage() from_number = form.getvalue("from") to_number = form.getvalue("to") message = form.getvalue("message") crm_url = "http://crm.local/sms_receive" data = {"from": from_number, "to": to_number, "body": message} requests.post(crm_url, data=data) print("Content-type: text/plain\n") print("OK")

Этот скрипт принимает SMS и пересылает их в CRM.


3. Отправка SMS из Asterisk

3.1. Отправка через SIP MESSAGE

Пример команды в extensions.conf:

exten => _X.,1,NoOp(Sending SMS to ${EXTEN}) same => n,MessageSend(sip:${EXTEN}@sip-provider.com,${CALLERID(num)}) same => n,Hangup()

3.2. Отправка через HTTP API

Если провайдер работает через API, можно использовать System или AGI:

exten => _X.,1,System(curl -X POST -d "to=${EXTEN}&body=Hello" http://sms-provider.com/send)

Или через AGI-скрипт (send_sms.py):

#!/usr/bin/env python3 import sys import requests to_number = sys.argv[1] message = "Hello from Asterisk" sms_api_url = "http://sms-provider.com/send" data = {"to": to_number, "body": message} requests.post(sms_api_url, data=data)

И вызывать его:

exten => _X.,1,AGI(send_sms.py,${EXTEN})

4. Интеграция с CRM

В CRM (например, Bitrix24, amoCRM, Odoo) можно сохранять переписку SMS с клиентами.

Способы интеграции:

  1. Webhooks – Asterisk отправляет SMS в CRM через HTTP-запросы.
  2. API CRM – CRM делает запросы в Asterisk для отправки SMS.
  3. База данных – Логирование SMS в MySQL/PostgreSQL.

Пример записи в MySQL:

exten => _X.,1,Set(MSG_BODY=${MESSAGE(body)}) same => n,Set(MSG_FROM=${CALLERID(num)}) same => n,Set(MSG_TO=${EXTEN}) same => n,System(mysql -u user -ppassword -e "INSERT INTO sms_logs (from_number, to_number, message) VALUES ('${MSG_FROM}', '${MSG_TO}', '${MSG_BODY}');" sms_db)

Шаги

  1. Выбор способа приема и отправки SMS: SIP MESSAGE, HTTP API, SMPP, GSM-шлюзы.
  2. Обработка SMS в Asterisk: Используем extensions.conf, AGI-скрипты, Webhooks.
  3. Маршрутизация в CRM: Webhooks, API-интеграция, БД.


Настройка отправки и приема SMS в Asterisk через SMPP

Протокол SMPP (Short Message Peer-to-Peer) используется для взаимодействия с SMS-центрами (SMSC) операторов связи. Asterisk не поддерживает SMPP напрямую, поэтому потребуется дополнительное ПО, например Kannel или Jasmin.


1. Установка и настройка Kannel (SMPP-шлюз)

Kannel – это open-source SMPP-шлюз, который позволяет Asterisk отправлять и принимать SMS через оператора.

1.1. Установка Kannel

На Ubuntu/Debian:

sudo apt update sudo apt install kannel

На CentOS/RHEL (через сборку из исходников):

sudo yum install gcc make libxml2-devel wget https://www.kannel.org/download/kannel-1.4.5.tar.gz tar -xvzf kannel-1.4.5.tar.gz cd kannel-1.4.5 ./configure && make && sudo make install

2. Настройка Kannel для работы с SMPP

Файл конфигурации находится в /etc/kannel/kannel.conf.

2.1. Базовая конфигурация kannel.conf

Создайте файл /etc/kannel/kannel.conf и добавьте:

# Основные настройки group = core admin-port = 13000 smsbox-port = 13013 admin-password = admin log-file = "/var/log/kannel/kannel.log" log-level = 1 # Подключение к SMSC (SMPP-серверу) group = smsc smsc = smpp smsc-id = my_smsc host = smpp.provider.com port = 2775 system-type = "" service-type = "" username = my_username password = my_password interface-version = 34 throughput = 3 enquire-link-interval = 30 source-addr-ton = 1 source-addr-npi = 1 dest-addr-ton = 1 dest-addr-npi = 1

Замените smpp.provider.com, my_username и my_password на данные вашего SMS-провайдера.

2.2. Настройка SMS-сервиса

Добавьте раздел для smsbox:

group = smsbox bearerbox-host = 127.0.0.1 sendsms-port = 13013 global-sender = 1234 log-file = "/var/log/kannel/smsbox.log" log-level = 1

2.3. Настройка HTTP API для приема SMS

Добавьте сервис:

group = sendsms-user username = smsuser password = smspass user-deny-ip = "*.*.*.*" user-allow-ip = "127.0.0.1"

2.4. Запуск Kannel

sudo systemctl restart kannel

Проверить работу:

curl "http://localhost:13013/cgi-bin/sendsms?username=smsuser&password=smspass&to=79161234567&text=Hello"

3. Интеграция Asterisk с Kannel

Теперь Asterisk может отправлять и принимать SMS через Kannel.

3.1. Отправка SMS из Asterisk

Добавьте в extensions.conf:

exten => _X.,1,NoOp(Sending SMS via SMPP) same => n,System(curl "http://localhost:13013/cgi-bin/sendsms?username=smsuser&password=smspass&to=${EXTEN}&text=Hello from Asterisk") same => n,Hangup()

Проверка:

asterisk -rx "console dial 79161234567@default"

3.2. Прием SMS в Asterisk

Kannel может отправлять входящие SMS в Asterisk через AGI-скрипт.

Добавьте в kannel.conf:

group = sms-service keyword = default get-url = "http://localhost:8088/sms_receive?from=%p&to=%P&text=%b"

Создайте AGI-скрипт sms_receive.py:

#!/usr/bin/env python3 import cgi import requests form = cgi.FieldStorage() from_number = form.getvalue("from") to_number = form.getvalue("to") message = form.getvalue("text") # Логируем SMS в Asterisk requests.get(f"http://localhost:8088/ari/channels?from={from_number}&to={to_number}&body={message}") print("Content-type: text/plain\n") print("OK")

Разрешите запуск:

chmod +x /var/lib/asterisk/agi-bin/sms_receive.py

4. Интеграция с CRM

Теперь можно логировать SMS в CRM (например, Bitrix24, amoCRM).

4.1. Сохранение SMS в MySQL

Добавьте в extensions.conf:

exten => _X.,1,Set(MSG_FROM=${CALLERID(num)}) same => n,Set(MSG_TO=${EXTEN}) same => n,Set(MSG_BODY=${MESSAGE(body)}) same => n,System(mysql -u crmuser -pcrmpass -D crmdb -e "INSERT INTO sms_logs (from_number, to_number, message) VALUES ('${MSG_FROM}', '${MSG_TO}', '${MSG_BODY}');") same => n,Hangup()

4.2. Интеграция с CRM через Webhooks

Отправляйте SMS в CRM через Webhook:

exten => _X.,1,System(curl -X POST -d "from=${MSG_FROM}&to=${MSG_TO}&body=${MSG_BODY}" http://crm.local/api/sms)

Вывод

Теперь Asterisk может:
Принимать SMS через SMPP (Kannel принимает SMS и передает их в Asterisk).
Отправлять SMS (Asterisk использует HTTP-запросы к Kannel).
Маршрутизировать SMS в CRM через Webhooks или MySQL.

Полезные статьи:

Подробное описание маршрутизации SMS через SMPP в сети провайдера.

Комментариев нет:

Отправить комментарий