Rumah >pembangunan bahagian belakang >Golang >GoESL lwn Temporal: Panggilan tidak berasal dari titik tertentu dalam FreeSWITCH

GoESL lwn Temporal: Panggilan tidak berasal dari titik tertentu dalam FreeSWITCH

WBOY
WBOYke hadapan
2024-02-06 09:21:04942semak imbas

GoESL 与 Temporal:呼叫并非源自 FreeSWITCH 中的某个点

Kandungan soalan

Saya sedang menyepadukan GoESL (https://www.php.cn/link/d9b64cee05c46d31b10b9869a3198a6d) dengan Temporal ke auto-dail melalui FreeSWITCH. Persediaan ini membenarkan 1,000 saluran serentak dan 50 panggilan sesaat (CPS). Setiap percubaan mendail memulakan aliran kerja sementara yang memulakan panggilan melalui aktiviti.

Selepas 96 panggilan berjaya (nombor pembolehubah), FreeSWITCH tidak mengendalikan panggilan lagi. Tiada log dalam CLI dan tiada peristiwa dalam lapisan soket acara untuk menunjukkan percubaan selanjutnya. Walau bagaimanapun, jika saya menghentikan Pekerja Sementara, panggilan "tersangkut" sebelum ini muncul dalam FreeSWITCH CLI yang menunjukkan bahawa ia telah dibariskan oleh pelanggan GoESL. Saya boleh mengesahkan bahawa pekerja itu tidak tersekat kerana ia terus melancarkan aliran kerja utama.

Berikut ialah coretan kod yang berkaitan:

Gelung Pemprosesan Plumbum:

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")
}

Logik panduan dial-up:

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
        // ...
    })
}

Fungsi aliran kerja panggilan:

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]
}

Laksanakan aktiviti permulaan panggilan mengikut urutan:

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
}

Adakah sesiapa menghadapi isu yang sama menggunakan GoESL atau Temporal, di mana panggilan kelihatan beratur dan tidak dilaksanakan melepasi titik tertentu? Sebarang cadangan tentang cara untuk menyahpepijat keadaan ini atau mengapa membunuh utas pekerja sementara mungkin mencetuskan pengendalian panggilan beratur?

Apa yang saya cuba:

  • Pastikan ikut sekatan.
  • Gunakan FreeSWITCH CLI untuk nyahpepijat dan memeriksa CDR.
  • Semak log FreeSWITCH untuk mencuba dan mencari sebarang anomali.
  • Cuba log peristiwa GoESL dalam persediaan FreeSWITCH, tetapi tiada log ditulis pada fail.
  • Ubah suai workflow.Sleep tempoh dari beberapa milisaat hingga 5 - 10 saat untuk memastikan ia bukan kependaman rangkaian yang menyebabkan masalah.
  • Mengesahkan bahawa tiada ralat dilemparkan dalam kod atau log saya sebelum menamatkan aliran kerja.
  • Menghentikan contoh FreeSWITCH untuk memastikan ini bukan isu komunikasi antara GoESL dan FreeSWITCH. Apabila menghentikan contoh FreeSWITCH, log menunjukkan kegagalan komunikasi. Jika tidak, saya tidak menerima sebarang log.
  • Penyelidikan: Menemui artikel ini di Google (https://lists.freeswitch.org/pipermail/freeswitch-users/2019-May/131768.html) yang nampaknya berkaitan dengan isu yang sama yang kami hadapi, namun, Tiada penyelesaian.
  • . pautan/ 8c8566b78ac2b99c542bef8c37cac179
) dan masalah telah diselesaikan. Nampaknya menjadi isu asas dalam pakej awal GoESL.
Saya membangkitkan isu tentang repositori Github di sini (

https://github.com/0x19/goesl/issues/40

) sekiranya sesiapa menghadapi masalah yang sama pada masa hadapan.

Atas ialah kandungan terperinci GoESL lwn Temporal: Panggilan tidak berasal dari titik tertentu dalam FreeSWITCH. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam