Ошибка должна быть непомеченная исходящая связь

Всем доброго вечера. У меня возникла накладка с исходящей связью. Все делал по учебнику «Астериск-будущее телефонии»
Входящие звонки проходят а вот исходящих нету может кто подсказать в чем собственно дело?
Схема подключения довольно простая, есть софтфон установленный на телефоне и подключаемый к астериску через вайфай, сам астериск установлен на рабочем пк под управлением системы Минт, есть аккаунт на сервере youmagic.com (voip.mtt.ru)

Вот образец из учебника по которому сосбенно говоря и делается вся настройка:
sip.conf

[general]

register=>имяпользователя:секрет@мой.поставщик_сервисов.tld

[мой_уникальный_id]
type=friend
host=10.251.55.100
fromuser=мой_уникальный_id
secret=мой_секретный пароль
context=incoming_calls
dtmfmode=rfc2833
disallow=all
allow=gsm
allow=ulaw
insecure=invite

[1000]
type=friend
host=dynamic
context=phone

extensions.conf

[globals]

[general]

[default]
exten => s,1,Verbose(1|Unrouted call handler)
exten => s,n,Answer()
exten => s,n,Wait(1)
exten => s,n,Playback(tt-weasels)
exten => s,n,Hangup()

[incoming_calls]
exten => _X.,1.NoOp()
exten => _X.,n,Dial(SIP/1000)

[outgoing_calls]
exten => _X.,1,NoOp()
exten => _X.,n,Dial(SIP/мой_поставщик_сервисов/${EXTEN})

[internal]
exten => 1000,1,Verbose(1|Extension 1000)
exten => 1000,n,Dial(SIP/1000,30)
exten => 1000,n,Hangup()
exten => 500,1,Verbose(1|Echo test application)
exten => 500,n,Echo()
exten => 500,n,Hangup()

[phones]
include => internal
include => outgoing_calls

А вот мой конфиг астериска который я сделал у себя:

sip.conf
[general]

register=>78432023929:xxxx@voip.mtt.ru

[78432023929]
type=peer
host=voip.mtt.ru
fromuser=78432023929
secret=xxxx
context=incoming_calls
dtmfmode=rfc2833
insecure=port,invite
nat=yes
transport=udp

[1000]
type=friend
host=dynamic
context=phone
secret=1000

extensions.conf
[general]

[incoming_calls]
exten=>s,1,Answer()
exten=>s,n,Dial(SIP/1000,20,tr)
exten=>s,n,Hangup

[outgoing_calls]
exten=>_X.,1,Dial(SIP/78432023929/${EXTEN})
exten=>_X.,n,HangUp()

[internal]
exten=>s,1,Verbose(1|Extension 1000)
exten=>s,n,Dial(SIP/1000,30)
exten=>s,n,Hangup()

[phones]
include=>internal
include=>outgoing_calls

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

Последний раз редактировалось Mucmuk 15 янв 2013, 20:07, всего редактировалось 1 раз.

