RingCentral JavaScript SDK,WebHook以错误的HTTP状态响应。 HTTP状态为405

时间:2017-12-13 09:42:21

标签: javascript python-3.x django-rest-framework webhooks ringcentral

当给出以下配置时,它的返回始终是WebHook以不正确的HTTP状态响应。 HTTP状态为405。

这是webhook配置:

var token= access_token;
var _eventFilters = [];
            _eventFilters.push('/restapi/v1.0/account/~/extension/' + 232102004 + '/presence?detailedTelephonyState=true&aggregated=true')

            rcsdk.platform().post('/subscription',
            {
                eventFilters: _eventFilters,
                deliveryMode: {
                    "transportType": "WebHook",
                    "encryption": false,
                    "address": "https://demo.example.com/backend/country-list/web_hook/?auth_token="+token
                }
            })
            .then(function(subscriptionResponse) {
                console.log('Subscription Response: ', subscriptionResponse.json());
            })
            .catch(function(e) {
                console.error(e);
            });

这是我的Django webhook网址:

    @list_route(methods=['get'], url_path='web_hook')
    def create_web_hooks(self, request, **kwargs):

        query_params = request.query_params.dict()
        from django.http import HttpResponse
        response = HttpResponse()
        if 'auth_token' in query_params:
            response['Validation-Token'] = query_params['auth_token']
            response['status'] = 200
            response.write('Hello World')
        return response

提前致谢

1 个答案:

答案 0 :(得分:1)

在您的webhook响应中,response['Validation-Token']的内容需要是RingCentral创建webhook HTTP请求的Validation-Token标头中的值。您的webhook侦听器中未使用RingCentral OAuth 2.0访问令牌。

你的webhook示例是Python,所以这里有一些使用Django和Flask的例子。您应检查是否存在请求标头,如果存在,则将该值设置为同名的响应标头。以下显示了如何设置标题。

<强> Django的

在Django中,HttpRequest.META中提供了请求标头,使用它的特定算法重命名标头。 META是一个字典,因此您可以通过以下方式访问标题:

response['Validation-Token'] = request.META.get('HTTP_VALIDATION_TOKEN')

response['Validation-Token'] = request.META['HTTP_VALIDATION_TOKEN']

有关Django处理此问题的更多信息,请参阅HttpRequest.META的请求和响应对象文档:

https://docs.djangoproject.com/en/1.11/ref/request-response/#django.http.HttpRequest.META

这是标题重命名的具体文字:

  

除了CONTENT_LENGTH和CONTENT_TYPE之外,如上所述,请求中的任何HTTP头都将转换为META密钥,方法是将所有字符转换为大写,用下划线替换任何连字符,并在名称中添加HTTP_前缀。因此,例如,名为X-Bender的标头将映射到META密钥HTTP_X_BENDER。

<强>烧瓶

使用Flask,您可以通过以下方式使用flask.Request类字典对象访问HTTP请求标头:

response['Validation-Token'] = request.headers.get('Validation-Token')

response['Validation-Token'] = request.headers['Validation-Token']

这将在Flask Incoming Request Data文档中讨论:

http://flask.pocoo.org/docs/0.12/api/#incoming-request-data