如何从 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>&...