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

Пробел в переменной через AGI

Добавлено: 19 апр 2016, 10:13
fantomas000
Здравствуйте!
Кусок диалплана:

Код: Выделить всё

exten => 1234,1,Answer
same =>       n,AGI(clients.sh,${CALLERID(num)})
same =>       n,NoOp(Result_1: ${res1})
same =>       n,HangUp
clients.sh

Код: Выделить всё

#!/bin/bash

RESULT1=$(echo "SELECT client FROM test  WHERE number=$1" | mysql -uroot -pParoLL clients | tail -1)
echo -n -e "SET VARIABLE res1 ${RESULT1}"
В консоли при звонке на 1234:

Код: Выделить всё

    -- Executing [1234@family:1] Answer("SIP/1001-00000006", "") in new stack
    -- Executing [1234@family:2] AGI("SIP/1001-00000006", "clients.sh,1001") in new stack
    -- Launched AGI Script /usr/share/asterisk/agi-bin/clients.sh
<SIP/1001-00000006>AGI Tx >> agi_request: clients.sh
<SIP/1001-00000006>AGI Tx >> agi_channel: SIP/1001-00000006
<SIP/1001-00000006>AGI Tx >> agi_language: ru
<SIP/1001-00000006>AGI Tx >> agi_type: SIP
<SIP/1001-00000006>AGI Tx >> agi_uniqueid: 1461048211.6
<SIP/1001-00000006>AGI Tx >> agi_version: 1.8.32.3
<SIP/1001-00000006>AGI Tx >> agi_callerid: 1001
<SIP/1001-00000006>AGI Tx >> agi_calleridname: Test
<SIP/1001-00000006>AGI Tx >> agi_callingpres: 0
<SIP/1001-00000006>AGI Tx >> agi_callingani2: 0
<SIP/1001-00000006>AGI Tx >> agi_callington: 0
<SIP/1001-00000006>AGI Tx >> agi_callingtns: 0
<SIP/1001-00000006>AGI Tx >> agi_dnid: 1234
<SIP/1001-00000006>AGI Tx >> agi_rdnis: unknown
<SIP/1001-00000006>AGI Tx >> agi_context: family
<SIP/1001-00000006>AGI Tx >> agi_extension: 1234
<SIP/1001-00000006>AGI Tx >> agi_priority: 3
<SIP/1001-00000006>AGI Tx >> agi_enhanced: 0.0
<SIP/1001-00000006>AGI Tx >> agi_accountcode: 
<SIP/1001-00000006>AGI Tx >> agi_threadid: 140469556406016
<SIP/1001-00000006>AGI Tx >> agi_arg_1: 1001
<SIP/1001-00000006>AGI Tx >> 
<SIP/1001-00000006>AGI Rx << SET VARIABLE res1 Иванов Иван
<SIP/1001-00000006>AGI Tx >> 200 result=1
[Apr 19 09:43:31] ERROR[4220]: utils.c:1343 ast_carefulwrite: write() returned error: Broken pipe
    -- <SIP/1001-00000006>AGI Script clients.sh completed, returning 0
    -- Executing [1234@family:3] NoOp("SIP/1001-00000006", "Result_1: Иванов") in new stack
    -- Executing [1234@family:4] Hangup("SIP/1001-00000006", "") in new stack
  == Spawn extension (family, 1234, 4) exited non-zero on 'SIP/1001-00000006'
Как заставить asterisk не отбрасывать значение после пробела?

Re: Пробел в переменной через AGI

Добавлено: 19 апр 2016, 11:20
gosha

Код: Выделить всё

echo -n -e "SET VARIABLE res1 \"${RESULT1}\""
?

Re: Пробел в переменной через AGI

Добавлено: 19 апр 2016, 11:30
fantomas000
Отлично!

Код: Выделить всё

    -- Executing [1234@family:3] NoOp("SIP/1001-0000000e", "Result_1: Иванов Иван") in new stack
Но строка с ошибкой не пропала:
[Apr 19 11:25:59] ERROR[5525]: utils.c:1343 ast_carefulwrite: write() returned error: Broken pipe

Re: Пробел в переменной через AGI

