如何通过AMI获取Agent的暂停时间?

How to get via AMI the Pause time of Agent?

我正在制作一个 WebSocket 应用程序,需要获取代理的当前暂停时间。

当我调用操作:QueueStatus 时,return 是 QueueMember 事件。 JSON 中的一个 return 是这样的:

{ActionID: "WelcomeStatus/7000"
CallsTaken: "0"
Event: "QueueMember"
InCall: "0"
LastCall: "0"
LastPause: "1568301325"
Location: "Agent/7000"
Membership: "dynamic"
Name: "Agent/7000"
Paused: "1"
PausedReason: "Almoço"
Penalty: "0"
Queue: "queue1"
StateInterface: "Agent/7000"
Status: "4"}

注意,是 returned "LastPause"、"PausedReson" 和 "Pause".. 在"LastPause"中,客场显示了一些疯狂的数字(我不明白那个数字哈哈哈哈)。

那么,如何从 Asterisk 15 获取当前暂停时间?

——编辑: 通过重新测试,我发现造成这种情况的原因是我还提交了休息原因。 如果我不发送休息时间的原因正常工作。

谢谢你的帮助。

在 asterisk 的论坛上冲浪,我找到了发行版:

Bugs fixed in this release: ASTERISK-27541 - app_queue: Queue paused reason was (big number) secs ago when reason is set (Reported by César Benjamín García Martínez)

但是这个版本是针对 Asterisk 16 的,而不是针对 Asterisk 15 的。 我决定在一些 C 文件中搜索这个问题,但我发现失败了。

Remember, I have to recompile my asterisk, because I change things straight from the source code. So if you need to perform this procedure, do it in a test environment before it is passed to the production environment.

打开文件: /usr/src/asterisk-15.7.3/apps/app_queue.c

然后搜索这一行:

mem->reason_paused,  (long) (time(NULL) - mem->lastcall), ast_term_reset());

变化:

mem->reason_paused,  (long) (time(NULL) - mem->lastpause), ast_term_reset());

并在这一行:

"LastPause", (int)mem->lastpause,

更改为:

"LastPause", (long) (time(NULL) - mem->lastpause),

我认为完成了...CLI 上的所有 AMI 请求和命令都返回了正确的信息,并且在我的 AMI 套接字上运行良好。