<?xml version=«1.0« encoding=«utf-8«?> <!DOCTYPE TS> <TS version=«2.1« language=«ru_RU«> <context> <name>Block</name> <message> <source>Control flow break detected, stopping</source> <translation type=«vanished«>Обнаружен разрыв потока управления, исполнение завершено</translation> </message> <message> <source>Block has disappeared!</source> <translation type=«vanished«>Блок исчез!</translation> </message> <message> <source>Too many outgoing links</source> <translation type=«vanished«>Слишком много исходящих связей</translation> </message> <message> <source>No outgoing links, please connect this block to something or use Final Node to end program</source> <translation type=«vanished«>Нет исходящих связей. Пожалуйста, подключите этот блок к чему-нибудь или используйте блок &quot;Конец&quot;, чтобы завершить выполнение программы</translation> </message> <message> <source>Outgoing link is not connected</source> <translation type=«vanished«>Исходящая связь ни к чему не подключена</translation> </message> </context> <context> <name>QObject</name> <message> <location filename=«../../qrutils/expressionsParser/expressionsParser.cpp« line=«+642«/> <source>Unexpected end of stream at %1. Mb you forget &apos;;&apos;?</source> <translation>Неожиданный конец выражения в позиции %1. Может быть, Вы забыли &apos;;&apos;?</translation> </message> <message> <location line=«+5«/> <source>Unexpected symbol at %1 : expected %2, got %3</source> <translation>Неожиданный символ в позиции %1 : ожидалось %2, получено %3</translation> </message> <message> <location line=«+4«/> <source>Types mismatch at %1: %2 = %3. Possible loss of data</source> <translation>Несовпадение типов в позиции %1: %2 = %3. Возможна потеря данных</translation> </message> <message> <location line=«+5«/> <source>Unknown identifier at %1 &apos; %2 &apos;</source> <translation>Неизвестный идентификатор в позиции %1: &apos;%2&apos;</translation> </message> <message> <location line=«+3«/> <source>Empty process is unnecessary</source> <translation>Пустое выражение</translation> </message> <message> <location line=«+4«/> <source>Condition can&apos;t be empty</source> <translation>Условие не может быть пустым</translation> </message> <message> <location line=«+4«/> <source>Using reserved variable %1</source> <translation>Использование зарезервированного слова в качестве идентификатора (%1)</translation> </message> <message> <location line=«+4«/> <source>No value of expression</source> <translation>Отсутствует значение выражения</translation> </message> <message> <location line=«+3«/> <source>Incorrect variable declaration: use function block for it</source> <translation>Некорректное объявление пременной: используйте блок &quot;Функция&quot; для этого</translation> </message> <message> <location line=«+5«/> <source>Unexpected symbol after the end of expression</source> <translation>Неожиданный символ за концом выражения</translation> </message> <message> <location line=«+4«/> <source>Unknown element property used</source> <translation>Неизвестное свойство элемента</translation> </message> <message> <location line=«+4«/> <source>Unknown element name used</source> <translation>Неизвестное имя элемента</translation> </message> <message> <location line=«+4«/> <source>Integer division by zero</source> <translation>Целичисленное деление на ноль</translation> </message> <message> <location filename=«../../qrutils/graphicsUtils/abstractItem.cpp« line=«+580«/> <source>Remove</source> <translation>Удалить</translation> </message> <message> <source>Ok</source> <translation type=«vanished«>Да</translation> </message> <message> <source>Open</source> <translation type=«vanished«>Открыть</translation> </message> <message> <source>Save</source> <translation type=«vanished«>Сохранить</translation> </message> <message> <source>Cancel</source> <translation type=«vanished«>Отмена</translation> </message> <message> <source>Close</source> <translation type=«vanished«>Закрыть</translation> </message> <message> <source>Discard</source> <translation type=«vanished«>Отменить</translation> </message> <message> <source>Apply</source> <translation type=«vanished«>Применить</translation> </message> <message> <source>Reset</source> <translation type=«vanished«>Сбросить</translation> </message> <message> <source>Restore Defaults</source> <translation type=«vanished«>Восстановить по умолчанию</translation> </message> <message> <source>Help</source> <translation type=«vanished«>Помощь</translation> </message> <message> <source>Save All</source> <translation type=«vanished«>Сохранить все</translation> </message> <message> <source>Yes</source> <translation type=«vanished«>Да</translation> </message> <message> <source>Yes To All</source> <translation type=«vanished«>Да для всех</translation> </message> <message> <source>No</source> <translation type=«vanished«>Нет</translation> </message> <message> <source>No To All</source> <translation type=«vanished«>Нет для всех</translation> </message> <message> <source>Abort</source> <translation type=«vanished«>Остановить</translation> </message> <message> <source>Retry</source> <translation type=«vanished«>Повторить</translation> </message> <message> <source>Ignore</source> <translation type=«vanished«>Игнорировать</translation> </message> <message> <source>NoButton</source> <translation type=«vanished«>Не кнопка</translation> </message> </context> <context> <name>SensorsGraph</name> <message> <source>SensorsGraph</source> <translation type=«vanished«>График</translation> </message> </context> <context> <name>qReal::BaseGraphTransformationUnit</name> <message> <location filename=«../../qrutils/graphUtils/baseGraphTransformationUnit.cpp« line=«+48«/> <source>no current diagram</source> <translation>Откройте диаграмму</translation> </message> <message> <location line=«+27«/> <location line=«+48«/> <source>Rule &apos;</source> <translation>Правило &apos;</translation> </message> <message> <location line=«-47«/> <source>&apos; has not any appropriate nodes</source> <translation>&apos; не имеет подходящих узлов</translation> </message> <message> <location line=«+47«/> <source>&apos; has unconnected link</source> <translation>&apos; содержит неподключенную связь</translation> </message> </context> <context> <name>qReal::interpretation::Block</name> <message> <location filename=«../../qrutils/interpreter/block.cpp« line=«+60«/> <source>Control flow break detected, stopping</source> <translation>Обнаружен разрыв потока управления, исполнение завершено</translation> </message> <message> <location line=«+20«/> <source>Too many outgoing links</source> <translation>Слишком много исходящих связей</translation> </message> <message> <location line=«+5«/> <source>No outgoing links, please connect this block to something or use Final Node to end program</source> <translation>Нет исходящих связей. Пожалуйста, подключите этот блок к чему-нибудь или используйте блок &quot;Конец&quot;, чтобы завершить выполнение программы</translation> </message> <message> <location line=«+7«/> <source>Outgoing link is not connected</source> <translation>Исходящая связь ни к чему не подключена</translation> </message> <message> <location line=«-27«/> <location line=«+93«/> <source>Block has disappeared!</source> <translation>Блок исчез!</translation> </message> </context> <context> <name>qReal::interpretation::Interpreter</name> <message> <location filename=«../../qrutils/interpreter/interpreter.cpp« line=«+55«/> <source>Interpreter is already running</source> <translation>Программа уже запущена</translation> </message> <message> <location line=«+42«/> <source>Cannot create new thread with already occupied id %1</source> <translation>Попытка создать задачу с уже занятым идентификатором %1</translation> </message> <message> <location line=«+12«/> <source>Threads limit exceeded. Maximum threads count is %1</source> <translation>Превышено максимальное число возможных потоков (максимум %1 потоков)</translation> </message> <message> <location line=«+22«/> <source>Killing non-existent thread %1</source> <translation>Попытка завершить несуществующую задачу %1</translation> </message> <message> <source>Sending message to non-existent thread %1</source> <translation type=«vanished«>Попытка отправить сообщение несуществующие задаче %1</translation> </message> </context> <context> <name>qReal::interpretation::Thread</name> <message> <location filename=«../../qrutils/interpreter/thread.cpp« line=«+117«/> <source>No entry point found, please add Initial Node to a diagram</source> <translation>Не найдено начало программы. Пожалуйста, добавьте блок &quot;Начало&quot;</translation> </message> <message> <location line=«+5«/> <source>Stack overflow</source> <translation>Переполнение стека</translation> </message> <message> <location line=«+59«/> <source>Block has disappeared!</source> <translation>Блок исчез!</translation> </message> </context> <context> <name>qReal::interpretation::blocks::CommentBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/commentBlock.cpp« line=«+28«/> <source>The comment block with incoming links detected!</source> <translation>Блок &quot;Комментарий&quot; не может иметь входящих связей!</translation> </message> </context> <context> <name>qReal::interpretation::blocks::ForkBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/forkBlock.cpp« line=«+43«/> <source>Outgoing link is not connected</source> <translation>Исходящая связь ни к чему не подключена</translation> </message> <message> <location line=«+12«/> <source>Cannot create two threads with the same id %1</source> <translation>Невозможно создать две задачи с одинаковыми идентификаторами %1</translation> </message> <message> <location line=«+14«/> <source>There must be a link that has its &apos;Guard&apos; property set to the current thread id %1</source> <translation>Должна быть исходящая связь, помеченная идентификатором текущей задачи (%1)</translation> </message> <message> <source>There must be an outgoing link, use &quot;End&quot; block to finish a program</source> <translation type=«vanished«>Должна быть исходящая связь, используйте блок &quot;Конец&quot;, чтобы закончить программу</translation> </message> <message> <location line=«-33«/> <source>There must be at least two outgoing links</source> <translation>Должно быть как минимум две исходящие связи</translation> </message> </context> <context> <name>qReal::interpretation::blocks::IfBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/ifBlock.cpp« line=«+36«/> <source>There must be exactly TWO links outgoing from if block</source> <translation>От условного блока должно отходить ровно ДВЕ связи</translation> </message> <message> <location line=«+7«/> <source>Outgoing link is not connected</source> <translation>Исходящая связь ни к чему не подключена</translation> </message> <message> <location line=«+9«/> <source>Two links marked with &apos;true&apos; found</source> <translation>Обнаружено обе связи помечены условием &apos;Истина&apos;</translation> </message> <message> <location line=«+7«/> <source>Two links marked with &apos;false&apos; found</source> <translation>Обе связи помечены условием &apos;Ложь&apos;</translation> </message> <message> <location line=«+7«/> <source>There must be at least one link with &quot;true&quot; or &quot;false&quot; marker on it</source> <translation>Должна быть как минимум одна связь с маркером &quot;истина&quot; или &quot;ложь&quot;</translation> </message> <message> <source>There must be a link with property &quot;Guard&quot; set to one of the conditions</source> <translation type=«vanished«>Должна быть связь со свойством &quot;Условие&quot; установленным в одно из условий</translation> </message> </context> <context> <name>qReal::interpretation::blocks::InputBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/inputBlock.cpp« line=«+27«/> <source>Input</source> <translation>Ввод</translation> </message> <message> <location line=«+9«/> <source>Input value for %1:</source> <translation>Введите значение для %1:</translation> </message> <message> <location line=«+29«/> <source>Only one link with &quot;%1&quot; is allowed</source> <translation>Разрешается только одна связь вида &quot;%1&quot;</translation> </message> <message> <location line=«+7«/> <source>One of the outgoing links must be marked with &quot;%1&quot;</source> <translation>Одна из исходящих связей должны быть помечена как &quot;%1&quot;</translation> </message> <message> <location line=«+7«/> <source>Link to the next statement is missing</source> <translation>Не указан следующий блок</translation> </message> <message> <location line=«+36«/> <source>No outgoing links, please connect this block to something or use Final Node to end program</source> <translation>Нет исходящих связей. Пожалуйста, подключите этот блок к чему-нибудь или используйте блок &quot;Конец&quot;, чтобы завершить выполнение программы</translation> </message> <message> <location line=«+4«/> <source>There should be a maximum of TWO links outgoing from input block</source> <translation>От блока ввода должно исходить не более ДВУХ связей</translation> </message> <message> <location line=«-63«/> <source>Outgoing link is not connected</source> <translation>Исходящая связь ни к чему не подключена</translation> </message> <message> <location line=«+5«/> <location line=«+4«/> <location line=«+7«/> <source>cancel</source> <translation>отмена</translation> </message> <message> <source>Two links marked with &quot;cancel&quot; found</source> <translation type=«vanished«>Обе связи помечены условием &quot;cancel&quot;</translation> </message> <message> <source>At least one of the two links must be marked with &quot;cancel&quot;</source> <translation type=«vanished«>Должна быть как минимум одна связь из двух с маркером &quot;cancel&quot;</translation> </message> <message> <source>At least one link must be not marked with &quot;cancel&quot;</source> <translation type=«vanished«>Хотя бы одна связь должна быть не с маркером &quot;cancel&quot;</translation> </message> <message> <location line=«+33«/> <source>You must input some value!</source> <translation>Вы должны ввести какое-нибудь значение!</translation> </message> </context> <context> <name>qReal::interpretation::blocks::JoinBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/joinBlock.cpp« line=«+32«/> <source>Link outgoing from join block must have surviving thread id in its &apos;Guard&apos; property</source> <translation>Связь, исходящая из блока &quot;Слияние задач&quot;, должна быть помечена идентификатором задачи, продолжающей работу после слияния</translation> </message> </context> <context> <name>qReal::interpretation::blocks::KillThreadBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/killThreadBlock.cpp« line=«+24«/> <source>Need to specify a thread to be stopped</source> <translation>Необходимо указать задачу, которая должна быть остановлена</translation> </message> </context> <context> <name>qReal::interpretation::blocks::LoopBlock</name> <message> <source>There must be an outgoing link with property &lt;b&gt;Guard&lt;/b&gt; set as &lt;b&gt;iteration&lt;/b&gt;. See help, chapter &lt;i&gt;Programming&lt;/i&gt;</source> <translation type=«vanished«>Необходима исходящая из блока связь, в которой в значении свойства &lt;b&gt;Условие&lt;/b&gt; установлено в &lt;b&gt;итерация&lt;/b&gt;. Подробности см. в справке в разделе &lt;i&gt;Создание программ&lt;/i&gt;</translation> </message> <message> <location filename=«../../qrutils/interpreter/blocks/loopBlock.cpp« line=«+43«/> <source>There must be a link with &quot;body&quot; marker on it</source> <translation>Из блока &quot;Цикл&quot; должна выходить стрелка с маркером &quot;тело цикла&quot;</translation> </message> <message> <location line=«+4«/> <source>Outgoing link is not connected</source> <translation>Исходящая связь ни к чему не подключена</translation> </message> <message> <location line=«+9«/> <source>Two links marked as &quot;body&quot; found</source> <translation>Найдено две связи, помеченные как &quot;тело цикла&quot;</translation> </message> <message> <source>Two links marked as &quot;iteration&quot; found</source> <translation type=«vanished«>Найдено две связи, помеченные как &quot;итерация&quot;</translation> </message> <message> <location line=«+20«/> <source>There must be a non-marked outgoing link</source> <translation>Должна быть непомеченная исходящая связь</translation> </message> </context> <context> <name>qReal::interpretation::blocks::PreconditionalLoopBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/preconditionalLoopBlock.cpp« line=«+41«/> <source>Outgoing link is not connected</source> <translation>Исходящая связь ни к чему не подключена</translation> </message> <message> <location line=«+10«/> <source>Two links marked as &quot;body&quot; found</source> <translation>Найдено две связи, помеченные как &quot;тело цикла&quot;</translation> </message> <message> <location line=«+8«/> <location line=«+7«/> <source>There must be a link with &quot;body&quot; marker on it</source> <translation>Из блока &quot;Цикл&quot; должна выходить стрелка с маркером &quot;тело цикла&quot;</translation> </message> <message> <location line=«+5«/> <source>There must be a non-marked outgoing link</source> <translation>Должна быть непомеченная исходящая связь</translation> </message> </context> <context> <name>qReal::interpretation::blocks::ReceiveThreadMessageBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/receiveThreadMessageBlock.cpp« line=«+25«/> <source>Need to specify variable which will contain received message</source> <translation>Необходимо указать переменную, которая будет содержать полученное сообщение</translation> </message> </context> <context> <name>qReal::interpretation::blocks::SendThreadMessageBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/sendThreadMessageBlock.cpp« line=«+23«/> <source>Need to specify a receiving thread in &apos;Thread&apos; property</source> <translation>Необходимо указать задачу-получателя сообщения</translation> </message> </context> <context> <name>qReal::interpretation::blocks::SubprogramBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/subprogramBlock.cpp« line=«+35«/> <source>Please enter valid c-style name for subprogram &quot;</source> <translation>Укажите корректный идентификатор подпрограммы (в c-стиле)</translation> </message> </context> <context> <name>qReal::interpretation::blocks::SwitchBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/switchBlock.cpp« line=«+36«/> <source>There must be at list TWO links outgoing from switch block</source> <translation>От блока выбора должно отходить минимум ДВЕ связи</translation> </message> <message> <location line=«+7«/> <source>Outgoing link is not connected</source> <translation>Исходящая связь ни к чему не подключена</translation> </message> <message> <location line=«+9«/> <source>There must be exactly one link without marker on it (default branch)</source> <translation>Ветка без маркера должна быть в точности одна (ветка &quot;default&quot;)</translation> </message> <message> <location line=«+14«/> <source>There must be a link without marker on it (default branch)</source> <translation>Должна быть связь без маркера (ветка &quot;default&quot;)</translation> </message> <message> <source>There must be exactly one link with empty &apos;Guard&apos; property (default branch).</source> <translation type=«vanished«>Связь с пустым свойством &quot;Условие&quot; должна быть только одна (ветка &quot;default&quot;).</translation> </message> <message> <location line=«-9«/> <source>Duplicate case branch: &apos;%1&apos;</source> <translation>Найдено более одной ветки &apos;%1&apos;</translation> </message> <message> <source>There must be a link with empty &apos;Guard&apos; property (default branch).</source> <translation type=«vanished«>От блока &quot;Выбор&quot; должна отходить ветка с пустым свойством &quot;Условие&quot; (ветка &quot;default&quot;).</translation> </message> </context> <context> <name>qReal::interpretation::blocks::UnsupportedBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/unsupportedBlock.cpp« line=«+21«/> <source>Block of a type which is unsupported by an interpreter</source> <translation>Блок типа, не поддерживаемого в интерпретаторе</translation> </message> </context> <context> <name>qReal::ui::ConsoleDock</name> <message> <location filename=«../../qrutils/widgets/consoleDock.cpp« line=«+50«/> <source>Reset shell</source> <translation>Очистить консоль</translation> </message> </context> <context> <name>qReal::ui::ImagePicker</name> <message> <location filename=«../../qrutils/widgets/imagePicker.cpp« line=«+35«/> <source>Browse…</source> <translation>Обзор…</translation> </message> <message> <location line=«+35«/> <source>Select image</source> <translation>Выберите изображение</translation> </message> <message> <location line=«+2«/> <source>Images (*.png *.svg *.jpg *.gif *.bmp);;All files (*.*)</source> <translation>Картинки (*.png *.svg *.jpg *.gif *.bmp);;Все файлы (*.*)</translation> </message> </context> <context> <name>qReal::ui::SearchLineEdit</name> <message> <location filename=«../../qrutils/widgets/searchLineEdit.cpp« line=«+31«/> <source>Clear text</source> <translation>Очистить текст</translation> </message> <message> <location line=«+1«/> <source>Case insensitive</source> <translation>Не учитывать регистр</translation> </message> <message> <location line=«+1«/> <source>Case sensitive</source> <translation>Учитывать регистр</translation> </message> <message> <location line=«+1«/> <source>Regular expression</source> <translation>Регулярное выражение</translation> </message> <message> <location line=«+9«/> <source>Enter search text…</source> <translation>Введите текст поиска…</translation> </message> </context> <context> <name>qReal::ui::SearchLinePanel</name> <message> <location filename=«../../qrutils/widgets/searchLinePanel.cpp« line=«+134«/> <location line=«+10«/> <source>Enter search text…</source> <translation>Введите текст поиска…</translation> </message> <message> <location line=«+11«/> <source>&lt;line&gt;:&lt;column&gt;</source> <translation>&lt;строка&gt;:&lt;столбец&gt;</translation> </message> </context> <context> <name>utils::MetamodelGeneratorSupport</name> <message> <location filename=«../../qrutils/metamodelGeneratorSupport.cpp« line=«+72«/> <source>Please, fill compiler settings</source> <translation>Пожалуйста, заполните форму настроек копмилятора в настройках</translation> </message> <message> <location line=«+20«/> <source>Cannot unload plugin</source> <translation>Не могу отгрузить плагин</translation> </message> <message> <location line=«+23«/> <source>Cannot load new editor</source> <translation>Не могу загрузить новый редактор</translation> </message> <message> <location line=«+6«/> <source>Cannot build new editor</source> <translation>Не могу скомпилировать новый редактор. Проверьте имена элементов</translation> </message> </context> <context> <name>utils::QRealMessageBox</name> <message> <location filename=«../../qrutils/widgets/qRealMessageBox.cpp« line=«+30«/> <source>Ok</source> <translation>Да</translation> </message> <message> <location line=«+1«/> <source>Open</source> <translation>Открыть</translation> </message> <message> <location line=«+1«/> <source>Save</source> <translation>Сохранить</translation> </message> <message> <location line=«+1«/> <source>Cancel</source> <translation>Отмена</translation> </message> <message> <location line=«+1«/> <source>Close</source> <translation>Закрыть</translation> </message> <message> <location line=«+1«/> <source>Discard</source> <translation>Отменить</translation> </message> <message> <location line=«+1«/> <source>Apply</source> <translation>Применить</translation> </message> <message> <location line=«+1«/> <source>Reset</source> <translation>Сбросить</translation> </message> <message> <location line=«+1«/> <source>Help</source> <translation>Помощь</translation> </message> <message> <location line=«+1«/> <source>Save All</source> <translation>Сохранить все</translation> </message> <message> <location line=«+1«/> <source>Yes</source> <translation>Да</translation> </message> <message> <location line=«+1«/> <source>Yes To All</source> <translation>Да для всех</translation> </message> <message> <location line=«+1«/> <source>No</source> <translation>Нет</translation> </message> <message> <location line=«+1«/> <source>No To All</source> <translation>Нет для всех</translation> </message> <message> <location line=«+1«/> <source>Abort</source> <translation>Остановить</translation> </message> <message> <location line=«+1«/> <source>Retry</source> <translation>Повторить</translation> </message> <message> <location line=«+1«/> <source>Ignore</source> <translation>Игнорировать</translation> </message> <message> <location line=«+1«/> <source>NoButton</source> <translation>Не кнопка</translation> </message> <message> <location line=«+2«/> <source>Restore Defaults</source> <translation>Восстановить по умолчанию</translation> </message> <message> <source>yes</source> <translation type=«vanished«>Да</translation> </message> </context> <context> <name>utils::sensorsGraph::SensorViewer</name> <message> <source>Save values history</source> <translation type=«vanished«>Сохранить историю показаний</translation> </message> <message> <source>Comma-Separated Values Files (*.csv)</source> <translation type=«vanished«>Значения, разделенные запятой (*.csv)</translation> </message> <message> <source>value: </source> <translation type=«vanished«>значение: </translation> </message> </context> <context> <name>utils::sensorsGraph::SensorsGraph</name> <message> <source>Stop tracking</source> <translation type=«vanished«>Остановить слежение</translation> </message> <message> <source>Start tracking</source> <translation type=«vanished«>Начать слежение</translation> </message> <message> <source>Reset plot</source> <translation type=«vanished«>Очистить график</translation> </message> <message> <source>Zoom In</source> <translation type=«vanished«>Приблизить</translation> </message> <message> <source>Zoom Out</source> <translation type=«vanished«>Отдалить</translation> </message> <message> <source>Export values…</source> <translation type=«vanished«>Экспорт значений…</translation> </message> <message> <source>Export values</source> <translation type=«obsolete«>Экспорт значений…</translation> </message> </context> <context> <name>watchListWindow</name> <message> <location filename=«../../qrutils/watchListWindow.ui« line=«+41«/> <source>Watch List</source> <translation>Переменные</translation> </message> <message> <location line=«+59«/> <source>Name</source> <translation>Имя</translation> </message> <message> <location line=«+5«/> <source>Value</source> <translation>Значение</translation> </message> </context> </TS>

 -- Executing [s@macro-dialout-trunk:20] NoOp("SIP/222-00000034", "Dial failed for some reason with DIALSTATUS = CONGESTION and HANGUPCAUSE = 21") in new stack
-- Executing [s@macro-dialout-trunk:21] Goto("SIP/222-00000034", "s-CONGESTION,1") in new stack
-- Goto (macro-dialout-trunk,s-CONGESTION,1)
-- Executing [s-CONGESTION@macro-dialout-trunk:1] Set("SIP/222-00000034", "RC=21") in new stack
-- Executing [s-CONGESTION@macro-dialout-trunk:2] Goto("SIP/222-00000034", "21,1") in new stack
-- Goto (macro-dialout-trunk,21,1)
-- Executing [21@macro-dialout-trunk:1] Goto("SIP/222-00000034", "continue,1") in new stack
-- Goto (macro-dialout-trunk,continue,1)
-- Executing [continue@macro-dialout-trunk:1] GotoIf("SIP/222-00000034", "1?noreport") in new stack
-- Goto (macro-dialout-trunk,continue,3)
-- Executing [continue@macro-dialout-trunk:3] NoOp("SIP/222-00000034", "TRUNK Dial failed due to CONGESTION HANGUPCAUSE: 21 - failing through to other trunks") in new stack
-- Executing [continue@macro-dialout-trunk:4] Set("SIP/222-00000034", "CALLERID(number)=222") in new stack
-- Executing [89851475713@from-internal:5] Macro("SIP/222-00000034", "outisbusy,") in new stack
-- Executing [s@macro-outisbusy:1] Progress("SIP/222-00000034", "") in new stack
-- Executing [s@macro-outisbusy:2] GotoIf("SIP/222-00000034", "0?emergency,1") in new stack
-- Executing [s@macro-outisbusy:3] GotoIf("SIP/222-00000034", "0?intracompany,1") in new stack
-- Executing [s@macro-outisbusy:4] Playback("SIP/222-00000034", "all-circuits-busy-now&pls-try-call-later, noanswer") in new stack
-- <SIP/222-00000034> Playing 'all-circuits-busy-now.gsm' (language 'en')
-- <SIP/222-00000034> Playing 'pls-try-call-later.gsm' (language 'en')
  == Spawn extension (macro-outisbusy, s, 4) exited non-zero on 'SIP/222-00000034' in macro 'outisbusy'
  == Spawn extension (from-internal, 89851475713, 5) exited non-zero on 'SIP/222-00000034'
    -- Executing [h@from-internal:1] Macro("SIP/222-00000034", "hangupcall") in new stack
    -- Executing [s@macro-hangupcall:1] GotoIf("SIP/222-00000034", "1?noautomon") in new stack
    -- Goto (macro-hangupcall,s,3)
    -- Executing [s@macro-hangupcall:3] NoOp("SIP/222-00000034", "TOUCH_MONITOR_OUTPUT=") in new stack
    -- Executing [s@macro-hangupcall:4] GotoIf("SIP/222-00000034", "1?skiprg") in new stack
    -- Goto (macro-hangupcall,s,7)
    -- Executing [s@macro-hangupcall:7] GotoIf("SIP/222-00000034", "1?skipblkvm") in new stack
    -- Goto (macro-hangupcall,s,10)
    -- Executing [s@macro-hangupcall:10] GotoIf("SIP/222-00000034", "1?theend") in new stack
    -- Goto (macro-hangupcall,s,12)
    -- Executing [s@macro-hangupcall:12] Hangup("SIP/222-00000034", "") in new stack
  == Spawn extension (macro-hangupcall, s, 12) exited non-zero on 'SIP/222-00000034' in macro 'hangupcall'
  == Spawn extension (from-internal, h, 1) exited non-zero on 'SIP/222-00000034'
  == MixMonitor close filestream
  == End MixMonitor Recording SIP/222-00000034
