Страница 1 из 2

Получить фактический результат отправки сообщения

Добавлено: 18 янв 2013, 17:03
Roman_dev
Здравствуйте.
Хотел бы спросить, можно ли в диалплане Asterisk получить результат отправки текстового сообщения (отправляю функцией MessageSend). Получить его из переменной MESSAGE_SEND_STATUS не подойдет, так как не учитывается действительный код ответа. Переменная будет SUCCESS, даже если клиент ответил 4хх кодом, либо вообще не ответил (если отвалился).
Я вижу решение, через частый опрос клиента запросами options от asterisk, тогда Asterisk заранее буедт знать если клиент отвалился. Мне такое решение не очень нравится. Можно ли сконфигурировать диалплан так, чтобы можно было узнать если не код ответа, то хотя бы факт того, что ответов нет?

Буду благодарен за советы.

Re: Получить фактический результат отправки сообщения

Добавлено: 18 янв 2013, 17:07
ded
Какую версию Астериска мучаете? Скорее всего ваш Астериск не поддерживает SIP MESSAGE (это можно увидеть в пакете INVITE)

User-Agent: PBX-1.99.0.28
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, PRACK, MESSAGE, NOTIFY, INFO - вот этого нет у вас.

Re: Получить фактический результат отправки сообщения

Добавлено: 18 янв 2013, 17:16
Roman_dev
11 версия, сообщения пересылаются, снифал.
Кстати, а что за версия 1,9?
Мой Asterisk в поле Allow действительно не выводит метода MESSAGE, хотя обрабатывает их, пересылает на нужный номер.

Re: Получить фактический результат отправки сообщения

Добавлено: 18 янв 2013, 17:19
ded
факт того, что ответов нет - это presense, разве нет?

Re: Получить фактический результат отправки сообщения

Добавлено: 18 янв 2013, 17:24
Roman_dev
Не могли бы вы подсказать мне как это в диалплане проверяется, в какой переменной этот признак хранится, либо может быть есть какая-либо синхронная фукнция в Asterisk, которая ждет отклика?
Или presense это функция в Asterisk? То есть перед отправкой сообщения вызвать функцию, и проверить в онлайне ли пир?

Re: Получить фактический результат отправки сообщения

Добавлено: 18 янв 2013, 17:28
ded
Я не знаю.
Я полагаю, что presense организован по разному, если локально - то через хинты и подписку на них - SUBSCRIBE и NOTIFY.
Вы не хотите почитать RFC? Протокол SIMPLE? Доки по Астериск? Посмотреть его код?

Re: Получить фактический результат отправки сообщения

Добавлено: 18 янв 2013, 17:39
Roman_dev
Понял, что вы имели в виду под presense.
Тут вопрос в ином.
Я не хочу от Asterisk получать уведомление о присутствии (presense). Мне нужно обработать результат пересылки Asterisk-ом SIP сообщения. В идеале код ответа, то есть если клиент не ответил 200, я отправлю в обратку сообщение. Доки по Asterisk я по-возможности читаю, другое дело может быть кто-нибудь знает функцию, или механизм получения от Asterisk в через диалплан кода ответа на его запрос, или действительного реультат выполнения операции.

Re: Получить фактический результат отправки сообщения

Добавлено: 18 янв 2013, 18:26
ded
Мы тестировали только сами посылки сообщений (чат) в реальном времени, без подтверждения кодами.
Обработка результатов пересылки Asterisk-ом SIP сообщений со всеми кодами - это есть в SIMPLE (AFAIK).
http://en.wikipedia.org/wiki/SIMPLE
SIP определяет два режима передачи мгновенных сообщений:

Страничный режим использует SIP-метод MESSAGE, как определено в RFC 3428. Этот способ не устанавливает сессий.

Режим Сессии. Протокол Message Session Relay (Реле Сессий Сообщений) (RFC 4975, RFC 4976) определяет текстовый протокол, используемый для обмена содержимым произвольного размера между пользователями в любое время. Сессия MSRP настраивается путем обмена определенной информацией, такой как MSRP URI, внутри SDP и SIP сигнализации.

Re: Получить фактический результат отправки сообщения

Добавлено: 18 янв 2013, 20:35
Samael28
Сразу оговорюсь, я не делал так, но предположу использовать ${HASH(SIP_CAUSE,<channel-name>)}. Во всяком случае ответ после Dial он получить позволяет.

Re: Получить фактический результат отправки сообщения

Добавлено: 21 янв 2013, 10:30
Roman_dev
Большое спасибо за развернутый ответ.