chan_dongle не отправляет смс

обсуждение вопросов по IP-PBX Asterisk

chan_dongle не отправляет смс

Сообщение clayer » Вт авг 02, 2016 1:35 am

Пытаюсь настроить отправку смс через sip чат. (через chan_dongle)
(в дебаг варианте номер телефона записан напрямую)

скрипт
[send-sms]
exten => _XXXXXXXX,1,NoOp(SMS send to dongle)
same => n,NoOp(To ${MESSAGE(to)})
same => n,NoOp(From ${MESSAGE(from)})
same => n,NoOp(Body ${MESSAGE(body)})
same => n,Set(SMSTO=${CUT(MESSAGE(to),@,1)})
same => n,DongleSendSMS(dongle0, +7921xxxxxxx, '${MESSAGE(body)}', 1440, yes)
same => n,Hangup()
exten => _XXX,n,Set(LOCALFROM=${CUT(LOCALME,@,1)})

А вот что выдает лог астериска при попытке отправки

-- Executing [+7921xxxxx@send-sms:5] Set("Message/ast_msg_queue", "SMSTO=sip:xxxxx") in new stack
-- Executing [+7921xxxxx@send-sms:6] DongleSendSMS("Message/ast_msg_queue", "dongle0, +7921xxxxx, 'test', 1440, yes") in new stack
[2016-08-01 01:00:23] ERROR[1815][C-00000005]: app.c:113 app_send_sms_exec: [dongle0] Invalid destination number with id 0xb6601da4

чреез cli sms отправляются, звонки идут
clayer
Новичок
 
Сообщения: 1
Зарегистрирован: Вт авг 02, 2016 1:27 am
Карма: + 0 -

Re: chan_dongle не отправляет смс

Сообщение bg1 » Вт авг 02, 2016 10:55 am

кавычки рукожопские

> DongleSendSMS("Message/ast_msg_queue", "dongle0, +7921xxxxx, 'test', 1440, yes") in new stack
ничего не удивляет ?
bg1
Специалист
 
Сообщения: 1014
Зарегистрирован: Вт янв 18, 2011 12:40 pm
Карма: + 15 -

Re: chan_dongle не отправляет смс

Сообщение taravasya » Чт мар 15, 2018 5:16 am

Здравствуйте! Не стал создавать новую тему, так как в этой речь идёт о том же "роде занятий", что и у меня :)

Имеем:
FreePBX14, Asterisk13, chan_dongle, Huawei1550

Сразу скажу, что "проект" сугубо частный, вынужденный был появиться из-за крайне неприятных обстоятельств, которые фактически мне не оставили выбора, кроме как нырнуть в эту тематику. Я не специалист в этой сфере и все мои познания ограничены недельным гуглом...

Читая его(гугл):
Настроил сеть.
Голосовые вызовы сделал в оба направления.
Сделал пересылку входящих SMS сообщений на мыло, и в sip-чат.

Не могу добиться отправки сообщений ИЗ sip-чата, на мобильные номера, через донгл(в идеале бы ещё и USSD, отправку и приём).
Проблема в том, что найдя много примеров того, как это реализовано, я так и не вкурил последовательности... А именно - куда нужно записывать то, что у топикстартера обозначено как скрипт:
Код: Выделить всё
[send-sms]
exten => _XXXXXXXX,1,NoOp(SMS send to dongle)
same => n,NoOp(To ${MESSAGE(to)})..........
//итд, приблизительно в том же духе

Я предположил, что туда-же куда и:
[from-trunk-dongle](обработка входящих звонков и SMS)
[messages](обработка и пересылка сообщений из sip-чата, в sip-чат)
То-есть в extensions_custom.conf
Я вставил, указанный выше скрипт, сразу по окончании контекста [messages]. Всё это в итоге, выглядит вот так:

Код: Выделить всё
[from-trunk-dongle]
exten => sms,1,Verbose(Incoming SMS from ${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})})
exten => sms,n,System(echo "To: taravasya@gmail.com\nSubject: Incoming SMS from ${CALLERID(num)}\n\n${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)}: " > /tmp/sms.txt)
exten => sms,n,Set(FILE(/tmp/sms.txt,,,a)=${BASE64_DECODE(${SMS_BASE64})})
exten => sms,n,System(sendmail -t < /tmp/sms.txt)
exten => sms,n,NooP(Incoming SMS from ${CALLERID(num)} )
exten => sms,n,NooP(From ${CALLERID(num)})
exten => sms,n,NooP(To local ${SMS})
exten => sms,n,NooP(Message - ${SMS})
exten => sms,n,Set(MESSAGE(body)=${SMS})
exten => sms,n,MessageSend(sip:600,${CALLERID(all)})
exten => sms,n,Hangup()
exten => _.,1,Set(CALLERID(name)=${CALLERID(num)})
exten => _.,n,Goto(from-trunk,${EXTEN},1)