sip*CLI>

Почему исходящие звонки не работают ?
Аторизация по IP входящие звонки проходят , исходящие нет ,лог звонка выше 

Настройки транка:
type=peer
host=195.94.224.208
dtmfmode=rfc2833
insecure=port,invite
conext=contex-internal
allow=g723&g723.1&gsm&ulaw&alaw

Заранее благодарен за помощь !

спросил


2012-03-26 13:58:53 +0400

hubermx Gravatar hubermx
121 5 1 9

А не в том ли проблема, что у Вас транк как peer прописан?

ответил


2012-03-26 14:03:11 +0400

tesak89 Gravatar tesak89 flag of Russian Federation
422 25 2 16

conext=contex-internal

ошибка в названии директиве.
Плюс разберитесь в последовательности кодеков.
И на последок поможет анализ дебага с сессии.

ответил


2012-03-26 16:47:55 +0400

zzuz Gravatar zzuz flag of Russian Federation
7174 2 6 75

http://line24.ru/


Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке «Файлы работы» в формате PDF

TRIK Studio – среда текстового и визуального программирования образовательных конструкторов роботов. TRIK Studio появилась как развитие проекта кафедры системного программирования СПбГУ QReal: Robots. В официальной версии имеется поддержка конструкторов LegoMindstorms NXT, LegoMindstorms EV3 и ТРИК. Каждый из этих конструкторов может быть запрограммирован на одном из двух визуальных языков – более простом, построенном на модели потока управления, или более сложном языке программирования потоков данных – либо на одном из нескольких текстовых. Для Lego NXT доступны языки NXT OSEK C и русскоязычная версия C (для облегчения изучения текстовых языков), для ТРИК – JavaScript, F# или PascalABC.NET , для Lego EV3 поддержан единственный официальный язык программирования стандартной прошивки – байткод виртуальной машины EV3.

Программа на визуальном языке (визуальная диаграмма) может быть исполнена в трех режимах:

отладка на симуляторе

отладка на компьютере с посылкой пакетов на робота по одному из физических каналов (USB, Bluetooth, Wi–Fi)

режим генерации кода на текстовом языке (одном из вышеупомянутых) с последующим автономным исполнением его на роботе.

В режиме отладки на симуляторе диаграмма интерпретируется на двумерной имитационной модели робота

Пользователь имеет возможность нарисовать двумерную модель мира из стенок, цветных элементов и разметки регионов. Такая возможность, по отзывам пользователей, является очень удобной для первоначальной отладки программы перед каким – либо взаимодействием с роботом. Опыт использования показал, что в редакторе модели мира можно создать или усложнить большинство полей и полос препятствий, используемых на соревнованиях по спортивной робототехнике.

Наличие симулятора дает возможность обучения программированию и кибернетике в образовательных учреждениях, которые не имеют реальных роботов. Существует так – же экспериментальная поддержка отладки на трехмерном симуляторе роботов VRep. Отладка на компьютере с посылкой команд роботу (режим интерпретации в терминах среды) удобна для отслеживания поведения программы на целевом устройстве в реальном времени. В режиме интерпретации можно отслеживать значения переменных в соответствующем окне среды, а также строить в реальном времени графики значений с датчиков. Режим генерации кода позволяет перейти от визуального представления программы к текстовому. Тестовый код отображается во встроенном редакторе qscintilla3, который обладает возможностью полноценного редактора кода. В дистрибутив среды входят все необходимые инструменты для построения и передачи программ на робота, поэтому процесс компиляции и взаимодействия с контроллерами роботов остается полностью «прозрачным» для пользователей (пользователи – новички до определенного момента даже не догадываются о его существовании).

Среда написана на языке C++ с инструментарием Qt5 , поэтому является кроссплатформенной (доступны установочные пакеты под Windows, Linux и Mac OS X). При этом, даже несмотря на то, что официальные драйвера для Lego NXT не доступны для Linux и Mac OS X x64, в TRIK Studio существует собственная их реализация. Среда полностью бесплатна, имеет открытый исходный код и распространяется под лицензией ApacheLicense 2.0.

Среда поддерживает как визуальный, так и текстовый язык программирования.

Визуальный язык программирования представляется в виде блоков и связей между ними. Основные блоки Trik Studio и их описание представлено в таблице 1.

Таблица 1

Описание основных блоков Trik Studio

Название

Изображение

Описание

Основные параметры

Начало программы

 

Начальная точка выполнения программы. На каждой диаграмме должен быть только один такой блок, в него недолжно быть входящих связей, а исходящая связь из этого элемента должна быть одна.

Процесс интерпретации диаграммы должен начинаться именно с этого блока.

Конец программы

 

Конец программы. Если программа состоит из нескольких параллельных участков выполнения, достижение этого блока завершает соответствующий участок выполнения.

У данного блока не может быть исходящих связей.

Таймер

 

Выполняет заданное количество времени в миллисекундах.

 

Моторы и вперед назад

 

Включает и выключает моторы по заданным портам с заданной мощности.

Мощность включается в процентах от –100 до 100, если задано отрицательное значение, то включается реверс.

Сброс показаний энкодера

 

Сбрасывает показания количества оборотов моторов по указанным портам

 

Моторы стоп

 

Выключает моторы по заданным портам.

 

Подпрограмма

 

Используется для того, чтобы вынести повторяющиеся фрагменты программы на отдельную диаграмму, а потом вызывать фрагмент программы с этой диаграммы в нескольких местах основной программы или другой подпрограммы.

При добавлении этого блока на диаграмму будет предложено ввести имя подпрограммы. Кроме того появится дополнительная палитра со всеми подпрограммами, подпрограммы из неё можно перетаскивать на сцену и использовать как обычные блоки

Функция

 

Считает значение заданного выражения. Также в данном блоке допускается определение переменных.

 

Условие и конец условия

 

Разделяет выполнение программы в соответствии с заданным условием. Значением параметра является некое логическое выражение, на основе значения которого будет осуществлен выбор дальнейшего пути выполнения программы.

У данного блока должны быть две исходящие связи, у одной из которых должно быть задано значение параметра «Условие» (истина и ложь). При невыполнении данного условия невыполнение передается по другой связи

Цикл

 

Блок, организующий выполнение последовательности блоков несколько раз, Число повторений задается значением параметром «Итерации».

Блок должен иметь две исходящие связи, одна из которых должна быть помечена значением «Тело цикла». Другая связь исходящая из блока «Цикл», должна оставаться непомеченной по ней будет осуществляться переход когда программа пройдет через блок «Цикл» указанное число раз.

Параллельные задачи и завершение задачи

 

Разделяет исполнение задач на несколько, которые будут исполняться параллельно. Этот блок должен иметь как минимум две исходящие связи.

Свойство «Условие» во всех исходящих связей должно содержать уникальные идентификаторы задач, и один из этих идентификаторов должен совпадать с идентификатором задачи, из которой вызван этот блок.

Датчики расстояния: ультразвуковой и инфракрасный

 

Ждет, пока расстояние, возвращаемое ультразвуковым датчиком расстояния, не будет сравнимо с указанным в значении параметра «Расстояние»

Параметром указывается операция, которая будет использоваться для сравнения с введенным расстоянием.

При движении по лабиринту основными действиями робота являются поворот направо/налево и движение прямо. Реализация основных действий робота представлены на рисунке.

Рисунок 9. Поворот на право

Рисунок 1. Поворот налево

Рисунок 2. Движение прямо

Задача 2. Движение по заранее известному лабиринту. Пусть нам известен лабиринт, представленный на рисунке 12.

Рисунок 3. Лабиринт

Программа движения по известному лабиринту на визуальном языке программирования Trik Studio представлена на рисунке 4.

Рисунок 4. Программа выхода из известного лабиринта

Рисунок 5. Программа с защитой от застреваний

Для определения наличия препятствия нужен датчик расстояния. Ими являются инфракрасный датчик и ультразвуковой датчик.

Всегда можно найти выход из незнакомого лабиринта, если этот выход существует. Роботу, чтобы обойти незнакомый лабиринт, потребуется два датчика расстояния и правило правой руки. Конечно, двигаясь по правилу правой руки, робот проходит гораздо больший путь.

Далеко не всегда в алгоритме предусмотрено соответствующая о своей безопасности. Поэтому необходимо предусмотреть возможность автоматической реакции на непредвиденные обстоятельства.

Но что произойдет, если робот перестанет реагировать на появление препятствия и застрянет у ножки стула или камень? Следует предусмотреть такую ситуацию в алгоритме движения. В этом деле помогут параллельные задачи.

Параллельные задачи – это независимые процессы, которые выполняют одновременно на одном контролере, разделяя между собой его ресурсы. Программа робота может содержать несколько задач, которые будут запущены параллельно, независимо друг от друга. При параллельном программировании, как правило, есть основная задача, а команды остальных задач выполняются в моменты появления задержек в основной. Именно поэтому в параллельных задачах для робота не следует делать циклы без задержек.

Для реализации защиты от застреваний можно использовать сторожевой таймер. Эта функция напоминает диспетчера охранной компании, который каждый час принимает дежурный звонок от сторожа на охранном объекте. Если сторож не позвонил через час, диспетчер поднимает тревогу и на объект выезжает отряд немедленного реагирования. В нашем случае отсутствие звонка от сторожа – это отсутствие реакции датчика расстояния на какое – либо препятствие, а вместо отряда реагирования будет вызываться подпрограмма «Отъезд».

Внутри включенного контроллера всегда работают часы, которые позволяют отмерять время в миллисекундах, например запуска программы. За это отвечает функция time (), которую можно использовать для контроля реакции на объекты.

Но что делать если сработала защита от застреваний, робот начал выполнять отъезд и видел объект. В основной задаче сразу будет вызвана подпрограмма «Отъезд», которая и так уже работает. В этом случае возможна коллизия – наложение двух противоречащих друг другу команд на управление моторами. Как это предотвратить? Достаточно ввести переменную – флаг, с помощью которой будет обеспечен вызов подпрограммы «Отъезд», либо при появлении объекта на пути, либо при срабатывании сторожевого таймера

Рисунок 6. Подпрограмма «Отъезд»

Исходя из предыдущего примера можно сформулировать следующее правило: из параллельных задач нельзя обращаться к одним и тем же устройствам робота моторам и датчикам.

Список литературы

Базовые компоненты робота [Электронный ресурс] – Электрон. дан. Режим доступа:   http://vex.examen  technolab.ru/lessons/unit_2_introduction_to_robotics/44/Заглсэкрана.

Лучин, Р. М. Платформа ТРИК: новые задачи и новые возможности // VI Всероссийская конференция «Современное технологическое обучение: от компьютера к роботу» (сборник тезисов). [Текст] / Р. М. Лучин ЗАО «Полиграфическое предприятие № 3», 2016. – 166 с.

Макаров И.М., Топчиев Ю.И. Робототехника, история и перспективы. [Текст] / И.М Макаров М.: Наука, МАИ, 2003. – 166 с.

Набор робота Lego Ev 3 [Электронный ресурс] URL: http://www.prorobot.ru/lego/nxt_ev3.php – Загл. с экрана.

Определения робототехники основные [Электронный ресурс] URL:http://referatwork.ru/category/obrazovanie/view/226112_osnovnye_ponyatiya_robototehniki – Загл. с экрана.

Пример лабиринтов и их виды [Электронный ресурс]. – Электрон.дан. Режим доступа: https://studfiles.net/preview/3602333/page:13 – Загл. с экрана.

Робот для состязаний: выход из лабиринта. Часть I [Электронный ресурс] – Электрон.дан. Режим доступа:http://nnxt.blogspot.com/2011/02/i.html

Руководство пользователя Lego MindStorms Education Ev3 [Электронный ресурс] Электрон.дан. Режим доступа: http://soiro.ru/sites/defalt/files/lego_ev3_r ukovodstvo_polzovatelya.pdf – Загл. с экрана

Трик студио Среда программирования [Электронный ресурс] – Электрон.  дан. Режим доступа:http://nauchkor.ru/uploads/documents/587d36915f1be77c40d59297.pdf – Загл. с экрана.

Хомченко, В. Г. Мехатронные и робототехнические системы [Текст] / В. Г. Хомченко, В. Ю. Соломин. – Омск. Издательство ОмГТУ, 2008. – 125 с.

Если вы столкнулись с невозможностью совершить исходящий звонок, прежде всего необходимо понять: сбой происходит на уровне вашей АТС 3CX, либо на уровне провайдера. Для того, чтобы это понять, совершите тестовый исходящий вызов (который будет неуспешным). Затем, обновите главную страницу веб-панели администрирования 3CX и в самом низу страницы, в Журнале событий сервера, проверьте, присутствует ли запись вида:

Call or Registration to 71234567890@******* has failed. Y.Y.Y.Y replied: 403 Auth Failed; from IP:Y.Y.Y.Y:5060

В указанном примере: 71234567890 – набранный вами номер, ******* – произвольное обозначение внешней линии, Y.Y.Y.Y – ip-адрес провайдера, через который должен был осуществляться этот вызов.

Обращаем внимание, в журнале событий 3CX всегда использует ip-адреса, даже если в настройках транка указано доменное имя SIP-сервера. Чтоб правильно понять запись в журнале событий, выясните ip-адрес вашего провайдера. Например, командой ping в командной строке Windows.

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

