Asterisk Python AGI 问题

1 投票
1 回答
2892 浏览
提问于 2025-04-17 18:58

我有一个基本的Python AGI代码,使用了pyst库,配置在:

extensions.conf

[from-internal]
exten => _.,1,answer()
exten => _.,2,AGI(test.py)

我在/var/lib/asterisk/agi-bin目录下有一个test.py文件,内容是:

#!/usr/bin/python
import sys
import os
from agi import AGI
def test_call(agi = None,text = ""):
    agi.say_alpha(text, "#")
    agi.hangup()
if __name__ == "__main__":
    text = 'abcdefr'
    agi = AGI()
    test_call(agi,text)

我还有一个文件叫agi.py,是从pyst库中获取的。

当我尝试调用这个AGI时,遇到了这个问题:

Executing [123@from-internal:1] Answer("SIP/12345-00000016", "") in new stack
[Mar 14 00:01:29] NOTICE[2790]: res_rtp_asterisk.c:2358 ast_rtp_read: Unknown RTP codec 126 received from '169.254.38.82:20338'
    -- Executing [123@from-internal:2] AGI("SIP/12345-00000016", "test.py") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/test.py
 test.py: Failed to execute '/var/lib/asterisk/agi-bin/test.py': No such file or directory
    -- Auto fallthrough, channel 'SIP/12345-00000016' status is 'UNKNOWN'
    -- Executing [h@from-internal:1] Hangup("SIP/12345-00000016", "") in new stack
  == Spawn extension (from-internal, h, 1) exited non-zero on 'SIP/12345-00000016'

我看到在/var/lib/asterisk/agi-bin目录下有这个文件,并且权限设置为777。

请给我一些建议,让这个基本的脚本能够正常工作。

提前感谢大家!

1 个回答

3

出现这种错误可能有两个原因:

  1. 在这个位置没有找到文件 /var/lib/asterisk/agi-bin/test.py,或者由于某种原因,asterisk无法访问这个文件——这通常是因为Linux的权限问题。
  2. 文件 /var/lib/asterisk/agi-bin/test.py 是存在的,但缺少一些库(Python会给出相同的错误)。这种情况更常见。可以尝试以asterisk用户手动执行这个脚本,看看会有什么提示。

建议:使用FastAGI来代替AGI。

撰写回答