GoESL 与 Temporal:呼叫并非源自 FreeSWITCH 中的某个点
我正在将 GoESL (https://www.php.cn/link/d9b64cee05c46d31b10b9869a3198a6d) 与 Temporal 集成,以通过 FreeSWITCH 自动拨号。该设置允许 1,000 个并发通道和每秒 50 个调用 (CPS)。每次拨号尝试都会启动一个临时工作流程,该工作流程通过活动发起呼叫。
成功发起 96 个呼叫(可变数量)后,FreeSWITCH 不再处理更多呼叫。 CLI 中没有日志,事件套接字层中没有事件指示进一步的尝试。但是,如果我停止 Temporal Worker,之前“卡住”的调用会出现在 FreeSWITCH CLI 中,表明它们已由 GoESL 客户端排队。我可以确认工作人员不会陷入困境,因为它会继续启动主要工作流程。
以下是相关代码片段:
潜在客户处理循环:
for _, lead := range leadResult.Leads { // [omitted setup and checks] // Checking for channel availability and sleeping to respect CPS limits workflow.Await(ctx, func() bool { return dialerQueryResponse.AvailableChannels > 0 }) timeToSleep := time.Second / time.Duration(dialerQueryResponse.CallsPerSecondLimit) workflow.Sleep(ctx, timeToSleep) // Dialing the lead fmt.Printf("dialing lead %s\n", lead) dialLead(lead, selectedDialer.Id, callTimeout) fmt.Print("lead dialed\n\n") }
拨号引导逻辑:
dialLead := func(lead string, selectedDialerId, dialerCallTimeout int) { // Setup child workflow context with unique ID cwo.WorkflowID = fmt.Sprintf("Campaign_Call_%s", lead) childCtx := workflow.WithChildOptions(ctx, cwo) // Struct to pass input to the child workflow input := domain.CallWorkflowInput{ Lead: lead, DialerId: selectedDialerId, CampaignName: cds.CampaignName, DialplanExtension: cc.Survey.DialplanExtension, CallTimeout: dialerCallTimeout, } // Executing the child workflow and handling its future future := workflow.ExecuteChildWorkflow(childCtx, CallWorkflow, input) var dialerId int selector.AddFuture(future, func(f workflow.Future) { err := f.Get(ctx, &dialerId) // Error handling and updating concurrency state // ... }) }
调用工作流函数:
func CallWorkflow(ctx workflow.Context, input domain.CallWorkflowInput) (int, error) { // [omitted setup] // Executing the originate call activity var dialLeadResult domain.DialLeadResponse if err := workflow.ExecuteActivity(ctx, activity.Dialer.OriginateCallActivity, dialInput).Get(ctx, &dialLeadResult); err != nil { // Error handling } // [omitted post-call handling] }
依次执行发起呼叫活动:
func (a *DialerActivities) OriginateCallActivity(ctx context.Context, input domain.DialLeadRequest) (domain.DialLeadResponse, error) { // [omitted client selection] // Command to originate the call cmd := fmt.Sprintf("originate {%s}%s/%s/%s 704 XML default test %s 10", variables, protocol, gateway, input.DestinationNumber, input.OriginatingNumber) err := selectedClient.BgApi(cmd) if err != nil { // Error handling } // [omitted response preparation] }}, nil }
是否有人在使用 GoESL 或 Temporal 时遇到过类似的问题,其中调用似乎在排队并且超过某个点后未执行?关于如何调试这种情况或为什么终止临时工作线程可能会触发排队调用的处理有什么建议吗?
我尝试过的:
- 确保遵守限制。
- 使用 FreeSWITCH CLI 进行调试并检查 CDR。
- 检查 FreeSWITCH 日志以尝试查找任何异常情况。
- 尝试在 FreeSWITCH 设置中记录 GoESL 事件的日志,但是没有将任何日志写入该文件。
- 将
workflow.Sleep
持续时间从几毫秒修改为 5 - 10 秒,以确保不是网络延迟导致问题。 - 确认在终止工作流程之前我的代码或日志中不会引发任何错误。
- 已停止 FreeSWITCH 实例,以确保这不是 GoESL 与 FreeSWITCH 之间的通信问题。停止 FreeSWITCH 实例时,日志指示通信失败。否则我不会收到任何日志。
- 研究:在 Google 上找到这篇文章 (https://lists.freeswitch.org/pipermail/freeswitch-users/2019-May/131768.html),该文章似乎与我们遇到的同一问题有关,但是,没有解决办法。
正确答案
决定更换 GoESL 软件包 (https://www.php.cn/link/d9b64cee05c46d31b10b9869a3198a6d )使用不同的 GoESL 包(https://www.php.cn/link/8c8566b78ac2b99c542bef8c37cac179)和问题已经解决了。似乎是初始 GoESL 包中的一个根本问题。
我在此处的 Github 存储库上提出了一个问题 (https://github.com /0x19/goesl/issues/40)以防将来有人遇到同样的问题。
以上是GoESL 与 Temporal:呼叫并非源自 FreeSWITCH 中的某个点的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

RedmiNote13RPro是一款性能配置非常不错的全新机型,这款手机中有一个隐藏相册的功能十分好用,它可以帮助用户将相册隐藏起来,让别人无法查看你的相册。接下来,小编就来给大家说一说红米Note13RPro怎么隐藏相册,帮助大家保护隐私。红米Note13RPro怎么隐藏相册?1、进入小米手机的设置里。2、然后再点击隐私和保护。3、在这里再点击保护隐私。4、点击保险箱。5、最后在这里就可以设置私密相册。常见问题连接蓝牙换输入法主题更换出厂设置隐藏应用投屏电视NFC开启双卡安装激活时间

不要改变原内容的意思,微调内容,重写内容,不要续写红米Note13RPro不仅性能出色,使用体验更加出色,为了让大家有更舒适的使用体验,红米Note13RPro配备了字体调整功能,让用户能够调整自己的手机的字体。如果你想知道红米Note13RPro怎么调整字体大小,那么就来看一看吧。红米Note13RPro怎么调整字体大小?1.打开“设置”应用程序。2.滚动到底部,选择“显示”。3.点击“文字大小”。4.在此屏幕上,您可以通过拖动滑块调整字体大小或者选择预设字体大小。5.调整完毕后,按“确定”保

RedmiNote13RPro这款手机最近是非常火爆的,很多消费者都购买了这款手机,不过很多用户是第一次使用这款手机所以不清楚红米Note13RPro怎么连接电脑,对此,小编在这里为大家带来了详细的教程介绍。红米Note13RPro怎么连接电脑?1.使用USB数据线将红米手机连接到电脑的USB接口上。2.打开手机设置,击选项,将USB调试打开。3.在电脑上打开设备管理器,找到移动设备选项。4.右键点击移动设备,选择更新驱动程序,然后选择自动搜索更新的驱动程序。5.如果电脑没有自动搜索到驱动程序,

红米Note13RPro手机在软件功能上集成了多项智能工具,其中,从图片中快速准确地提取文字内容便是其中之一,下面小编将为大家介绍红米Note13RPro如何提取图片中的文字。红米Note13RPro怎么提取图中的文字?使用小米扫码功能,打开手机的扫码应用,点击图片图标,选择一张图片,然后点击右边的“识别文字”选项,成功提取出图片中的文字。通过手机相册操作。在手机相册中找到需要提取文字的图片,点击图片下方的“更多”,选择“提取文字”,识别成功后,可以根据需要复制或保存文本。利用微信小程序。打开微

整个活吧是一款非常好玩的休闲解谜小游戏,大家可以在多平台体验!游戏提供了无数精彩的关卡等待解锁,每个关卡都充满了新奇和挑战,让你体验回答问题的有趣冒险,开启全新的游戏内容。那么整个活吧全关卡怎么通关呢?今天给大家带来了《整个活吧》全关卡通关攻略大全分享,大家过关遇到问题可以来参考一下哦!《整个活吧》全关卡通关攻略大全《整个活吧》全关卡通关攻略大全帮她守岁人鬼情未了帮小姐姐识别渣男狼外婆帮小女孩脱离危险户外探险假装看不见阿飘变回人形帮猩猩修成人形后座有人保持镇定和女鬼周旋夜班出租车保持镇定和女鬼周

红米Note13RPro的拍照功能非常好用,特别是在拍照的时候会模拟相机快门的声音,不过这个功能在图书馆等一些安静的场合会影响别人,所以很多用户想知道红米Note13RPro怎么关闭拍照声音,下面就让小编来告诉你。红米Note13RPro怎么关闭拍照声音?1.第一种方法,首先需要打开手机的设置。2.然后在设置菜单下找到系统应用。3.紧接着我们在系统应用界面下找到相机选项。4.最后,我们在相机界面下就可以设置相机声音的关闭与否了,只需要将相机声音右边的开关关闭就可以了。5.第二种方法,第一步,打开

RedmiNote13RPro是一款备受广大用户喜爱的手机。这款手机提供了特别的方法来让流量显示在手机上,如果你还不知道RedmiNote13RPro怎么设置显示流量,那么就跟随小编一起来了解一下吧。红米Note13RPro怎么设置流量显示?1、进入“设置”,点击“双卡移动网络”。2、下滑选择“流量套餐设置”选项。3、开启“通知栏显示流量信息”和“状态栏显示当时网速”右侧的功能开关。4、设置成功后,下拉状态栏就可以看到实时网速及流量信息的显示了。常见问题连接蓝牙换输入法主题更换出厂设置隐藏应用投

红米Note13RPro是红米最新推出的旗舰手机,这款手机上有许多人性化的功能,比如一键锁屏功能,该功能可以帮助大家快速锁屏,保护大家的隐私。如果你想知道红米Note13RPro怎么一键锁屏,那么就别错过了。红米Note13RPro怎么设置一键锁屏?1、从下往上滑动,找到添加小组件的地方点击。2、找到小部件这里,然后点击“全部”3、点击下面的“安卓小部件”4、找到锁屏添加上就可以了。常见问题连接蓝牙换输入法主题更换出厂设置隐藏应用投屏电视NFC开启双卡安装激活时间