[messages]
exten => _XXX,1,NoOp(Message receiving dialplan)
exten => _XXX,n,NoOp(To ${MESSAGE(to)})
exten => _XXX,n,NoOp(From ${MESSAGE(from)})
exten => _XXX,n,NoOp(Body ${MESSAGE(body)})
exten => _XXX,n,Set(LOCALTO=${CUT(MESSAGE(to),@,1)})
exten => _XXX,n,MessageSend(${LOCALTO},${MESSAGE(from)})
exten => _XXX,n,NoOp(Send status is ${MESSAGE_SEND_STATUS})
exten => _XXX,n,GotoIf($["${MESSAGE_SEND_STATUS}" != "SUCCESS"]?sendfailedmsg)
exten => _XXX,n,Hangup()
;
; failed send messaging
exten => _XXX,n(sendfailedmsg),Set(MESSAGE(body)="[${STRFTIME(${EPOCH},,%d%m%Y-%H:%M:%S)}] Your message to ${EXTEN} has failed. Retry later.")
exten => _XXX,n,Set(LOCALME=${CUT(MESSAGE(from),<,2)})
exten => _XXX,n,Set(LOCALFROM=${CUT(LOCALME,@,1)})
exten => _XXX,n,MessageSend(${LOCALFROM},AsteriskSMC)
exten => _XXX,n,Hangup()

[send-sms]
exten => _XXXXXXXX.,1,NoOp(SMS send to dongle)
same => n,NoOp(To ${MESSAGE(to)})
same => n,NoOp(From ${MESSAGE(from)})
same => n,NoOp(Body ${MESSAGE(body)})
same => n,Set(SMSTO=${CUT(MESSAGE(to),@,1)})
same => n,DongleSendSMS(dongle0, "${SMSTO}", ${MESSAGE(body)}, 1440, yes)
same => n,Hangup()


Но в таком варианте, сообщения с адресатом мобильного номера, уходят в никуда. В sip-клиенте, ошибка 404, а в логах
Asterisk-а, вообще ничего.
При этом напомню, из чата-в-чат(на локальные номера), всё ходит...

Как я понимаю, проблема в моём непонимании(извините за каламбур), основ работы asterisk-а. Я вижу, что контекст from-trunk-dongle, прописан в dongle.conf, messages так-же прописан в sip_general_additional.conf(ну он там появился после внесения этих параметров через FreePBX), а вот send-sms, не прописан нигде... поэтому, я так полагаю, и не происходит надлежащего действия, после того, как я отправляю смс на номер, отличающийся от локального.

