当给出以下配置时,它的返回始终是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
提前致谢
答案 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文档中讨论: