如何从 webhook URL 桥接到 HTTP POST 请求?
How to bridge from a webhook URL to a HTTP POST request?
我想向 Twilio 发出 HTTP POST 请求,但调用服务只允许我输入 Webhook URL。
我试图将它与 apigee 的 API 代理连接起来,但我不知道如何让它工作。
流程是这样的:
motion.ai 上的聊天机器人在某个时间点调用网络钩子 URL。
该调用应通过 twilio.com 进行出站调用,这需要 HTTP POST 请求,请参阅 here.
POST 请求如下所示:
$ curl -XPOST https://api.twilio.com/2010-04-01/Accounts/<...>/Calls.json \
--data-urlencode "Url=http://demo.twilio.com/docs/voice.xml" \
--data-urlencode "To=<...>" \
--data-urlencode "From=<...>" \
-u '<...>:<...>'
解决这个问题的最简单方法是什么?
我设法使用 Apigee 设置 API 代理,将 HTTP GET 请求转换为 HTTP POST 请求。
在 Apigee 中创建 API 代理并添加 Basic Authentication
策略:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1">
<DisplayName>Basic Authentication-1</DisplayName>
<Operation>Encode</Operation>
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
<User ref="request.queryparam.username"/>
<Password ref="request.queryparam.password"/>
<AssignTo createNew="false">request.header.Authorization</AssignTo>
<Source>request.header.Authorization</Source>
</BasicAuthentication>
接下来添加 Assign Message
政策:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
<DisplayName>ConvertQueryToFormParameters</DisplayName>
<Properties/>
<Copy source="request">
<Headers/>
<QueryParams/>
<FormParams/>
<Payload/>
<Verb/>
<StatusCode/>
<ReasonPhrase/>
<Path/>
</Copy>
<Add/>
<Set>
<FormParams>
<FormParam name="To">{request.queryparam.To}</FormParam>
<FormParam name="From">{request.queryparam.From}</FormParam>
<FormParam name="Url">{request.queryparam.Url}</FormParam>
</FormParams>
<Verb>POST</Verb>
</Set>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>
然后您可以通过简单地调用向 Twilio 发出 POST 请求
https://<yourApigeeApiUrl>.apigee.net/<yourApiName>?username=<yourTwilioApiUsername>&password=<yourTwilioApiPassword>&...
我想向 Twilio 发出 HTTP POST 请求,但调用服务只允许我输入 Webhook URL。
我试图将它与 apigee 的 API 代理连接起来,但我不知道如何让它工作。
流程是这样的: motion.ai 上的聊天机器人在某个时间点调用网络钩子 URL。 该调用应通过 twilio.com 进行出站调用,这需要 HTTP POST 请求,请参阅 here.
POST 请求如下所示:
$ curl -XPOST https://api.twilio.com/2010-04-01/Accounts/<...>/Calls.json \
--data-urlencode "Url=http://demo.twilio.com/docs/voice.xml" \
--data-urlencode "To=<...>" \
--data-urlencode "From=<...>" \
-u '<...>:<...>'
解决这个问题的最简单方法是什么?
我设法使用 Apigee 设置 API 代理,将 HTTP GET 请求转换为 HTTP POST 请求。
在 Apigee 中创建 API 代理并添加 Basic Authentication
策略:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<BasicAuthentication async="false" continueOnError="false" enabled="true" name="Basic-Authentication-1">
<DisplayName>Basic Authentication-1</DisplayName>
<Operation>Encode</Operation>
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
<User ref="request.queryparam.username"/>
<Password ref="request.queryparam.password"/>
<AssignTo createNew="false">request.header.Authorization</AssignTo>
<Source>request.header.Authorization</Source>
</BasicAuthentication>
接下来添加 Assign Message
政策:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
<DisplayName>ConvertQueryToFormParameters</DisplayName>
<Properties/>
<Copy source="request">
<Headers/>
<QueryParams/>
<FormParams/>
<Payload/>
<Verb/>
<StatusCode/>
<ReasonPhrase/>
<Path/>
</Copy>
<Add/>
<Set>
<FormParams>
<FormParam name="To">{request.queryparam.To}</FormParam>
<FormParam name="From">{request.queryparam.From}</FormParam>
<FormParam name="Url">{request.queryparam.Url}</FormParam>
</FormParams>
<Verb>POST</Verb>
</Set>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>
然后您可以通过简单地调用向 Twilio 发出 POST 请求
https://<yourApigeeApiUrl>.apigee.net/<yourApiName>?username=<yourTwilioApiUsername>&password=<yourTwilioApiPassword>&...