Спасибо за внимание... Буду весьма признателен за любую наводку.... А то скоро у моего монитора будет мой же труп ((((
taravasya
Новичок
 
Сообщения: 4
Зарегистрирован: Чт мар 15, 2018 4:34 am
Карма: + 0 -

Re: chan_dongle не отправляет смс

Сообщение ded » Пт мар 16, 2018 10:57 am

Код: Выделить всё
[messages]
include => send-sms
ded
Специалист
 
Сообщения: 4276
Зарегистрирован: Сб май 03, 2008 2:47 am

Re: chan_dongle не отправляет смс

Сообщение taravasya » Чт апр 26, 2018 1:12 am

Добрый день!
Возникла ещё одна неожиданная проблема...
Контекст:
Код: Выделить всё
[send-sms]
exten => _+3.,1,NoOp(SMS send to dongle)
same => n,NoOp(To ${MESSAGE(to)})
same => n,NoOp(From ${MESSAGE(from)})
same => n,NoOp(Body ${MESSAGE(body)})
same => n,Set(SMSTO=${CUT(CUT(MESSAGE(To),@,1),:,2)})
same => n,DongleSendSMS(dongle1,${SMSTO},${MESSAGE(body)},1440,yes)
same => n,Hangup()

Отправляю смс из SIP-чата на мобильник(при помощи dongle-а).
Если у меня в телефонной книжке, номер сохранён с пробелами(иногда при добавлении номера в смартфоне, они автоматически добавляются для удобного восприятия), то при попытке отправить смс на такой номер, получаю такой выхлоп:
Код: Выделить всё
 -- Executing [+380 50 186 XXXX@messages:1] NoOp("Message/ast_msg_queue", "SMS send to dongle") in new stack
    -- Executing [+380 50 186 XXXX@messages:2] NoOp("Message/ast_msg_queue", "To sip:+380%2050%20186%20XXXX@ipaddres:port;transport=UDP") in new stack
    -- Executing [+380 50 186 XXXX@messages:3] NoOp("Message/ast_msg_queue", "From "taravasya" <sip:600@ipaddres:port;transport=UDP>") in new stack
    -- Executing [+380 50 186 XXXX@messages:4] NoOp("Message/ast_msg_queue", "Body ТестСМС28") in new stack
    -- Executing [+380 50 186 XXXX@messages:5] Set("Message/ast_msg_queue", "SMSTO=+380%2050%20186%20XXXX") in new stack
    -- Executing [+380 50 186 XXXX@messages:6] DongleSendSMS("Message/ast_msg_queue", "dongle1,+380%2050%20186%20XXXX,ТестСМС28,1440,yes") in new stack
[Apr 26 01:06:40] ERROR[2681][C-00000000]: app.c:258 app_send_sms_exec: [dongle1] Invalid destination number with id (nil)
  == Spawn extension (messages, +380 50 186 XXXX, 6) exited non-zero on 'Message/ast_msg_queue'


Как видите, вместо пробелов, в номер получателя "приходят" символы: %20 (как в урлах ), и из-за этого, номер получателя, получается :roll: нерабочим...
Причём далее в строке Spawn extension, номер обрабатывается нормально.

Попробовал вместо скопипастенного варианта, вставлять не:
Код: Выделить всё
same => n,Set(SMSTO=${CUT(CUT(MESSAGE(To),@,1),:,2)})
same => n,DongleSendSMS(dongle1,${SMSTO},${MESSAGE(body)},1440,yes)

а просто:
Код: Выделить всё
same => n,DongleSendSMS(dongle1,${EXTEN},${MESSAGE(body)},1440,yes)

и нормальные пробелы, тоже являются для астера проблемой. Если вместо переменной ${EXTEN}, вставляю просто номер в виде: +38050186XXXX (без пробелов), то смс нормально уходит.
Как то можно это "починить"?
Например, где-то в начале dialplan-а, порубить все пробелы?
Спасибо!

PS///
Нашёл описание функции FILTER. Вместо ${EXTEN}, использовал ${FILTER(+0-9, ${EXTEN})} (оставляет только цифры и знак плюса)
Теперь всё нормально заработало!
taravasya
Новичок
 
Сообщения: 4
Зарегистрирован: Чт мар 15, 2018 4:34 am
Карма: + 0 -

Re: chan_dongle не отправляет смс

Сообщение ded » Чт апр 26, 2018 12:30 pm

... а есть ещё функция
Код: Выделить всё
*CLI> core show function CUT

  -= Info about function 'CUT' =-

[Synopsis]
Slices and dices strings, based upon a named delimiter.         

[Description]
Cut out information from a string (<varname>), based upon a named delimiter.

[Syntax]
CUT(varname,char-delim,range-spec)

[Arguments]
varname
    Variable you want cut
char-delim
    Delimiter, defaults to '-'
range-spec
    Number of the field you want (1-based offset), may also be specified as a
    range (with '-') or group of ranges and fields (with '&')

ded
Специалист
 
Сообщения: 4276
Зарегистрирован: Сб май 03, 2008 2:47 am

Re: chan_dongle не отправляет смс

Сообщение Syavick » Чт июн 14, 2018 2:58 am

Может, пригодится.
Отправка+прием сообщений:

sip.conf
accept_outofcall_message = yes
outofcall_message_context = send-sms
auth_message_requests = no

extensions.conf
в контекст на прием звонков надо вставить (у меня он называется from-gsm):
Код: Выделить всё
[from-gsm]
include => receive-sms


Для отправки смс у меня так:
Код: Выделить всё
[send-sms]
exten => _+7.,1,NoOp(SMS send to dongle)
same => n,NoOp(To ${MESSAGE(to)})
same => n,NoOp(From ${MESSAGE(from)})
same => n,NoOp(Body ${MESSAGE(body)})
;same => n,Set(SMSTO=${CUT(MESSAGE(to),@,1)})
same => n,DongleSendSMS(dongle0,${EXTEN},${MESSAGE(body)},1440,yes)
same => n,Hangup()


для приема смс:

Код: Выделить всё
[receive-sms]
exten => sms,1,Noop(Incoming SMS from ${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})})
same => n,Set(MESSAGE(from)=${CALLERID(num)})
same => n,Set(MESSAGE(body)=${BASE64_DECODE(${SMS_BASE64})})
same => n,MessageSend(sip:6002,<${MESSAGE(from)}>)
same => n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)}: ${BASE64_DECODE(${SMS_BASE64})} ' >> /var/log/asterisk/sms.txt)
same => n,System(echo '${SMS} === ${CALLERID(num)} - ${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)}' | mail -s IncomingSMS xxx@yyyy.ru)
same => n,Hangup()


same => n,MessageSend(sip:6002,<${MESSAGE(from)}>) - здесь победил проблему, когда сообщение приходило от имени asterisk. Проверенно на bria софтофоне. Принимаются в чат и отправляются из чата все смс.

Для отправки смс на почту установил приложения mail и ssmtp.
Syavick
Новичок
 
Сообщения: 1
Зарегистрирован: Чт июн 14, 2018 2:36 am
Карма: + 0 -


Вернуться в Asterisk (*)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2