Если же запись с ошибкой, именно с ошибкой от провайдера, в журнале событий присутствует, то делаем вывод – АТС 3CX “выпустила” вызов наружу и отправила его провайдеру, провайдер ответил ошибкой, в связи с чем исходящий звонок не удался. Ниже приводим вероятные причины такого поведения провайдера:

  • На вашем лицевом счете закончились деньги. Зайдите в личный кабинет провайдера и проверьте состояние счета. При необходимости, пополните счет.
  • По какой-то причине SIP-транк 3CX не смог зарегистрироваться у провайдера, поэтому исходящие звонки через него не проходят. Зайдите в раздел “SIP транки” и обратите внимание, помечен ли нужный транк зеленым кружком. Если кружок красный, значит 3CX не может зарегистрировать SIP-транк у провайдера. Вероятные причины – проблемы с интернет соединением на вашем сервере 3CX, либо какой-то сбой у провайдера. В редких случаях ip-адрес провайдера может попасть в черный список 3CX. Проверьте состояние черного списка ip-адресов и удалите ip-адрес провайдера, если он там есть. Подробнее о черном списке – здесь. Если регистрация отсутствует, попробуйте выделить транк и нажать кнопку “Обновить регистрацию” в списке SIP-транков. После чего обновите страницу и проверьте состояние регистрации. Регистрацию у провайдера стоит проверять при условии, если транк использует авторизацию по логину и паролю. Если используется авторизация по ip-адресу, тогда нет смысла смотреть состояние регистрации – такой SIP-транк всегда будет выглядеть зарегистрированным, даже если оператор (по какой-либо причине) с вашей АТС не принимает ни одной SIP-команды.
  • Ваше исходящее правило разрешает звонки через провайдера, но формат набираемого номера неверен. У каждого провайдера свой “стандарт” набираемого номера, у одного номер должен начинаться с “8”, у другого —  с “7”, у третьего – еще как-нибудь. Правильный формат набираемого номера лучше всего уточнить у провайдера и подкорректировать исходящее правило для приведения формата к нужному виду.
  • Провайдер может отбивать исходящие звонки по причине того, что SIP-заголовки в сообщениях INVITE, которые генерирует 3CX при исходящем звонке, не соответствуют формату, который ожидает провайдер. В данном случае потребуется тонкая настройка SIP-транка. В свойствах любого SIP-транка во вкладке Исходящие параметры можно подстраивать SIP-заголовки, но сперва нужно получить от провайдера информацию, в каком заголовке и что именно требуется поменять. В таких случаях обычно делают захват трафика при совершении проблемного звонка, затем этот захват передают оператору, и он уже, анализируя его, сообщает вам, что не так, и что нужно поправить.
  • Провайдер может отбивать исходящие звонки по причине того, что ваш исходящий номер, который передается в транк, некорректен. Проверьте значения, указанные в свойствах пользователя (добавочного номера) в поле “Исходящий Caller ID”, а также значения полей SIP-транка “Основной номер транка” (вкладка Основные в свойствах транка) и “Caller ID по умолчанию” (вкладка Caller ID в свойствах транка).

Задать свой вопрос


* Если мы не смогли полно ответить на ваш вопрос, или вы искали другую информацию, которой нет в нашей базе знаний, обращайтесь в нашу компанию по телефону или по e-mail. Обращаем внимание: для всех новых клиентов, которые находятся на стадии изучения 3CX и определяются с покупкой, мы предлагаем полностью бесплатную поддержку, а для коммерческих инсталляций действует лояльная ценовая политика. Более подробно читайте по ссылке.

Содержание

  1. Проблемы с исходящими звонками
  2. Содержание
  3. Описание проблемы
  4. Диагностика с помощью лога TRN
  5. Урок 25 Маршрутизация исходящих вызовов
  6. Содержание
  7. Введение
  8. Сценарий исходящей маршрутизации
  9. Блок: Определение набранного номера
  10. Блок: Набор номера в сценарии
  11. Блок: Анализ номера и маршрутизация вызова
  12. Назначение сценария
  13. Сценарий набора быстрых/внешних номеров
  14. Назначение сценария

Проблемы с исходящими звонками

Содержание

Описание проблемы

Проблема: Не получается совершить исходящий звонок.

1. Проверьте следующие сценарии:

  • Сценарий исходящей маршрутизации. Линии провайдера должны быть отмечены в компоненте «Переключение на внешний номер» (свойство «Направления»). Возможен вариант выбора «Все линии».

Также проверьте свойства компонента «Caller Id» и «Caller Name». Вы можете использовать эти поля только в том случае, если провайдер связи разрешает подмену номера. Если такой возможности нет, удалите данные из этого поля.

  • Сценарий автодозвона и сценарий набора внешних/быстрых номеров. Линии провайдера должны быть отмечены в компоненте «Дозвон» (свойство «Направления»). Возможен вариант выбора «Все линии«.

Внимательно проверьте логику данных сценариев. Напоминаем, что после компонента «Переключение» должен стоять компонент «Стоп», а не «Обрыв связи».

2. Проверьте в модуле Администрирование/Мониторинг, зарегистрированы ли внешние линии (имеют значок в виде зеленой трубки). В случае проблем, обратитесь к статье Не устанавливается регистрация на сервере SIP провайдера

3. В модуле Администрирование/Параметры аппаратуры в настройках шлюза укажите явный интерфейс для соединения. По умолчанию, default — автоматическое определение интерфейса.

4. Поинтересуйтесь у провайдера на какие номера (направления) вы можете совершать исходящие звонки. Возможно, вам разрешено делать звонки только на городские линии.

5. Возможно, у провайдера связи неисправности с оборудованием. Уточните этот вопрос, позвонив в его техническую поддержку.

Диагностика с помощью лога TRN

Точнее всего диагностировать данную проблему можно анализируя лог-журналы oktell или трассировку пакетов wireshark, но для этого необходимо иметь определенные знания sip-протокола. Воспользуйтесь сборщиком лог-журналов (подробнее в статье Сборка_лог-журналов) и соберите лог-журнал(hardwaresiptrn) за время +- 10 минут с момента попытки перерегистрации. Также лог-журнал вы можете найти в папке oktellserverLogHardwareSIPtrn_[дата].log.

В логе trn фиксируются все поступившие пакеты на сервер Oktell. Найдите пакет Invite, который был отправлен провайдеру. По Call-ID пакета найдите ответ от провайдера, в котором может содержаться причина неисправности. С этой ошибкой вы также можете обратиться к провайдеру связи для разъяснения. Расшифровку SIP-ответов можете прочитать в статье SIP ответы и их значения.

Пример совершения исходящего звонка на SIPNET: Oktell отправляет пакет Invite и получает ответ 100 Trying. Если посмотреть далее, то можно увидеть ответ 200 OK, который обозначает успешное соединение. В случае проблем вы можете увидеть ответ с кодом ошибкой, например 503 Service Unavailable. Расшифровку SIP-ответов можете прочитать в статье SIP ответы и их значения.

Источник

Урок 25 Маршрутизация исходящих вызовов

Содержание

Введение

На прошлом уроке мы разбирались с приемом и обработкой входящих соединений, на этом уроке мы разберемся с исходящими вызовами. Все исходящие вызовы разделяют на две группы — исходящие на внешние линии и внутренние звонки (на внутренние линии).

В системе Oktell совершить исходящий звонок различными способами:

  • Когда пользователь системы набирает номер со своего устройства запускается сценарий IVR исходящей маршрутизации
  • Во время перевода звонка используется сценарий IVR маршрутизации при переводе звонка (если он отсутствует используется сценарий исходящей маршрутизации)
  • Если вызов номера происходит в рамках сбора конференции, запускается служебный сценарий набора внешних/быстрых номеров (если приглашен внешний номер) или служебный сценарий набора внутренних номеров при приглашении в конференцию (если приглашен внутренний номер)
  • Система может самостоятельно инициировать звонок, например, через служебный сценарий, сервис автодозвона или менеджер задач.

В каждом из этих сценариев в первую очередь определяется тип набранного номера: внутренний или внешний. Если набран внешний — необходимо определить по каким линиям пойдет набор, это требуется для оптимизации расходов. Например, для совершения междугородних вызовов по всей России потребуется особый тарифный план от крупного провайдера связи, а звонки на мобильные дешевле совершать через специальную SIM-карту в SIP-GSM шлюзе. Для этого выполняются необходимые проверки, например на длину номера, время совершения звонка, производятся запросы во внешние сервисы и обращение к базам данных. В итоге определяется выбор направления и совершается звонок. Особое внимание следует обратить защите от несанкционированных звонков на международные или платные короткие номера — их желательно запретить полностью или установить пароль доступа.

Сценарий исходящей маршрутизации

IVR сценарий маршрутизации исходящих вызовов — системный сценарий для набора внутренних и внешних номеров пользователями системы. Сценарий запускается во время набора номера с внутренней линии (IP-телефон, гарнитура, USB-телефон).

ВНИМАНИЕ: В этом и есть отличие, между внутренними и внешними линиями. Любой вызов с внешней линии попадает в IVR сценарий входящей маршрутизации, а вызовы с внутренних линий — в IVR сценарий исходящей маршрутизации.

Начиная проектирование сценария необходимо принять во внимание, что большинство IP-телефонов и софтфонов могут сразу передавать информацию о набранном номере еще до входа в сценарий, а аналоговые телефоны и USB-телефоны набирают номер уже после соединения. Если в первом случае можно определить набранный номер с помощью функции «Внешний номер (CalledId)«, то во втором — придется реализовывать набор номера в сценарии. Таким образом, мы получаем следующие блоки:

  • 1й блок будет анализировать есть ли набранный номер
  • 2й даст возможность совершить набор номера, если устройство его не передало
  • 3й произведет анализ набранного номера и совершит маршрутизацию по соответствующим направлениям.

Рассмотрим стандартный сценарий исходящей маршрутизации, который включен изначально в дистрибутив Oktell. Сценарий выглядит следующим образом:

Блок: Определение набранного номера

Компонент «НОМЕР=CalledID«. Определяет набранный номер и сохраняет его в переменную.

  • Переменной «НОМЕР» (строка) присваиваем значение функции CalledID(внешний номер)

Компонент «Номер пусто?«. Маршрутизирует пользователя на блок ввода номера, если набранный номер пуст.

  • Аргумент 1 — переменная «НОМЕР«
  • Аргумент 2 — пустая строка
  • Тип сравнения — «=«

Если равенство не выполнится — это будет означать,что некий набранный номер существует, мы сразу перейдем к блоку анализа набранного номера с последующей маршрутизацией.

Блок: Набор номера в сценарии

Если набранный номер равен пустоте это означает что устройство никакую информацию нам не передало, а значит необходимо вручную организовать набор номера.

Компонент «Начинаем собирать номер«. Используется воспроизведение с преднабором, цель которого получить первый цифру набираемого номера.

  • Файл — выберем файл с длинным гудком, snd_city_60_50sek.wav. Файл можно найти в папке OktellServerSnd
  • Буфер для DTMF — переменная «НОМЕР»
  • Очистить буфер — Да
  • Макс время, с — 20
  • Количество символов — 1, определяет минимальное количество символов для набора номера.
  • Переход — на компонент «Начинаем собирать номер»
  • Переход, таймаут — на компонент «Обрыв связи«. Если в течении 20 секунд (параметр Макс время, с) пользователь не набрал ни одного символа, сценарий завершается.

Компонент «+1 цифра«. Производит донабор номера — компонент принимает следующую цифру и добавляет ее в переменную «НОМЕР»

  • Буфер для DTMF — переменная «НОМЕР»
  • Очистить буфер — Такая настройка поможет записывать полученные символы в конец переменной не затирая предыдущее значение.
  • Макс время, с — 3, по истечению этого времени считается что набор номера произведен.
  • Количество символов — 1
  • Переход — на компонент «Пауза 2»
  • Переход, таймаут — на компонент «Длина номера».

Компоненты «Пауза 2» и «Пауза 3» с нулевой задержкой позволяют пользователю набирать столько цифр, сколько он пожелает. Как только пользователь перестанет набирать символы, то по истечению 3х секунд (параметр Макс время, с) сценарий будет считать, что номер набран и перейдет к следующему блоку. С помощью такой схемы мы зацикливаем ввод, давая таким образом пользователя по 3 секунды на ввод каждой цифры.

Блок: Анализ номера и маршрутизация вызова

Данный блок фактически является основной частью сценария. Здесь необходимо произвести анализ набранного номера и маршутизировать коммутацию на соответствующие направления. Если вам и придется делать какие-либо изменения, то, как правило, вы будет производить их именно в этой части сценария.

Компонент «Длина номера» — меню, задача которого определить тип набираемого номера и направить пользователя в соответствующую ветку.

  • Аргумент — выражение Len( [НОМЕР] ) , которое определяет длину набранного номера
  • Значения:

3 — на компонент «->».

  • Переход, прочее — на компонент «Внешние»

Таким образом, если длина номера составляет 3 символа,осуществляем переключения на внутренние номера. Если же аргумент принимает прочие значения,то осуществляем переход на компонент переключение на внешние линии, с указанием направлений.

ВНИМАНИЕ: Если у вас используются четырехзначные внутренние номера, вам нужно добавить в меню обработку длины номера в 4 символа. Здесь же иногда приходится добавлять ветку по длине номера в 10 символов — когда менеджеры набирают номер без «8» (или «7») спереди номера, например, 9171112233. В этом случае нужно преобразовать номер, добавив 8′ с помощью выражения: 8’+[НОМЕР].

Компонент «ВНЕШНИЕ» — переключение на внешние линии.

  • Номер — переменная «НОМЕР».
  • Тип набора — Без преобразований.
  • Тип вызова — Обычный
  • Направления — указываем внешние линии через которые должны осуществляться звонки на внешнюю сеть. По умолчанию, установлено «Все внешние линии».
  • Коммутировать сразу — выбираем: нет,прослушивать медиа-поток.

Значение «Нет, прослушивать медиа-поток» означает, что пока внешний абонент не поднимет трубку (ответ 200 OK), внутреннему пользователю Oktell будет воспроизводить гудки. Если звонок неудачный в статистике АТС вы увидите неудачную попытку и записи разговора не будет. Если выставить свойству значение «Нет, воспроизводить мелодию«, то вместо собственных гудков Oktell будет воспроизводить указанный файл.

Значение «Да» (то есть коммутировать сразу) означает полную передачу звука от провайдера, а также сразу засчитывание данной попытки как полноценной коммутации. В статистике АТС вы увидите полноценный разговор (хотя по факту его не было, например не подняли трубку). Отличие от предыдущего значения в том, что все звонки считаются успешными. Как правило, это портит статистику и применяется в редких случаях.

  • Переход — на компонент «Стоп 2»
  • Все остальные переходы — на компонент воспроизведения «busy«

