Принимаем SMS с Asterisk SIP-GSM шлюза в Oktell

Oktell logoКак я описывал раньше, есть у меня SIP-GSM шлюз на базе Asterisk, который подключен к офисному серверу с Oktell. На модемы приходят разные SMS и пока они ложатся в файл на Linux сервере. В них бывает информация о балансе на карточках :). Идея – перенести все эти SMS в Oktell.

Для начала решил все SMS записывать в базу MySQL на сервере, а потом служебным сценарием забирать в Oktell. Создаю в MySQL пользователя, базу, и таблицу:

CREATE TABLE  `asterisk`.`gsm` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`date` DATETIME NOT NULL ,
`modem` VARCHAR( 10 ) NOT NULL ,
`callerid` VARCHAR( 16 ) NOT NULL ,
`msg` VARCHAR( 160 ) NOT NULL ,
`oktell` ENUM(  '0',  '1' ) NOT NULL DEFAULT  '0'
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci COMMENT =  'Входящие SMS'

В файле extensions.conf в контекст для datacard прописываем:

[datacard-incoming]
exten => sms,1,Verbose(Incoming SMS from ${CALLERID(num)} ${SMS})
exten => sms,n,System(echo "insert into gsm values(NULL, NOW(), '${DATACARD}', '${CALLERID(num)}', '${SMS}', '0')" | mysql -u
 asterisk -pMY_PASSWORD asterisk)
exten => sms,n,Hangup()

Еще такое, у меня карта переполнена и больше не хочет принимать SMS. Добавляем параметр autodeletesms=yes в описание datacard. А что бы удалить уже все существующие SMS, отправим AT команду из asterisk:

asterisk -r
Asterisk 1.6.2.14, Copyright (C) 1999 - 2010 Digium, Inc. and others.
asterisk*CLI> datacard cmd datacard2 AT+CMGD=1,4
[Dec 26 01:43:47]at_response_ok: [datacard2] Received 'OK'

Все! Все SMS удалили, в будущем они будут ложится в базу MySQL. Переходим к Oktell. На сервере нужно установить драйвер MySQL. И пишем служебный сценарий:

Служебный сценарий
Служебный сценарий

Скачать сценарий

Прописываем выполнение этого сценария по расписанию и получаем:

Все SMS в Oktell
Все SMS в Oktell

Это, как пример. А теперь можно создавать разные варианты: CallBack по входящей SMS 😉
Успешных Вам экспериментов!

1 Comment on "Принимаем SMS с Asterisk SIP-GSM шлюза в Oktell"


  1. Здравствуйте, скажите пожалуй, как сделать следующее:
    Сразу скажу что я в этом деле вообще не компетентен, возможно что то не так скажу, но все же надеюсь что вы меня поймете.

    Суть заключается в следующим:

    Имеется свой собственный web сервер. На этом веб сервере в базе MySql есть много номеров телефонов.

    Нужна такая штука, назовем её «ххх» которая будет принимать звонок с обычного сотового или домашнего телефона.

    Предположим человек звонит на эту «ХХХ» штуку, можно даже для примера написать номер 777777777777 и эта «ХХХ» штука соединяет его с другим человеком, у которого тоже обычный сотовый или домашний телефон. Соединение происходит по обычному GSM каналу.

    Так как номеров в базе MySql много, и что бы эта «ХХХ» штука знала с кем именно соединить звонящего, она для начала должна соединится с веб сервером, в котором хранятся номера телефонов и принять инструкцию, то есть как бы спросить с кем именно соединить звонящего, а уже потом соединить.

    Так же эта «ХХХ» штука должна уметь принимать DTMF сигнал.

    В общем что-то в таком роде, как можно реализовать?
    Буду благодарен за исчерпывающий ответ.

Leave a Reply

Your email address will not be published. Required fields are marked *