На АТС Asterisk получите заголовок sip для исходящих звонков - PullRequest
0 голосов
/ 27 сентября 2018

Вот так выглядит моя схема набора номеров (/etc/asterisk/extensions.conf):

[default]
  exten => _X.,1,NoOp(New call from ${EXTEN} ! )
  same => n,NoOp( The header X-Twilio-CallSid =  ${SIP_HEADER(X-Twilio-CallSid)})
  same => Dial(SIP/SomePeer)
  ... etc

Благодаря функции SIP_HEADER Я могу получить идентификатор вызова, отправленного моим провайдероммне.Это первый пакет, который я получаю, используя WireShark:

enter image description here

Другими словами ${SIP_HEADER(X-Twilio-CallSid)} = ACbccc967c48dda15d8d1c9b34961d19a0

Это работаетотлично подходит для входящих звонков .Теперь моя проблема для исходящих звонков.Заголовок sip X-Twilio-CallSid не существует до тех пор, пока на звонок не будет получен ответ. Как я могу прочитать этот заголовок после ответа на вызов? Я попытался установить ${SIP_HEADER(X-Twilio-CallSid)}, как только вызов зависает.При анализе трафика через Wireshark этот заголовок появляется после запроса INVITE.

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Я не проверял это, но в соответствии с документами , вы можете написать обработчик пост-ответа в виде макроса (используя M()) или GoSub (используя U()):

[outbound-twilio]
exten => _X.,1,Dial(SIP/${EXTEN}@twilio-trunk,,M(post-answer))

[macro-post-answer]
exten => s,1,Verbose("Answer header shows ${SIP_HEADER(X-Twilio-CallSid)}")
same => s,n,Return()

Я не уверен, будет ли это по-другому, поскольку транзакция INVITE может отслеживать только первоначальный запрос, но не ответ, даже когда мы выполняем его с другого канала.Вы также можете захотеть переключиться на chan_pjsip, который имеет PJSIP_HEADER:

PJSIP_HEADER позволяет вам читать определенные заголовки SIP из входящего канала PJSIP, а такжезапись (добавление, обновление, удаление) заголовков на исходящем канале.Единственным исключением является то, что вы можете читать заголовки, которые вы уже добавили на исходящем канале

Возможно, это реализовано не так, как функция chan_sip SIP_HEADER?

Также,больше документов по макросам из книги.

0 голосов
/ 30 сентября 2018

Функция SIP_HEADER работает только для ОДНОГО пакета - входящее сообщение ПЕРВОГО приглашения.

Вы написали свою собственную функцию, используя c / c ++, или использовали какой-то другой софт, например homer / sipcapture.

...