ВНИМАНИЕ: Как правило, перед этим переключением находится еще ряд различных сравнений и функций, определяющих первые цифры номера, на какое направление его выгоднее направить. Возможно, обращение к внешним сервисам или базе данных для реализации какого-либо функционала. Подробнее можно прочитать в статье Выбор исходяшей линии по маске.

Компонент «ВНУТРЕННИЕ» — переключение на внутренние линии.

  • Назначение — Внутрь
  • Номер — переменная «НОМЕР»
  • Тип вызова — Обычный
  • Очередь ожидания — Нет
  • Время ожидания ответа — 20.
  • Переход — на компонент «Стоп 2»
  • Все остальные переходы — на компонент воспроизведения «busy«

Компонент «busy» — воспроизводит короткие гудки в случае неудачного соединения

  • Режим — Файл полностью.
  • Файл — выберем файл с длинным гудком, snd_busy_120sek.wav. Файл можно найти в папке OktellServerSnd

Переход — на компонент «Обрыв связи».

Таким образом, в случае отрицательного перехода,например вызываемый абонент не отвечает или не найдены внешние свободные линии — пользователь Oktell услышит короткие гудки, после чего сможет положить трубку.

ВНИМАНИЕ: Вместо коротких гудков вы можете вставить файл с записью причины отбоя. Например, после неудачного соединения вам в трубку произносится «К сожалению, номер занят. Чтобы оставить голосовое сообщение нажмите 1». Здесь можно использовать любой другой функционал, например сервис автодозвона или сервис уведомлений, когда номер освободится.

Назначение сценария

Сценарий исходящей маршрутизации назначается в модуле Администрирование/Общие настройки на вкладке «Сценарии АТС«. Для того, чтобы назначить сценарий выберите его в выпадающем списке напротив соответствующей строки и поставьте крестик для его активации, затем сохраните настройки. После выполнения данных действий сценарий будет дополнительно подсвечен синим цветом в списке.

Сценарий набора быстрых/внешних номеров

Что будет, если пользователь наберет быстрый номер? К примеру, пусть в системе имеется быстрый номер 500, под которым подразумевается внешний 84955294989. Когда пользователь совершит вызов, сценарий занесет в переменную НОМЕР значение 500. В связи с тем, что длина номера 3 знака — сценарий передаст управление компоненту «ВНУТРЕННИЕ», который попытается его набрать. На этом этапе система, обращается в свою базу данных и понимает, что на самом деле это внешний номер, а значит необходимо определить внешние линии, через которые он будет набираться.

На помощь нам приходит служебный сценарий набора быстрых/внешних номеров, на вход которого передается внешний номер для набора. В ходе работы сценарий должен определить внешние направления для совершения звонка и вернуть управление в сценарий исходящей маршрутизации (или другой управляющий модуль, который запустил этот сценарий).

ВНИМАНИЕ: В этом сценарии рекомендуется определить ту же логику оптимального выбора линии, как и в IVR сценарии исходящей маршрутизации. В противном случае, вы рискуете звонить на междугородние номера через местные городские линии, а в конце месяца получить немалый счет.

После выбора этих параметров сценарий завершается и возвращается в IVR исходящей маршрутизации, который произведет набор и продолжит свое выполнение.

Сценарий набора быстрых внешних/номеров запускается для следующих ситуаций:

  • Идет набор быстрого номера
  • Происходит набор внутреннего стандартного номера, в котором содержится хотя бы один внешний номер. Например, при наборе группового номера, в котором вызывается два внутренних пользователя и один внешний мобильный.
  • Вызывается внешний номер из конференц-связи
  • Установлена переадресация на внешний номер

Рассмотрим стандартный служебный сценарий набора быстрых/внешних номеров, который изначально включен в состав дистрибутива:

Компонент «Старт 1«. На вход сценария передается внешний номер, который необходимо набрать. Для сохранения параметра запуска используется переменная Номер (строковая).

Компонент «На внешку«. Требуется для определения внешних направлений и передачи управления обратно в управляющий модуль.

  • Номер/команда — переменная «Номер«
  • Среда — Внешняя сеть
  • Обслуживание — Управляющий модуль, обязательная настройка для корректной работы сценария.
  • Тип вызова — Обычный
  • Направления — выберите линии или направления для совершения вызова. По умолчанию, используются все внешние линии.
  • Фильтровать по правам — Нет.

После завершения сценария, управление возвращается в сценарий исходящей маршрутизации, где происходит набор номера и переход по соответствующим веткам.

Назначение сценария

Сценарий быстрых/внешних номеров назначается в модуле Администрирование/Общие настройки на вкладке «Сценарии АТС«. Для того, чтобы назначить сценарий выберите его в выпадающем списке напротив соответствующей строки и поставьте крестик для его активации, затем сохраните настройки.

Поздравляем! Теперь вы умеете строить маршрутизацию исходящих вызовов. Можете переходить к следующему уроку.

