【问题标题】:attempt to index global 'e_con' (a number value)尝试索引全局“e_con”(一个数值)
【发布时间】:2017-03-10 13:45:18
【问题描述】:
lua: els_bgapi.lua:20: attempt to index global 'e_con' (a number value)
stack traceback:
        els_bgapi.lua:20: in main chunk
        [C]: in ?

请帮助我是 Lua 和 FreeSWITCH 的新手,运行下面的代码时遇到上述错误

sock:bgapi("originate","{sip_cid_type=pid,origination_uuid=uuid,origination_caller_id_number=65181,originate_timeout=10}sofia/external/sip:81245@10.20.16.135 5000")

e_con= sock:events("plain","all");
if (e_con) then
  print(e_con:getHeader());
else
  print("not e_con")
end

【问题讨论】:

  • 看来sock:events返回的是一个数字,而不是可以调用getHeader的对象。
  • @EgorSkriptunoff Job-uuid 是这样的数字:+OK Job-UUID: f719939a-ffa1-49ca-a8b6-7f080febc2dc。

标签: lua freeswitch


【解决方案1】:

events 命令只是订阅事件,而不是从连接中读取任何事件。

bgapi 就像您向 FS 发送命令一样工作。 FS 返回带有作业 ID 的回复。但是此时FS可能不会开始执行命令。您必须等待具有正确作业 ID 的 BACKGROUND_JOB 事件。

所以你必须订阅BACKGROUND_JOB(或者像你一样订阅所有,但要准备好处理许多其他事件)。

然后发送 bgapi 并从响应中读取作业 uuid 或传递您自己的作业 uuid,以便您可以在获得响应表单 FS 之前过滤事件。然后循环使用recvEvent

我不使用原始 ESL 库,但 FS 书籍中有示例。 我也基于 LibUV 库在我自己的 ESL implementation for Lua 上工作

【讨论】:

  • 你是对的,我订阅了 e = sock:sendRecv("events plain all") 并设置 e = sock:recvEventTimed(30), job_uuid = e:getHeader("Job-UUID");所以我得到了 Job_uuid。
  • 你是对的,我订阅了 e = sock:sendRecv("events plain all") 并设置 e = sock:recvEventTimed(30), job_uuid = e:getHeader("Job-UUID");因此,我得到了 Job_uuid.please,我想知道如何使用 LibUV 库实现 ESL,我将不胜感激任何有关此的文档。请原谅我的无知是一个 lua 初学者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
  • 2013-06-07
  • 2020-03-08
  • 2013-09-04
  • 2019-03-01
  • 1970-01-01
相关资源
最近更新 更多