Добавлено: 19 апр 2016, 11:33
Vlad1983
чтоб пропала нужно считать ответ, прежде чем завершить работу скрипта

Re: Пробел в переменной через AGI

Добавлено: 19 апр 2016, 11:35
fantomas000
А команда echo разве не считывает?

Re: Пробел в переменной через AGI

Добавлено: 19 апр 2016, 11:59
Wapo
Перед вызовом скрипта поставьте Set(AGISIGHUP="no")

Re: Пробел в переменной через AGI

Добавлено: 19 апр 2016, 12:02
fantomas000
Я в курсе про это, но не работает так:

Код: Выделить всё

    -- Executing [1234@family:1] Answer("SIP/1001-0000000f", "") in new stack
    -- Executing [1234@family:2] Set("SIP/1001-0000000f", "AGISIGHUP="no"") in new stack
    -- Executing [1234@family:3] AGI("SIP/1001-0000000f", "clients.sh,1001") in new stack
    -- Launched AGI Script /usr/share/asterisk/agi-bin/clients.sh
<SIP/1001-0000000f>AGI Tx >> agi_request: clients.sh
<SIP/1001-0000000f>AGI Tx >> agi_channel: SIP/1001-0000000f
<SIP/1001-0000000f>AGI Tx >> agi_language: ru
<SIP/1001-0000000f>AGI Tx >> agi_type: SIP
<SIP/1001-0000000f>AGI Tx >> agi_uniqueid: 1461056344.15
<SIP/1001-0000000f>AGI Tx >> agi_version: 1.8.32.3
<SIP/1001-0000000f>AGI Tx >> agi_callerid: 1001
<SIP/1001-0000000f>AGI Tx >> agi_calleridname: Denis
<SIP/1001-0000000f>AGI Tx >> agi_callingpres: 0
<SIP/1001-0000000f>AGI Tx >> agi_callingani2: 0
<SIP/1001-0000000f>AGI Tx >> agi_callington: 0
<SIP/1001-0000000f>AGI Tx >> agi_callingtns: 0
<SIP/1001-0000000f>AGI Tx >> agi_dnid: 1234
<SIP/1001-0000000f>AGI Tx >> agi_rdnis: unknown
<SIP/1001-0000000f>AGI Tx >> agi_context: family
<SIP/1001-0000000f>AGI Tx >> agi_extension: 1234
<SIP/1001-0000000f>AGI Tx >> agi_priority: 3
<SIP/1001-0000000f>AGI Tx >> agi_enhanced: 0.0
<SIP/1001-0000000f>AGI Tx >> agi_accountcode: 
<SIP/1001-0000000f>AGI Tx >> agi_threadid: 140469556406016
<SIP/1001-0000000f>AGI Tx >> agi_arg_1: 1001
<SIP/1001-0000000f>AGI Tx >> 
<SIP/1001-0000000f>AGI Rx << SET VARIABLE res1 "Иванов Иван"
<SIP/1001-0000000f>AGI Tx >> 200 result=1
[Apr 19 11:59:04] ERROR[5880]: utils.c:1343 ast_carefulwrite: write() returned error: Broken pipe
    -- <SIP/1001-0000000f>AGI Script clients.sh completed, returning 0
    -- Executing [1234@family:4] NoOp("SIP/1001-0000000f", "Result_1: Иванов Иван") in new stack
    -- Executing [1234@family:5] Hangup("SIP/1001-0000000f", "") in new stack
  == Spawn extension (family, 1234, 5) exited non-zero on 'SIP/1001-0000000f'

Re: Пробел в переменной через AGI

Добавлено: 19 апр 2016, 12:36
gland
На php таких проблем нет, к слову, строку даже не с одним пробелом и кириллицей отправляю.

Re: Пробел в переменной через AGI

Добавлено: 19 апр 2016, 13:24
fantomas000
Ну с пробелом-то благодаря помощи gosha решили.
А вот ошибка остается...

Re: Пробел в переменной через AGI

Добавлено: 19 апр 2016, 14:11
gland
Так ведь ответили - процедура чтения/записи/отправки завершается некорректно
Кстати, когда-то давно делал костыли с паузой в скрипте