How "blobmsg_get_u64" get data from “ubus call” in terminal?

I call a UBUS interface via "ubus call" in the OpenWRT terminal. The parsing policy of this interface contains the data of the "BLOBMSG_TYPE_INT64", but I found that the function "blobmsg_get_u64" does not parse the data from the terminal as well as other functions, why does this cause this problem, and is there any way to solve this problem?
I've confirmed that data of type "BLOBMSG_TYPE_INT32" can be retrieved normally using "blobmsg_get_u32", which is also the way to manually call in the terminal.

static const struct blobmsg_policy add_timedtask_policy[__TASK_MAX] = {
    [TASK_ID] = { .name = "taskId", .type = BLOBMSG_TYPE_INT32 },
    [TASK_TIME_OFFSET] = { .name = "timeOffset", .type = BLOBMSG_TYPE_INT64 },
    [TASK_WEEK] = { .name = "week", .type = BLOBMSG_TYPE_INT32 },
    [TASK_ENABLE] = { .name = "enable", .type = BLOBMSG_TYPE_INT32 },
    [TASK_ACTION] = { .name = "action", .type = BLOBMSG_TYPE_INT32 },
    [TASK_TIME_OFFSET2] = { .name = "timeOffset2", .type = BLOBMSG_TYPE_INT64 },
}
---------------------------------------------
static int add_timed_task(struct ubus_context *ctx,
                            struct ubus_object *obj,
                            struct ubus_request_data *req,
                            const char *method,
                            struct blob_attr *msg)
{
    struct blob_attr *tb[__TASK_MAX];
    int week = 0, action = 0, taskid = 0, enable = 0;
    u_int64_t timeoffset = 0;
    u_int64_t timeoffset2 = 0;
    blobmsg_parse(add_timedtask_policy, __TASK_MAX, tb, blob_data(msg), blob_len(msg));

    if (tb[TASK_ID]) {
        taskid = blobmsg_get_u32(tb[TASK_ID]);
        printf("taskid = %d\n", taskid);
    }
    if (tb[TASK_TIME_OFFSET]) {
        timeoffset = blobmsg_get_u64(tb[TASK_TIME_OFFSET]);
        printf("timeoffset = %lld\n", timeoffset);
    }
    if (tb[TASK_WEEK]) {
        week = blobmsg_get_u32(tb[TASK_WEEK]);
        printf("week = %d\n", week);
    }
    if (tb[TASK_ENABLE]) {
        enable = blobmsg_get_u32(tb[TASK_ENABLE]);
        printf("enable = %d\n", enable);
    }
    if (tb[TASK_ACTION]) {
        action = blobmsg_get_u32(tb[TASK_ACTION]);
        printf("action = %d\n", action);
    }
    if (tb[TASK_TIME_OFFSET2]) {
        timeoffset2 = blobmsg_get_u64(tb[TASK_TIME_OFFSET2]);
        printf("timeoffset2 = %lld\n", timeoffset2);
    }

    return 0;
}
-----------------------------------------------
ubus call timedtask addTimedTask '{"taskId":0,"timeOffset":1000,"week":0,"enable":0,"action":0,"timeOffset2":2000}'