我已经设置了一个TwiML bin来处理我的一个号码上的传入传真。垃圾箱看起来像(如果我没记错的话,现在没有用于编辑现有传真TwiML垃圾箱的仪表板:))
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Receive action="my/api/endpoint" methods="POST" storeMedia="false"/>
</Response>
但是,我并不相信这是我的TwiML垃圾箱的问题。进入调试器,我看到11200错误,与服务的连接问题。似乎连接问题与TwiML bin处理程序有关:
POST https://handler.twilio.com/fax/received
请求消息文本:&#34 ;;将重试,直到2018-04-20T23:07:25.893Z&#34;
响应正文:&#34; HTTP检索失败&#34;
这个问题出现在Twilio的一边,对吗? 我还应该检查一下吗?
答案 0 :(得分:0)
我有同样的错误。
错误只是因为twilio没有从您的操作终结点获得预期的结果。
首先,您应该使用正确执行的action
属性返回以下XML
<?xml version="1.0"?>
<Response>
<Receive action="/api/fax/received/file"/>
</Response>
第二,你应该在/api/fax/received/file
返回200 OK回复。这意味着您应该回复有效的回复,确认您将该传真文件设置为twilio,即200响应代码。
在您的情况下:
现在你应该{2}活跃并且可以从twilio获得<your-domain>/my/api/endpoint
,因为你有action="my/api/endpoint"
。当twilio调用此端点时,您应该返回200 OK响应,确认您已获得该文件,否则twilio将认为存在错误&#34; HTTP检索失败&#34;。
检查您的action="my/api/endpoint"
(/传真/已收到),并确保以200回复。
如果编程语言对您无关紧要,那么两个端点的代码在PHP中如下所示。第一种方法(Endpoint)与twilio上的电话号码映射,第二种方法是action属性。这就是我摆脱这个错误的方法。
// this is /api/incoming/fax endpoint and I on twilio i have put this URL on the phone number
// this method will be called via /api/incoming/fax when any incoming fax
public function incomingFax(Request $request){
$twimlResponse = new \SimpleXMLElement("<Response></Response>");
$recieveEl = $twimlResponse->addChild('Receive');
$recieveEl->addAttribute('action', '/api/fax/received/file');
return response($twimlResponse->asXML(), 200)
->header('Content-Type', 'text/xml');
}
// this is /api/fax/received/file endpoint which will be called by twilio
//always return 200
public function receivedFaxFile(Request $request)
{
$inputs = $request->all();
$from = $inputs['From'];
$media_url = $inputs['MediaUrl'];
if(isset($inputs['MediaUrl'])&&isset($inputs['To'])){
$thread = Thread::where(array("out_did"=>$to))->latest()->first();
$slack = new Slack(config("app.slack_access_key"));
$this->sendAttachment($from,$to,$media_url,$thread->thread_ts);
}
return response('', 200); // should return 200
}