Источник

  • Remove From My Forums
  • Вопрос

  • Здравствуйте

    Входящие звонки на номера сотрудников Lync +8XXX приходят от абонентов asterisk 1XXX ,а вот на оборот не работает =(

    Лог с клиента

    Не удается найти описание для идентификатора события 11 из источника Lync. Вызывающий данное событие компонент не установлен на этом локальном компьютере или поврежден. Установите или восстановите компонент на локальном компьютере.
    
    Если событие возникло на другом компьютере, возможно, потребуется сохранить отображаемые сведения вместе с событием.
    
    К событию были добавлены следующие сведения: 
    
    Lync
    80ef01f8
    RequestUri:   sip:1007;phone-context=defaultprofile@domen.local;user=phone
    From:         sip:trusilya@domen.local;tag=ab9a1052b5
    To:           sip:1007;phone-context=defaultprofile@domen.local;user=phone;tag=2A26110BBDB85BE3FF2FBEA6413BAA3D
    Call-ID:      086b04e8cc864e1faf5b3703bedf6bc9
    Content-type: multipart/alternative;boundary="----=_NextPart_000_0145_01CF7157.916E92B0";call-type=audiovideo
    
    ------=_NextPart_000_0145_01CF7157.916E92B0
    Content-Type: application/sdp
    Content-Transfer-Encoding: 7bit
    Content-ID: <f15002d95730ae2800ddefffd1bc7fc9@domen.local>
    Content-Dis; handling=optional; ms-proxy-2007fallback
    
    v=0
    o=- 0 0 IN IP4 10.8.248.3
    s=session
    c=IN IP4 10.8.248.3
    b=CT:99980
    t=0 0
    m=audio 4004 RTP/SAVP 117 114 9 112 111 0 8 116 115 97 13 118 101
    a=candidate:GsPCM2t6nNmLRuC/VnCrUgei0Hj6HE1PxAyVsv6x/YU 1 V73RiL7aJbRQiuAdtRlDHg UDP 0.830 10.8.248.3 4004 
    a=candidate:GsPCM2t6nNmLRuC/VnCrUgei0Hj6HE1PxAyVsv6x/YU 2 V73RiL7aJbRQiuAdtRlDHg UDP 0.830 10.8.248.3 4005 
    a=cryptoscale:1 client AES_CM_128_HMAC_SHA1_80 inline:cAM3qP7xo1T9UgE6Yis+rmxaxaQNwQ5wZ56TUJQp|2^31|1:1
    a=crypto:2 AES_CM_128_HMAC_SHA1_80 inline:o0UpdqBcmqFXbOBAA1vYCYga0Zi4XnppSmw27uub|2^31|1:1
    a=crypto:3 AES_CM_128_HMAC_SHA1_80 inline:ro6dSXT5VloM4Cb2xufmsf9gVBmsZRpqpEE3UjsJ|2^31
    a=maxptime:200
    a=rtpmap:117 G722/8000/2
    a=rtpmap:114 x-msrta/16000
    a=fmtp:114 bitrate=29000
    a=rtpmap:9 G722/8000
    a=rtpmap:112 G7221/16000
    a=fmtp:112 bitrate=24000
    a=rtpmap:111 SIREN/16000
    a=fmtp:111 bitrate=16000
    a=rtpmap:0 PCMU/8000
    a=rtpmap:8 PCMA/8000
    a=rtpmap:116 AAL2-G726-32/8000
    a=rtpmap:115 x-msrta/8000
    a=fmtp:115 bitrate=11800
    a=rtpmap:97 RED/8000
    a=rtpmap:13 CN/8000
    a=rtpmap:118 CN/16000
    a=rtpmap:101 telephone-event/8000
    a=fmtp:101 0-16
    
    ------=_NextPart_000_0145_01CF7157.916E92B0
    Content-Type: application/sdp
    Content-Transfer-Encoding: 7bit
    Content-ID: <13a4ad81ad32128771657038520c2705@domen.local>
    Content-Dis; handling=optional
    
    v=0
    o=- 0 1 IN IP4 10.8.248.3
    s=session
    c=IN IP4 10.8.248.3
    b=CT:99980
    t=0 0
    a=x-devicecaps:audio:send,recv;video:send,recv
    m=audio 29586 RTP/SAVP 117 114 9 112 111 0 8 116 115 97 13 118 101
    a=x-ssrc-range:3147770385-3147770385
    a=rtcp-fb:* x-message app send:dsh recv:dsh
    a=rtcp-rsize
    a=label:main-audio
    a=x-source:main-audio
    a=ice-ufrag:SMR0
    a=ice-pwd:xCnTg7/JQ5FSa2C3hrGp+S6X
    a=candidate:1 1 UDP 2130706431 10.8.248.3 29586 typ host 
    a=candidate:1 2 UDP 2130705918 10.8.248.3 29587 typ host 
    a=candidate:2 1 TCP-ACT 1684798975 10.8.248.3 29586 typ srflx raddr 10.8.248.3 rport 29586 
    a=candidate:2 2 TCP-ACT 1684798462 10.8.248.3 29586 typ srflx raddr 10.8.248.3 rport 29586 
    a=cryptoscale:1 client AES_CM_128_HMAC_SHA1_80 inline:cAM3qP7xo1T9UgE6Yis+rmxaxaQNwQ5wZ56TUJQp|2^31|1:1
    a=crypto:2 AES_CM_128_HMAC_SHA1_80 inline:o0UpdqBcmqFXbOBAA1vYCYga0Zi4XnppSmw27uub|2^31|1:1
    a=crypto:3 AES_CM_128_HMAC_SHA1_80 inline:ro6dSXT5VloM4Cb2xufmsf9gVBmsZRpqpEE3UjsJ|2^31
    a=maxptime:200
    a=rtpmap:117 G722/8000/2
    a=rtpmap:114 x-msrta/16000
    a=fmtp:114 bitrate=29000
    a=rtpmap:9 G722/8000
    a=rtpmap:112 G7221/16000
    a=fmtp:112 bitrate=24000
    a=rtpmap:111 SIREN/16000
    a=fmtp:111 bitrate=16000
    a=rtpmap:0 PCMU/8000
    a=rtpmap:8 PCMA/8000
    a=rtpmap:116 AAL2-G726-32/8000
    a=rtpmap:115 x-msrta/8000
    a=fmtp:115 bitrate=11800
    a=rtpmap:97 RED/8000
    a=rtpmap:13 CN/8000
    a=rtpmap:118 CN/16000
    a=rtpmap:101 telephone-event/8000
    a=fmtp:101 0-16
    
    ------=_NextPart_000_0145_01CF7157.916E92B0--
    
    
    Response Data:
    
    101  Progress Report
    ms-diagnostics:  14011;reason="Called Number translated";source="LYNC.domen.LOCAL";RuleName="AtseriskOfficeUsers-1XXX";CalledNumber="1007";TranslatedNumber="1007";appName="TranslationService"
    
    
    101  Progress Report
    ms-diagnostics:  12006;reason="Trying next hop";source="LYNC.domen.LOCAL";PhoneUsage="Asterisk";PhoneRoute="AsteriskGW";Gateway="10.8.254.14";appName="OutboundRouting"
    
    
    504  Server time-out
    ms-diagnostics:  1038;reason="Failed to connect to a peer server";fqdn="lync.domen.local";peer-type="InternalServer";winsock-code="10061";winsock-info="The peer actively refused the connection attempt";source="lync.domen.local";OriginalPresenceState="0";CurrentPresenceState="0";MeInsideUser="Yes";ConversationInitiatedBy="0";SourceNetwork="0";RemotePartyCanDoIM="No"

    Лог с сервера

    Не удалось выполнить вызов на ТСОП из-за недоступности шлюзов.
    
    Вызванный номер: 1007
    Использование телефона: Asterisk
    Маршрут: AsteriskGW
    Идентификатор вызова: af02f584534045c2b2dc194bd7c0637b
    
    Причина: все шлюзы, доступные для этого вызова, помечены как неработающие.

    На астериске пирр зарегистрирован:

    lync                      10.8.254.2                                   N             5068     OK (1 ms) 

    Что я не правильно делаю ?

    Заранее благодарен за помощь!

    • Изменено

      17 мая 2014 г. 9:40

Ответы

  • Проблем с подключением к АТС нету оно всегда было стабильно принимать звонки абоненты Lync могли.

    Проблему решил , была допущена ошибка в настройке топологии в адресации IP 

    на всякий случай (мб кому пригодится) приведу конфиг транка с астериска:

    [LYNC]
    type=friend
    port=5068
    host=lync.domen.local
    dtmfmode=rfc2833
    context=from-internal
    qualify=yes
    transport=tcp,udp
    fromdomain=sip.domen.local
    canreinvite=no
    disallow=all
    allow=ulaw,alaw
    nat=yes
    directmedia=no

    Всем спасибо !

    • Помечено в качестве ответа
      Trusilya
      19 мая 2014 г. 11:43

Всем доброго вечера. У меня возникла накладка с исходящей связью. Все делал по учебнику «Астериск-будущее телефонии»
Входящие звонки проходят а вот исходящих нету может кто подсказать в чем собственно дело?
Схема подключения довольно простая, есть софтфон установленный на телефоне и подключаемый к астериску через вайфай, сам астериск установлен на рабочем пк под управлением системы Минт, есть аккаунт на сервере youmagic.com (voip.mtt.ru)

Вот образец из учебника по которому сосбенно говоря и делается вся настройка:
sip.conf

[general]

register=>имяпользователя:секрет@мой.поставщик_сервисов.tld

[мой_уникальный_id]
type=friend
host=10.251.55.100
fromuser=мой_уникальный_id
secret=мой_секретный пароль
context=incoming_calls
dtmfmode=rfc2833
disallow=all
allow=gsm
allow=ulaw
insecure=invite

[1000]
type=friend
host=dynamic
context=phone

extensions.conf

[globals]

[general]

[default]
exten => s,1,Verbose(1|Unrouted call handler)
exten => s,n,Answer()
exten => s,n,Wait(1)
exten => s,n,Playback(tt-weasels)
exten => s,n,Hangup()

[incoming_calls]
exten => _X.,1.NoOp()
exten => _X.,n,Dial(SIP/1000)

[outgoing_calls]
exten => _X.,1,NoOp()
exten => _X.,n,Dial(SIP/мой_поставщик_сервисов/${EXTEN})

[internal]
exten => 1000,1,Verbose(1|Extension 1000)
exten => 1000,n,Dial(SIP/1000,30)
exten => 1000,n,Hangup()
exten => 500,1,Verbose(1|Echo test application)
exten => 500,n,Echo()
exten => 500,n,Hangup()

[phones]
include => internal
include => outgoing_calls

А вот мой конфиг астериска который я сделал у себя:

sip.conf
[general]

register=>78432023929:xxxx@voip.mtt.ru

[78432023929]
type=peer
host=voip.mtt.ru
fromuser=78432023929
secret=xxxx
context=incoming_calls
dtmfmode=rfc2833
insecure=port,invite
nat=yes
transport=udp

[1000]
type=friend
host=dynamic
context=phone
secret=1000

extensions.conf
[general]

[incoming_calls]
exten=>s,1,Answer()
exten=>s,n,Dial(SIP/1000,20,tr)
exten=>s,n,Hangup

[outgoing_calls]
exten=>_X.,1,Dial(SIP/78432023929/${EXTEN})
exten=>_X.,n,HangUp()

[internal]
exten=>s,1,Verbose(1|Extension 1000)
exten=>s,n,Dial(SIP/1000,30)
exten=>s,n,Hangup()

[phones]
include=>internal
include=>outgoing_calls

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

Последний раз редактировалось Mucmuk 15 янв 2013, 20:07, всего редактировалось 1 раз.

Вид

Название

Описание

Начало

Начальная точка выполнения программы.

На каждой диаграмме должен быть только один такой блок. В него не должно быть входящих связей, а исходящая связь из этого элемента должна быть только одна.

Процесс интерпретации диаграммы начинается именно с этого блока.

Конец

Конец программы.

Если программа состоит из нескольких параллельных участков выполнения, достижение этого блока завершает соответствующий участок выполнения.

У данного блока не может быть исходящих связей.

Инициализация переменной

Блок для объявления новой переменной и задания ей значения.

Условие

Разделение выполнения программы в соответствии с заданным условием.

Конец условия

Обозначает слияние двух веток условного оператора. Никаких действий не выполняет, но полезен для обеспечения структурности программы.

Цикл с предусловием

Цикл, который выполняется пока истинно некоторое условие, указанное перед его началом. Это условие проверяется до выполнения тела цикла, поэтому тело может быть не выполнено ни разу (если условие с самого начала ложно).

Цикл

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

Выбор

Условие с несколькими альтернативами.

Выражение

Считает значение заданного выражения. Также допускается инициализация переменных.

Подпрограмма

Вызов подпрограммы.

Параллельные задачи

Блок разделяет выполнение программы на несколько потоков.

Слияние задач

Блок слияния параллельных задач.

Завершить задачу

Завершает задачу с указанным в свойстве «Задача» идентификатором. Должен применяться из другой задачи.

Случайное число

Блок для присвоения указанной переменной случайного целого числа из заданного промежутка.

Комментарий

Блок для добавления на диаграмму произвольного текста в качестве комментария.

Таймер

Блок для задания задержки. Устанавливается время задержки в параметре «Задержка» в миллисекундах.

Опустить маркер

Начать рисование маркером заданного цвета на полу. При движении робота в двумерной модели за ним будет оставаться цветная линия.

Поднять маркер

Закончить рисование маркером.

<?xml version=«1.0« encoding=«utf-8«?> <!DOCTYPE TS> <TS version=«2.1« language=«ru_RU«> <context> <name>Block</name> <message> <source>Control flow break detected, stopping</source> <translation type=«vanished«>Обнаружен разрыв потока управления, исполнение завершено</translation> </message> <message> <source>Block has disappeared!</source> <translation type=«vanished«>Блок исчез!</translation> </message> <message> <source>Too many outgoing links</source> <translation type=«vanished«>Слишком много исходящих связей</translation> </message> <message> <source>No outgoing links, please connect this block to something or use Final Node to end program</source> <translation type=«vanished«>Нет исходящих связей. Пожалуйста, подключите этот блок к чему-нибудь или используйте блок &quot;Конец&quot;, чтобы завершить выполнение программы</translation> </message> <message> <source>Outgoing link is not connected</source> <translation type=«vanished«>Исходящая связь ни к чему не подключена</translation> </message> </context> <context> <name>QObject</name> <message> <location filename=«../../qrutils/expressionsParser/expressionsParser.cpp« line=«+642«/> <source>Unexpected end of stream at %1. Mb you forget &apos;;&apos;?</source> <translation>Неожиданный конец выражения в позиции %1. Может быть, Вы забыли &apos;;&apos;?</translation> </message> <message> <location line=«+5«/> <source>Unexpected symbol at %1 : expected %2, got %3</source> <translation>Неожиданный символ в позиции %1 : ожидалось %2, получено %3</translation> </message> <message> <location line=«+4«/> <source>Types mismatch at %1: %2 = %3. Possible loss of data</source> <translation>Несовпадение типов в позиции %1: %2 = %3. Возможна потеря данных</translation> </message> <message> <location line=«+5«/> <source>Unknown identifier at %1 &apos; %2 &apos;</source> <translation>Неизвестный идентификатор в позиции %1: &apos;%2&apos;</translation> </message> <message> <location line=«+3«/> <source>Empty process is unnecessary</source> <translation>Пустое выражение</translation> </message> <message> <location line=«+4«/> <source>Condition can&apos;t be empty</source> <translation>Условие не может быть пустым</translation> </message> <message> <location line=«+4«/> <source>Using reserved variable %1</source> <translation>Использование зарезервированного слова в качестве идентификатора (%1)</translation> </message> <message> <location line=«+4«/> <source>No value of expression</source> <translation>Отсутствует значение выражения</translation> </message> <message> <location line=«+3«/> <source>Incorrect variable declaration: use function block for it</source> <translation>Некорректное объявление пременной: используйте блок &quot;Функция&quot; для этого</translation> </message> <message> <location line=«+5«/> <source>Unexpected symbol after the end of expression</source> <translation>Неожиданный символ за концом выражения</translation> </message> <message> <location line=«+4«/> <source>Unknown element property used</source> <translation>Неизвестное свойство элемента</translation> </message> <message> <location line=«+4«/> <source>Unknown element name used</source> <translation>Неизвестное имя элемента</translation> </message> <message> <location line=«+4«/> <source>Integer division by zero</source> <translation>Целичисленное деление на ноль</translation> </message> <message> <location filename=«../../qrutils/graphicsUtils/abstractItem.cpp« line=«+580«/> <source>Remove</source> <translation>Удалить</translation> </message> <message> <source>Ok</source> <translation type=«vanished«>Да</translation> </message> <message> <source>Open</source> <translation type=«vanished«>Открыть</translation> </message> <message> <source>Save</source> <translation type=«vanished«>Сохранить</translation> </message> <message> <source>Cancel</source> <translation type=«vanished«>Отмена</translation> </message> <message> <source>Close</source> <translation type=«vanished«>Закрыть</translation> </message> <message> <source>Discard</source> <translation type=«vanished«>Отменить</translation> </message> <message> <source>Apply</source> <translation type=«vanished«>Применить</translation> </message> <message> <source>Reset</source> <translation type=«vanished«>Сбросить</translation> </message> <message> <source>Restore Defaults</source> <translation type=«vanished«>Восстановить по умолчанию</translation> </message> <message> <source>Help</source> <translation type=«vanished«>Помощь</translation> </message> <message> <source>Save All</source> <translation type=«vanished«>Сохранить все</translation> </message> <message> <source>Yes</source> <translation type=«vanished«>Да</translation> </message> <message> <source>Yes To All</source> <translation type=«vanished«>Да для всех</translation> </message> <message> <source>No</source> <translation type=«vanished«>Нет</translation> </message> <message> <source>No To All</source> <translation type=«vanished«>Нет для всех</translation> </message> <message> <source>Abort</source> <translation type=«vanished«>Остановить</translation> </message> <message> <source>Retry</source> <translation type=«vanished«>Повторить</translation> </message> <message> <source>Ignore</source> <translation type=«vanished«>Игнорировать</translation> </message> <message> <source>NoButton</source> <translation type=«vanished«>Не кнопка</translation> </message> </context> <context> <name>SensorsGraph</name> <message> <source>SensorsGraph</source> <translation type=«vanished«>График</translation> </message> </context> <context> <name>qReal::BaseGraphTransformationUnit</name> <message> <location filename=«../../qrutils/graphUtils/baseGraphTransformationUnit.cpp« line=«+48«/> <source>no current diagram</source> <translation>Откройте диаграмму</translation> </message> <message> <location line=«+27«/> <location line=«+48«/> <source>Rule &apos;</source> <translation>Правило &apos;</translation> </message> <message> <location line=«-47«/> <source>&apos; has not any appropriate nodes</source> <translation>&apos; не имеет подходящих узлов</translation> </message> <message> <location line=«+47«/> <source>&apos; has unconnected link</source> <translation>&apos; содержит неподключенную связь</translation> </message> </context> <context> <name>qReal::interpretation::Block</name> <message> <location filename=«../../qrutils/interpreter/block.cpp« line=«+60«/> <source>Control flow break detected, stopping</source> <translation>Обнаружен разрыв потока управления, исполнение завершено</translation> </message> <message> <location line=«+20«/> <source>Too many outgoing links</source> <translation>Слишком много исходящих связей</translation> </message> <message> <location line=«+5«/> <source>No outgoing links, please connect this block to something or use Final Node to end program</source> <translation>Нет исходящих связей. Пожалуйста, подключите этот блок к чему-нибудь или используйте блок &quot;Конец&quot;, чтобы завершить выполнение программы</translation> </message> <message> <location line=«+7«/> <source>Outgoing link is not connected</source> <translation>Исходящая связь ни к чему не подключена</translation> </message> <message> <location line=«-27«/> <location line=«+93«/> <source>Block has disappeared!</source> <translation>Блок исчез!</translation> </message> </context> <context> <name>qReal::interpretation::Interpreter</name> <message> <location filename=«../../qrutils/interpreter/interpreter.cpp« line=«+55«/> <source>Interpreter is already running</source> <translation>Программа уже запущена</translation> </message> <message> <location line=«+42«/> <source>Cannot create new thread with already occupied id %1</source> <translation>Попытка создать задачу с уже занятым идентификатором %1</translation> </message> <message> <location line=«+12«/> <source>Threads limit exceeded. Maximum threads count is %1</source> <translation>Превышено максимальное число возможных потоков (максимум %1 потоков)</translation> </message> <message> <location line=«+22«/> <source>Killing non-existent thread %1</source> <translation>Попытка завершить несуществующую задачу %1</translation> </message> <message> <source>Sending message to non-existent thread %1</source> <translation type=«vanished«>Попытка отправить сообщение несуществующие задаче %1</translation> </message> </context> <context> <name>qReal::interpretation::Thread</name> <message> <location filename=«../../qrutils/interpreter/thread.cpp« line=«+117«/> <source>No entry point found, please add Initial Node to a diagram</source> <translation>Не найдено начало программы. Пожалуйста, добавьте блок &quot;Начало&quot;</translation> </message> <message> <location line=«+5«/> <source>Stack overflow</source> <translation>Переполнение стека</translation> </message> <message> <location line=«+59«/> <source>Block has disappeared!</source> <translation>Блок исчез!</translation> </message> </context> <context> <name>qReal::interpretation::blocks::CommentBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/commentBlock.cpp« line=«+28«/> <source>The comment block with incoming links detected!</source> <translation>Блок &quot;Комментарий&quot; не может иметь входящих связей!</translation> </message> </context> <context> <name>qReal::interpretation::blocks::ForkBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/forkBlock.cpp« line=«+43«/> <source>Outgoing link is not connected</source> <translation>Исходящая связь ни к чему не подключена</translation> </message> <message> <location line=«+12«/> <source>Cannot create two threads with the same id %1</source> <translation>Невозможно создать две задачи с одинаковыми идентификаторами %1</translation> </message> <message> <location line=«+14«/> <source>There must be a link that has its &apos;Guard&apos; property set to the current thread id %1</source> <translation>Должна быть исходящая связь, помеченная идентификатором текущей задачи (%1)</translation> </message> <message> <source>There must be an outgoing link, use &quot;End&quot; block to finish a program</source> <translation type=«vanished«>Должна быть исходящая связь, используйте блок &quot;Конец&quot;, чтобы закончить программу</translation> </message> <message> <location line=«-33«/> <source>There must be at least two outgoing links</source> <translation>Должно быть как минимум две исходящие связи</translation> </message> </context> <context> <name>qReal::interpretation::blocks::IfBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/ifBlock.cpp« line=«+36«/> <source>There must be exactly TWO links outgoing from if block</source> <translation>От условного блока должно отходить ровно ДВЕ связи</translation> </message> <message> <location line=«+7«/> <source>Outgoing link is not connected</source> <translation>Исходящая связь ни к чему не подключена</translation> </message> <message> <location line=«+9«/> <source>Two links marked with &apos;true&apos; found</source> <translation>Обнаружено обе связи помечены условием &apos;Истина&apos;</translation> </message> <message> <location line=«+7«/> <source>Two links marked with &apos;false&apos; found</source> <translation>Обе связи помечены условием &apos;Ложь&apos;</translation> </message> <message> <location line=«+7«/> <source>There must be at least one link with &quot;true&quot; or &quot;false&quot; marker on it</source> <translation>Должна быть как минимум одна связь с маркером &quot;истина&quot; или &quot;ложь&quot;</translation> </message> <message> <source>There must be a link with property &quot;Guard&quot; set to one of the conditions</source> <translation type=«vanished«>Должна быть связь со свойством &quot;Условие&quot; установленным в одно из условий</translation> </message> </context> <context> <name>qReal::interpretation::blocks::InputBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/inputBlock.cpp« line=«+27«/> <source>Input</source> <translation>Ввод</translation> </message> <message> <location line=«+9«/> <source>Input value for %1:</source> <translation>Введите значение для %1:</translation> </message> <message> <location line=«+29«/> <source>Only one link with &quot;%1&quot; is allowed</source> <translation>Разрешается только одна связь вида &quot;%1&quot;</translation> </message> <message> <location line=«+7«/> <source>One of the outgoing links must be marked with &quot;%1&quot;</source> <translation>Одна из исходящих связей должны быть помечена как &quot;%1&quot;</translation> </message> <message> <location line=«+7«/> <source>Link to the next statement is missing</source> <translation>Не указан следующий блок</translation> </message> <message> <location line=«+36«/> <source>No outgoing links, please connect this block to something or use Final Node to end program</source> <translation>Нет исходящих связей. Пожалуйста, подключите этот блок к чему-нибудь или используйте блок &quot;Конец&quot;, чтобы завершить выполнение программы</translation> </message> <message> <location line=«+4«/> <source>There should be a maximum of TWO links outgoing from input block</source> <translation>От блока ввода должно исходить не более ДВУХ связей</translation> </message> <message> <location line=«-63«/> <source>Outgoing link is not connected</source> <translation>Исходящая связь ни к чему не подключена</translation> </message> <message> <location line=«+5«/> <location line=«+4«/> <location line=«+7«/> <source>cancel</source> <translation>отмена</translation> </message> <message> <source>Two links marked with &quot;cancel&quot; found</source> <translation type=«vanished«>Обе связи помечены условием &quot;cancel&quot;</translation> </message> <message> <source>At least one of the two links must be marked with &quot;cancel&quot;</source> <translation type=«vanished«>Должна быть как минимум одна связь из двух с маркером &quot;cancel&quot;</translation> </message> <message> <source>At least one link must be not marked with &quot;cancel&quot;</source> <translation type=«vanished«>Хотя бы одна связь должна быть не с маркером &quot;cancel&quot;</translation> </message> <message> <location line=«+33«/> <source>You must input some value!</source> <translation>Вы должны ввести какое-нибудь значение!</translation> </message> </context> <context> <name>qReal::interpretation::blocks::JoinBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/joinBlock.cpp« line=«+32«/> <source>Link outgoing from join block must have surviving thread id in its &apos;Guard&apos; property</source> <translation>Связь, исходящая из блока &quot;Слияние задач&quot;, должна быть помечена идентификатором задачи, продолжающей работу после слияния</translation> </message> </context> <context> <name>qReal::interpretation::blocks::KillThreadBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/killThreadBlock.cpp« line=«+24«/> <source>Need to specify a thread to be stopped</source> <translation>Необходимо указать задачу, которая должна быть остановлена</translation> </message> </context> <context> <name>qReal::interpretation::blocks::LoopBlock</name> <message> <source>There must be an outgoing link with property &lt;b&gt;Guard&lt;/b&gt; set as &lt;b&gt;iteration&lt;/b&gt;. See help, chapter &lt;i&gt;Programming&lt;/i&gt;</source> <translation type=«vanished«>Необходима исходящая из блока связь, в которой в значении свойства &lt;b&gt;Условие&lt;/b&gt; установлено в &lt;b&gt;итерация&lt;/b&gt;. Подробности см. в справке в разделе &lt;i&gt;Создание программ&lt;/i&gt;</translation> </message> <message> <location filename=«../../qrutils/interpreter/blocks/loopBlock.cpp« line=«+43«/> <source>There must be a link with &quot;body&quot; marker on it</source> <translation>Из блока &quot;Цикл&quot; должна выходить стрелка с маркером &quot;тело цикла&quot;</translation> </message> <message> <location line=«+4«/> <source>Outgoing link is not connected</source> <translation>Исходящая связь ни к чему не подключена</translation> </message> <message> <location line=«+9«/> <source>Two links marked as &quot;body&quot; found</source> <translation>Найдено две связи, помеченные как &quot;тело цикла&quot;</translation> </message> <message> <source>Two links marked as &quot;iteration&quot; found</source> <translation type=«vanished«>Найдено две связи, помеченные как &quot;итерация&quot;</translation> </message> <message> <location line=«+20«/> <source>There must be a non-marked outgoing link</source> <translation>Должна быть непомеченная исходящая связь</translation> </message> </context> <context> <name>qReal::interpretation::blocks::PreconditionalLoopBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/preconditionalLoopBlock.cpp« line=«+41«/> <source>Outgoing link is not connected</source> <translation>Исходящая связь ни к чему не подключена</translation> </message> <message> <location line=«+10«/> <source>Two links marked as &quot;body&quot; found</source> <translation>Найдено две связи, помеченные как &quot;тело цикла&quot;</translation> </message> <message> <location line=«+8«/> <location line=«+7«/> <source>There must be a link with &quot;body&quot; marker on it</source> <translation>Из блока &quot;Цикл&quot; должна выходить стрелка с маркером &quot;тело цикла&quot;</translation> </message> <message> <location line=«+5«/> <source>There must be a non-marked outgoing link</source> <translation>Должна быть непомеченная исходящая связь</translation> </message> </context> <context> <name>qReal::interpretation::blocks::ReceiveThreadMessageBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/receiveThreadMessageBlock.cpp« line=«+25«/> <source>Need to specify variable which will contain received message</source> <translation>Необходимо указать переменную, которая будет содержать полученное сообщение</translation> </message> </context> <context> <name>qReal::interpretation::blocks::SendThreadMessageBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/sendThreadMessageBlock.cpp« line=«+23«/> <source>Need to specify a receiving thread in &apos;Thread&apos; property</source> <translation>Необходимо указать задачу-получателя сообщения</translation> </message> </context> <context> <name>qReal::interpretation::blocks::SubprogramBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/subprogramBlock.cpp« line=«+35«/> <source>Please enter valid c-style name for subprogram &quot;</source> <translation>Укажите корректный идентификатор подпрограммы (в c-стиле)</translation> </message> </context> <context> <name>qReal::interpretation::blocks::SwitchBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/switchBlock.cpp« line=«+36«/> <source>There must be at list TWO links outgoing from switch block</source> <translation>От блока выбора должно отходить минимум ДВЕ связи</translation> </message> <message> <location line=«+7«/> <source>Outgoing link is not connected</source> <translation>Исходящая связь ни к чему не подключена</translation> </message> <message> <location line=«+9«/> <source>There must be exactly one link without marker on it (default branch)</source> <translation>Ветка без маркера должна быть в точности одна (ветка &quot;default&quot;)</translation> </message> <message> <location line=«+14«/> <source>There must be a link without marker on it (default branch)</source> <translation>Должна быть связь без маркера (ветка &quot;default&quot;)</translation> </message> <message> <source>There must be exactly one link with empty &apos;Guard&apos; property (default branch).</source> <translation type=«vanished«>Связь с пустым свойством &quot;Условие&quot; должна быть только одна (ветка &quot;default&quot;).</translation> </message> <message> <location line=«-9«/> <source>Duplicate case branch: &apos;%1&apos;</source> <translation>Найдено более одной ветки &apos;%1&apos;</translation> </message> <message> <source>There must be a link with empty &apos;Guard&apos; property (default branch).</source> <translation type=«vanished«>От блока &quot;Выбор&quot; должна отходить ветка с пустым свойством &quot;Условие&quot; (ветка &quot;default&quot;).</translation> </message> </context> <context> <name>qReal::interpretation::blocks::UnsupportedBlock</name> <message> <location filename=«../../qrutils/interpreter/blocks/unsupportedBlock.cpp« line=«+21«/> <source>Block of a type which is unsupported by an interpreter</source> <translation>Блок типа, не поддерживаемого в интерпретаторе</translation> </message> </context> <context> <name>qReal::ui::ConsoleDock</name> <message> <location filename=«../../qrutils/widgets/consoleDock.cpp« line=«+50«/> <source>Reset shell</source> <translation>Очистить консоль</translation> </message> </context> <context> <name>qReal::ui::ImagePicker</name> <message> <location filename=«../../qrutils/widgets/imagePicker.cpp« line=«+35«/> <source>Browse…</source> <translation>Обзор…</translation> </message> <message> <location line=«+35«/> <source>Select image</source> <translation>Выберите изображение</translation> </message> <message> <location line=«+2«/> <source>Images (*.png *.svg *.jpg *.gif *.bmp);;All files (*.*)</source> <translation>Картинки (*.png *.svg *.jpg *.gif *.bmp);;Все файлы (*.*)</translation> </message> </context> <context> <name>qReal::ui::SearchLineEdit</name> <message> <location filename=«../../qrutils/widgets/searchLineEdit.cpp« line=«+31«/> <source>Clear text</source> <translation>Очистить текст</translation> </message> <message> <location line=«+1«/> <source>Case insensitive</source> <translation>Не учитывать регистр</translation> </message> <message> <location line=«+1«/> <source>Case sensitive</source> <translation>Учитывать регистр</translation> </message> <message> <location line=«+1«/> <source>Regular expression</source> <translation>Регулярное выражение</translation> </message> <message> <location line=«+9«/> <source>Enter search text…</source> <translation>Введите текст поиска…</translation> </message> </context> <context> <name>qReal::ui::SearchLinePanel</name> <message> <location filename=«../../qrutils/widgets/searchLinePanel.cpp« line=«+134«/> <location line=«+10«/> <source>Enter search text…</source> <translation>Введите текст поиска…</translation> </message> <message> <location line=«+11«/> <source>&lt;line&gt;:&lt;column&gt;</source> <translation>&lt;строка&gt;:&lt;столбец&gt;</translation> </message> </context> <context> <name>utils::MetamodelGeneratorSupport</name> <message> <location filename=«../../qrutils/metamodelGeneratorSupport.cpp« line=«+72«/> <source>Please, fill compiler settings</source> <translation>Пожалуйста, заполните форму настроек копмилятора в настройках</translation> </message> <message> <location line=«+20«/> <source>Cannot unload plugin</source> <translation>Не могу отгрузить плагин</translation> </message> <message> <location line=«+23«/> <source>Cannot load new editor</source> <translation>Не могу загрузить новый редактор</translation> </message> <message> <location line=«+6«/> <source>Cannot build new editor</source> <translation>Не могу скомпилировать новый редактор. Проверьте имена элементов</translation> </message> </context> <context> <name>utils::QRealMessageBox</name> <message> <location filename=«../../qrutils/widgets/qRealMessageBox.cpp« line=«+30«/> <source>Ok</source> <translation>Да</translation> </message> <message> <location line=«+1«/> <source>Open</source> <translation>Открыть</translation> </message> <message> <location line=«+1«/> <source>Save</source> <translation>Сохранить</translation> </message> <message> <location line=«+1«/> <source>Cancel</source> <translation>Отмена</translation> </message> <message> <location line=«+1«/> <source>Close</source> <translation>Закрыть</translation> </message> <message> <location line=«+1«/> <source>Discard</source> <translation>Отменить</translation> </message> <message> <location line=«+1«/> <source>Apply</source> <translation>Применить</translation> </message> <message> <location line=«+1«/> <source>Reset</source> <translation>Сбросить</translation> </message> <message> <location line=«+1«/> <source>Help</source> <translation>Помощь</translation> </message> <message> <location line=«+1«/> <source>Save All</source> <translation>Сохранить все</translation> </message> <message> <location line=«+1«/> <source>Yes</source> <translation>Да</translation> </message> <message> <location line=«+1«/> <source>Yes To All</source> <translation>Да для всех</translation> </message> <message> <location line=«+1«/> <source>No</source> <translation>Нет</translation> </message> <message> <location line=«+1«/> <source>No To All</source> <translation>Нет для всех</translation> </message> <message> <location line=«+1«/> <source>Abort</source> <translation>Остановить</translation> </message> <message> <location line=«+1«/> <source>Retry</source> <translation>Повторить</translation> </message> <message> <location line=«+1«/> <source>Ignore</source> <translation>Игнорировать</translation> </message> <message> <location line=«+1«/> <source>NoButton</source> <translation>Не кнопка</translation> </message> <message> <location line=«+2«/> <source>Restore Defaults</source> <translation>Восстановить по умолчанию</translation> </message> <message> <source>yes</source> <translation type=«vanished«>Да</translation> </message> </context> <context> <name>utils::sensorsGraph::SensorViewer</name> <message> <source>Save values history</source> <translation type=«vanished«>Сохранить историю показаний</translation> </message> <message> <source>Comma-Separated Values Files (*.csv)</source> <translation type=«vanished«>Значения, разделенные запятой (*.csv)</translation> </message> <message> <source>value: </source> <translation type=«vanished«>значение: </translation> </message> </context> <context> <name>utils::sensorsGraph::SensorsGraph</name> <message> <source>Stop tracking</source> <translation type=«vanished«>Остановить слежение</translation> </message> <message> <source>Start tracking</source> <translation type=«vanished«>Начать слежение</translation> </message> <message> <source>Reset plot</source> <translation type=«vanished«>Очистить график</translation> </message> <message> <source>Zoom In</source> <translation type=«vanished«>Приблизить</translation> </message> <message> <source>Zoom Out</source> <translation type=«vanished«>Отдалить</translation> </message> <message> <source>Export values…</source> <translation type=«vanished«>Экспорт значений…</translation> </message> <message> <source>Export values</source> <translation type=«obsolete«>Экспорт значений…</translation> </message> </context> <context> <name>watchListWindow</name> <message> <location filename=«../../qrutils/watchListWindow.ui« line=«+41«/> <source>Watch List</source> <translation>Переменные</translation> </message> <message> <location line=«+59«/> <source>Name</source> <translation>Имя</translation> </message> <message> <location line=«+5«/> <source>Value</source> <translation>Значение</translation> </message> </context> </TS>

Добрый день.

Установил, настроил asterisk — подключается к rosnet’у и имеет входящие и исходящие звонки. К астериску подрубаются SIP телефоны и принимают/совершают вызовы.

Все работало нормально на исходящие и на входящие. Но после того как начал ковыряться с кодеками — перестали работать исходящие вызовы, хотя если софтфоном подрубится к роснету — все работает прекрасно.

Не подскажите — где может быть косяк?

Вот конфиги: sip.conf:

[general]

register => user:123456@6653055.phone.rosnet.ru/6653055

localnet = 192.168.1.0/255.255.255.0
externip = 87.244.7.206
externrefresh = 60
nat = no
canreinvite = no
context = 6653055-is

language=ru
defaultexpiry=600

allowguest = no
bindport = 5060

allowoverlap = no

udpbindaddr = 0.0.0.0
tcpenable = no
tcpbindaddr = 0.0.0.0

srvlookup = yes
subscribecontext = default

;allow = all
disallow = all
allow = alaw
allow = ulaw
allow = g729
allow = gsm

[sipnet]
secret = 123456
defaultuser = user
username = user
trunkname = sipnet
host = 6653055.phone.rosnet.ru
context = 6653055-is
insecure = invite
fromuser = 6653055
fromdomain = 6653055.phone.rosnet.ru
type = peer
disallow = all
allow = alaw
allow = ulaw
allow = g729
allow = gsm
nat = no
canreinvite = no
dtmfmode = info
callcounter = yes

users.conf:

[general]
fullname = New User
userbase = 6000
hasvoicemail = yes
vmsecret = 1234
hassip = yes
hasiax = yes
hasmanager = no
callwaiting = yes
threewaycalling = yes
callwaitingcallerid = yes
transfer = yes
canpark = yes
cancallforward = yes
callreturn = yes
callgroup = 1
pickupgroup = 1

[1002]
type=friend
nat = yes
canreinvite = no
hassip = yes
defaultuser = 1002
context=office-users
secret=sandello
cid_number = 1002
vmsecret=123
host=dynamic
dtmfmode=rfc2833
username=1002
disallow=all
allow=alaw
allow=ulaw
allow=g729
allow=gsm

extensions.conf:

[6653055-is]

    exten => user,1,Answer
    exten => user,2,Playback(privetstvie-work)
    exten => user,3,Dial(SIP/1002)
    exten => user,4,Hangup

    [office-users]
    exten => _XXXXXXXXXXX,1,Dial(SIP/${EXTEN}@sipnet,30,r)

Звонки извне проходят замечательно, а вот исходящие не идут… Вот логи, при попытке исходящего звонка:

<--- SIP read from UDP:213.108.18.100:60950 --->
INVITE sip:79671983788@87.244.7.206 SIP/2.0

Via: SIP/2.0/UDP 10.0.2.134:5062;branch=z9hG4bK807476705

From: "Operator 1002" <sip:1002@87.244.7.206>;tag=1497460098

To: <sip:79671983788@87.244.7.206>

Call-ID: 527852667@10.0.2.134

CSeq: 1 INVITE

Contact: <sip:1002@10.0.2.134:5062>

Content-Type: application/sdp

Allow: INVITE, INFO, PRACK, ACK, BYE, CANCEL, OPTIONS, NOTIFY, REGISTER, SUBSCRIBE, REFER, PUBLISH, UPDATE, MESSAGE

Max-Forwards: 70

User-Agent: Yealink SIP-T18 18.0.14.5

Supported: replaces

Allow-Events: talk,hold,conference,refer,check-sync

Content-Length: 290



v=0

o=- 20006 20006 IN IP4 10.0.2.134

s=SDP data

c=IN IP4 10.0.2.134

t=0 0

m=audio 11792 RTP/AVP 8 0 9 18 101

a=rtpmap:8 PCMA/8000

a=rtpmap:0 PCMU/8000

a=rtpmap:9 G722/8000

a=rtpmap:18 G729/8000

a=fmtp:18 annexb=no

a=fmtp:101 0-15

a=rtpmap:101 telephone-event/8000

a=sendrecv


<------------->
--- (14 headers 14 lines) ---

[Kgateway*CLI> 
[0KSending to 10.0.2.134 : 5062 (no NAT)

[Kgateway*CLI> 
[0KUsing INVITE request as basis request - 527852667@10.0.2.134
Found peer '1002' for '1002' from 213.108.18.100:60950

<--- Reliably Transmitting (NAT) to 213.108.18.100:60950 --->
SIP/2.0 401 Unauthorized

Via: SIP/2.0/UDP 10.0.2.134:5062;branch=z9hG4bK807476705;received=213.108.18.100

From: "Operator 1002" <sip:1002@87.244.7.206>;tag=1497460098

To: <sip:79671983788@87.244.7.206>;tag=as1bda2e66

Call-ID: 527852667@10.0.2.134

CSeq: 1 INVITE

Server: Asterisk PBX 1.6.2.20

Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO

Supported: replaces, timer

WWW-Authenticate: Digest algorithm=MD5, realm="asterisk", nonce="4509296c"

Content-Length: 0




<------------>

[Kgateway*CLI> 
[0KScheduling destruction of SIP dialog '527852667@10.0.2.134' in 32000 ms (Method: INVITE)

[Kgateway*CLI> 
[0K
<--- SIP read from UDP:213.108.18.100:60950 --->
ACK sip:79671983788@87.244.7.206 SIP/2.0

Via: SIP/2.0/UDP 10.0.2.134:5062;branch=z9hG4bK807476705

From: "Operator 1002" <sip:1002@87.244.7.206>;tag=1497460098

To: <sip:79671983788@87.244.7.206>;tag=as1bda2e66

Call-ID: 527852667@10.0.2.134

CSeq: 1 ACK

Content-Length: 0




<------------->

[Kgateway*CLI> 
[0K--- (7 headers 0 lines) ---

[Kgateway*CLI> 
[0K
<--- SIP read from UDP:213.108.18.100:60950 --->
INVITE sip:79671983788@87.244.7.206 SIP/2.0

Via: SIP/2.0/UDP 10.0.2.134:5062;branch=z9hG4bK248076524

From: "Operator 1002" <sip:1002@87.244.7.206>;tag=1497460098

To: <sip:79671983788@87.244.7.206>

Call-ID: 527852667@10.0.2.134

CSeq: 2 INVITE

Contact: <sip:1002@10.0.2.134:5062>

Authorization: Digest username="1002", realm="asterisk", nonce="4509296c", uri="sip:79671983788@87.244.7.206", response="7a447fd38d7a9c25bab04cfe42ca0dc7", algorithm=MD5

Content-Type: application/sdp

Allow: INVITE, INFO, PRACK, ACK, BYE, CANCEL, OPTIONS, NOTIFY, REGISTER, SUBSCRIBE, REFER, PUBLISH, UPDATE, MESSAGE

Max-Forwards: 70

User-Agent: Yealink SIP-T18 18.0.14.5

Supported: replaces

Allow-Events: talk,hold,conference,refer,check-sync

Content-Length: 290



v=0

o=- 20006 20006 IN IP4 10.0.2.134

s=SDP data

c=IN IP4 10.0.2.134

t=0 0

m=audio 11792 RTP/AVP 8 0 9 18 101

a=rtpmap:8 PCMA/8000

a=rtpmap:0 PCMU/8000

a=rtpmap:9 G722/8000

a=rtpmap:18 G729/8000

a=fmtp:18 annexb=no

a=fmtp:101 0-15

a=rtpmap:101 telephone-event/8000

a=sendrecv


<------------->
--- (15 headers 14 lines) ---
Sending to 213.108.18.100 : 60950 (NAT)
Using INVITE request as basis request - 527852667@10.0.2.134
Found peer '1002' for '1002' from 213.108.18.100:60950

[Kgateway*CLI> 
[0KFound RTP audio format 8

[Kgateway*CLI> 
[0KFound RTP audio format 0
Found RTP audio format 9
Found RTP audio format 18
Found RTP audio format 101
Found audio description format PCMA for ID 8
Found audio description format PCMU for ID 0
Found audio description format G722 for ID 9
Found audio description format G729 for ID 18
Found audio description format telephone-event for ID 101
Capabilities: us - 0x10e (gsm|ulaw|alaw|g729), peer - audio=0x110c (ulaw|alaw|g729|g722)/video=0x0 (nothing)/text=0x0 (nothing), combined - 0x10c (ulaw|alaw|g729)
Non-codec capabilities (dtmf): us - 0x1 (telephone-event), peer - 0x1 (telephone-event), combined - 0x1 (telephone-event)
Peer audio RTP is at port 10.0.2.134:11792
Looking for 79671983788 in office-users (domain 87.244.7.206)

[Kgateway*CLI> 
[0Klist_route: hop: <sip:1002@10.0.2.134:5062>

[Kgateway*CLI> 
[0K
<--- Transmitting (NAT) to 213.108.18.100:60950 --->
SIP/2.0 100 Trying

Via: SIP/2.0/UDP 10.0.2.134:5062;branch=z9hG4bK248076524;received=213.108.18.100

From: "Operator 1002" <sip:1002@87.244.7.206>;tag=1497460098

To: <sip:79671983788@87.244.7.206>

Call-ID: 527852667@10.0.2.134

CSeq: 2 INVITE

Server: Asterisk PBX 1.6.2.20

Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO

Supported: replaces, timer

Contact: <sip:79671983788@87.244.7.206>

Content-Length: 0




<------------>

[Kgateway*CLI> 
[0KAudio is at 87.244.7.206 port 19186
Adding codec 0x8 (alaw) to SDP
Adding codec 0x4 (ulaw) to SDP
Adding codec 0x2 (gsm) to SDP

[Kgateway*CLI> 
[0KReliably Transmitting (no NAT) to 195.90.137.30:5060:
INVITE sip:79671983788@6653055.phone.rosnet.ru SIP/2.0

Via: SIP/2.0/UDP 87.244.7.206:5060;branch=z9hG4bK794bb845;rport

Max-Forwards: 70

From: "New User" <sip:6653055@6653055.phone.rosnet.ru>;tag=as182b55f4

To: <sip:79671983788@6653055.phone.rosnet.ru>

Contact: <sip:6653055@87.244.7.206>

Call-ID: 4d79ff2d5828fccb2546befa44fdee29@6653055.phone.rosnet.ru

CSeq: 102 INVITE

User-Agent: Asterisk PBX 1.6.2.20

Date: Fri, 21 Oct 2011 11:13:12 GMT

Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO

Supported: replaces, timer

Content-Type: application/sdp

Content-Length: 228



v=0

o=root 2014370682 2014370682 IN IP4 87.244.7.206

s=Asterisk PBX 1.6.2.20

c=IN IP4 87.244.7.206

t=0 0

m=audio 19186 RTP/AVP 8 0 3

a=rtpmap:8 PCMA/8000

a=rtpmap:0 PCMU/8000

a=rtpmap:3 GSM/8000

a=ptime:20

a=sendrecv


---

[Kgateway*CLI> 
[0K
<--- Transmitting (NAT) to 213.108.18.100:60950 --->
SIP/2.0 180 Ringing

Via: SIP/2.0/UDP 10.0.2.134:5062;branch=z9hG4bK248076524;received=213.108.18.100

From: "Operator 1002" <sip:1002@87.244.7.206>;tag=1497460098

To: <sip:79671983788@87.244.7.206>;tag=as603a5a56

Call-ID: 527852667@10.0.2.134

CSeq: 2 INVITE

Server: Asterisk PBX 1.6.2.20

Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO

Supported: replaces, timer

Contact: <sip:79671983788@87.244.7.206>

Content-Length: 0


[Kgateway*CLI> 
[0K


<------------>

[Kgateway*CLI> 
[0K
<--- SIP read from UDP:195.90.137.30:5060 --->
SIP/2.0 100 Trying

Via: SIP/2.0/UDP 87.244.7.206:5060;branch=z9hG4bK794bb845;received=87.244.7.206;rport=5060

From: "New User" <sip:6653055@6653055.phone.rosnet.ru>;tag=as182b55f4

To: <sip:79671983788@6653055.phone.rosnet.ru>;tag=8KUVKeRbYer8uhjEGUvKpmDJbsn8iAEq

Call-ID: 4d79ff2d5828fccb2546befa44fdee29@6653055.phone.rosnet.ru

CSeq: 102 INVITE

Contact: <sip:79671983788@195.90.137.30:5060>

Max-Forwards: 70

User-Agent: Svetets CallManager R12642

Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, MESSAGE, PUBLISH, SUBSCRIBE, OPTIONS, INFO

Content-Length: 0




<------------->
--- (11 headers 0 lines) ---

[Kgateway*CLI> 
[0K
<--- SIP read from UDP:195.90.137.30:5060 --->
SIP/2.0 603 Decline

Via: SIP/2.0/UDP 87.244.7.206:5060;branch=z9hG4bK794bb845;received=87.244.7.206;rport=5060

From: "New User" <sip:6653055@6653055.phone.rosnet.ru>;tag=as182b55f4

To: <sip:79671983788@6653055.phone.rosnet.ru>;tag=9cGY5h7SMFgutpbfCIKLFWT1RZWiKDbU

Call-ID: 4d79ff2d5828fccb2546befa44fdee29@6653055.phone.rosnet.ru

CSeq: 102 INVITE

Contact: <sip:79671983788@195.90.137.30:5060>

Max-Forwards: 70

User-Agent: Svetets CallManager R12642

Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, MESSAGE, PUBLISH, SUBSCRIBE, OPTIONS, INFO

Content-Length: 0




<------------->
--- (11 headers 0 lines) ---

[Kgateway*CLI> 
[0KTransmitting (no NAT) to 195.90.137.30:5060:
ACK sip:79671983788@6653055.phone.rosnet.ru SIP/2.0

Via: SIP/2.0/UDP 87.244.7.206:5060;branch=z9hG4bK794bb845;rport

Max-Forwards: 70

From: "New User" <sip:6653055@6653055.phone.rosnet.ru>;tag=as182b55f4

To: <sip:79671983788@6653055.phone.rosnet.ru>;tag=9cGY5h7SMFgutpbfCIKLFWT1RZWiKDbU

Contact: <sip:6653055@87.244.7.206>

Call-ID: 4d79ff2d5828fccb2546befa44fdee29@6653055.phone.rosnet.ru

CSeq: 102 ACK

User-Agent: Asterisk PBX 1.6.2.20

Content-Length: 0



[Kgateway*CLI> 
[0K

[Kgateway*CLI> 
[0K
---

[Kgateway*CLI> 
[0K
<--- Reliably Transmitting (NAT) to 213.108.18.100:60950 --->
SIP/2.0 486 Busy Here

Via: SIP/2.0/UDP 10.0.2.134:5062;branch=z9hG4bK248076524;received=213.108.18.100

From: "Operator 1002" <sip:1002@87.244.7.206>;tag=1497460098

To: <sip:79671983788@87.244.7.206>;tag=as603a5a56

Call-ID: 527852667@10.0.2.134

CSeq: 2 INVITE

Server: Asterisk PBX 1.6.2.20

Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO

Supported: replaces, timer

X-Asterisk-HangupCause: Call Rejected

X-Asterisk-HangupCauseCode: 21

Content-Length: 0




<------------>

[Kgateway*CLI> 
[0K
<--- SIP read from UDP:213.108.18.100:60950 --->
ACK sip:79671983788@87.244.7.206 SIP/2.0

Via: SIP/2.0/UDP 10.0.2.134:5062;branch=z9hG4bK248076524

From: "Operator 1002" <sip:1002@87.244.7.206>;tag=1497460098

To: <sip:79671983788@87.244.7.206>;tag=as603a5a56

Call-ID: 527852667@10.0.2.134

CSeq: 2 ACK

Content-Length: 0




<------------->

[Kgateway*CLI> 
[0K--- (7 headers 0 lines) ---
Really destroying SIP dialog '527852667@10.0.2.134' Method: ACK

Заранее спасибо.

  • Ошибка долейте охлаждающую жидкость
  • Ошибка дополнительной помпы е39
  • Ошибка долейте жидкость омывателя
  • Ошибка доор на стиральной машине индезит
  • Ошибка документ уже открыт 33 android