Smartsheet webhook 子范围

Smartsheet webhook subscope

我正在尝试使用以下代码在 python 我的一张工作表中创建一个包含特定列子范围的 webhook:

my_webhook = smartsheet_client.Webhooks.create_webhook(
    smartsheet.models.Webhook({
        'name': 'test 10',
        'callbackUrl': 'https://my_web.com/webhook/test10',
        'scope': 'sheet',
        'scopeObjectId': 0000000000000000,
        'subscope': {'columnIds': [0000000000000000]},
        'events': ['*.*'],
        'version': 1
        }))

当我获得成功创建的 webhook 及其 ID 时,响应中缺少子范围。 有谁知道我做错了什么吗?

我对 Smartsheet Python SDK 不是很熟悉,但总的来说,每当我有关于如何使用SDK实现某个操作的问题。在这种情况下,SDK 存储库中的 integration test for webhooks 显示了以下用于创建 webhook 的代码:

def test_create_webhook(self, smart_setup):
        smart = smart_setup['smart']

        webhook = smart.models.Webhook()
        webhook.name = 'My Webhook'
        webhook.callback_url = 'https://www.smartsheet.com'
        webhook.scope = 'sheet'
        webhook.scope_object_id = smart_setup['sheet'].id
        webhook.events.append('*.*')
        webhook.version = 1
        webhook.subscope = smart.models.WebhookSubscope({'column_ids': [smart_setup['sheet'].columns[0].id]})

        action = smart.Webhooks.create_webhook(webhook)
        assert action.message == 'SUCCESS'
        assert isinstance(action.result, smart.models.Webhook)
        TestWebhooks.webhook = action.result

请特别注意 subscope 属性 的设置方式与您在上面发布的方式不同。我建议尝试根据此代码对您的代码进行更多建模,看看您是否可以达到预期的结果。

您的代码与我的几乎完全相同,子范围也不适合我。我从 smartsheet-python-sdk pip 包 2.86 升级到 2.105,现在我的 webhook 设置正确。我还验证了 subscope 设置有效,这大大减少了我必须处理的事件数量。

这是我的代码(尽管它与您的代码基本相同)。

def createSheetWebhook(name, sheet_id, target, subscope=[]):
    new_webhook = smartsheet_client.Webhooks.create_webhook(
        smartsheet.models.Webhook({
            "name": F"sheet changes for {name}",
            "callbackUrl": target,
            "scope": 'sheet',
            "scopeObjectId": sheet_id,
            "subscope": {
                "columnIds": subscope
            },
            "events": ['*.*'],
            "version": 1
        })
    )
    return new_webhook.result.id