Вызовы SIP Asterisk, заканчивающиеся через 2 минуты с помощью службы магистрали Twilio

у меня есть сервер Asterisk, размещенный на DigitalOcean, на котором вызовы сбрасываются ровно через 120 секунд с помощью службы транкинга Twilio. Примечательно, что напрямую подключенные софтфоны не сбрасывают свои звонки. Порт 5060 открыт на брандмауэре, как и должно быть.

существует Автосекретарь, принимающий вызов и передающий его сценарию, но это работает в полном объеме, не отбрасывая вызов с помощью программного телефона sip. Я отправил Twilio по электронной почте, и они сказали, что проблема может быть из-за Asterisk не посылает 180 звонков, которые я мог бы понять, потому что я не набираю телефон, а сразу отвечаю.

что на самом деле отключая вызов?

sip.conf

[twilio]
type=peer
secret=secret
username=user
host=host.domain.com
dtmfmode=rfc2833
canreinvite=no
disallow=all
allow=ulaw
insecure=port,invite
fromuser=+15555555555
fromdomain=from-domain.domain.com
context=incoming
deny=0.0.0.0/0
permit=x.x.x.x/32
permit=x.x.x.x/32
permit=x.x.x.x/32
permit=x.x.x.x/32

расширения.контексте АЕЛ

+15555555555 => {
        Answer();
        EAGI(tincan.js);
        AGI(agi://127.0.0.1/saytext,"Goodbye.");
        Hangup();
}

начало захвата пакетов вызовов

21  4.827782    (Them)  (Us)    SIP/SDP 1341    Request: INVITE sip:+15555555555@my.domain.com | 
22  4.831487    (Us)    (Them)  SIP 819 Status: 100 Trying | 
23  4.833205    (Us)    (Them)  SIP/SDP 1112    Status: 200 OK | 

конец захвата пакетов вызовов

16066   124.821787  (Them)  (Us)    SIP 650 Request: BYE sip:+15555555555@x.x.x.x:5060 | 
16067   124.822736  (Us)    (Them(  SIP 700 Status: 200 OK |
18
задан Mikey A. Leonetti
21.02.2023 22:35 Количество просмотров материала 3502
Распечатать страницу

1 ответ

об этой проблеме сообщил Twilio, так как наш сервер не отправлял данные RTP в течение длительного времени, поэтому время ожидания соединения истекало. Dialplan, который я использовал, запускал пользовательский сценарий EAGI, который записывал человека по телефону в течение неопределенного времени. Этот процесс был тайм-аут на другом конце.

мое очень хакерское решение было следующим:

  1. вместо того, чтобы использовать команду записи файла, я использовал команду GET OPTION, чтобы играть 10 секунд тишины, дождитесь ключа фунта ( # ).
  2. я использовал eagi stderr+1 fd для захвата аудио в файл вручную с помощью моего скрипта.
  3. я использовал команду STREAM FILE для воспроизведения записи пользователю для подтверждения.

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

Мой Узел.JS скрипт функция, которая заменяет функцию ожидания цифр или записи файла:

/**
 * Loop playing silence until interrupted
 * @param done =function( timedout ) Callback when the silence has been interrupted
 * @param maxRecordTime Length of time to be able to record max. Leave blank for no timeout.
 * @param stopTime Timestamp when the recording should be stopped
 */
Index.prototype.loopSilenceUntilInterrupted = function( done, maxRecordTime, stopTime ) {
    var that = this;

    // Set the stopTime?
    if( maxRecordTime!==undefined && stopTime===undefined )
        stopTime = Date.now()+maxRecordTime;

    this.context.getOption( "silence/10", "#", 10, function( error, response ) {
        if( response.result==35 )
            done( false ); // We have been diggery
        else if( stopTime!==undefined && Date.now()>=stopTime )
            done( true ); // We have timed out!
        else
            that.loopSilenceUntilInterrupted( done, maxRecordTime, stopTime ); // Do it again
    },
    0 ); // No cooldown
};
0
отвечен Mikey A. Leonetti 2023-02-23 06:23

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх