【问题标题】:Contentful: Prevent webhook from triggering, when using Content Management APIContentful:使用 Content Management API 时防止触发 webhook
【发布时间】:2017-11-06 22:29:20
【问题描述】:

所以我在 Contentful 仪表板中创建了一个 webhook,它会在发布或删除条目时触发,并且它可以正常工作。但是,我希望能够通过 Content Management JavaScript API 发布条目,而无需触发 webhook。我可以采取什么措施来实现这一点?

【问题讨论】:

    标签: javascript php contentful contentful-management


    【解决方案1】:

    很遗憾,如果条目是通过 API 或直接通过网络应用发布的,则没有区别。 Web 应用程序只是在底层调用 API。

    可能的方法是检查 web 挂钩中已发布的条目并评估代码是否应该执行。或许可以在直接通过 API 发布时设置隐藏字段。

    例如,假设您有一个字段 publishedThroughAPI,请确保该字段从交付 API 中省略并且不可编辑:

    然后在通过 JavaScript API 发布之前将此字段设置为 true,并在您的 webhook 中检查此字段,如果该字段设置为 true,则只需退出钩子即可。

    webhook 将接收包含您发布的条目的有效负载。基本上与普通请求相同的有效负载,不同之处在于它将包含每个语言环境。下面是一个小例子:

    {
       "sys": {
             //System meta data, created at, published at etc.
        },
       "fields": {
           //All fields of the entry.
           "title": {
                "en-US": "English title",
                "sv-SE": "Swedish title"
           },
           "publishedThroughAPI": {
                "en-US": true,
                "sv-SE": true
           }
       }
    }
    

    【讨论】:

    • 这一切都说得通,但是我怎么知道哪些参数/记录被发送到 webhook?
    • 发布的条目作为有效负载发送到 webhook。用一个例子更新我的答案。
    • 有没有办法用PHP提取payload?
    • 当然,您可以执行$payload = file_get_contents('php://input'); 之类的操作,这会将 json 字符串读入有效负载变量中。然后,您可以使用$jsonObject = json_decode($string, true); 对其进行解码并继续读取某个密钥,例如$jsonObject['fields']['publishedThroughAPI']['en-US']
    • 太棒了,当通过 API 发布条目时,此功能有效。但是,我是否可以使用类似的技巧通过 API 取消发布条目,而不触发 webhook?使用内容管理 api,我似乎只能提供条目 ID 作为有效负载
    猜你喜欢
    • 2020-09-03
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 2022-07-28
    • 1970-01-01
    • 2016-11-04
    相关资源
    最近更新 更多