2015-06-13 2 views
0

Когда мой сервер отправляет SMS с указанным параметром MediaUrl, я хочу использовать расположение (-ы), которые Twilio присваивает изображению (-ам) для создания тегов img с помощью src на основе media-> uri.Twilio: Лучший способ получения медиа-uri для отправленных sms

До сегодняшнего дня, следующий код работает ...

$client = new Services_Twilio($twilio_sid, $twilio_token); 
$params = array (
    "To" => $to, 
    "From" => $from, 
    "Body" => $body, 
    "MediaUrl" => $media, 
    "StatusCallback" => $twilio_callbackURL 
); 
$message = $client->account->messages->create($params); 

$sid = $message->sid; 
$status = $message->status; 
$attachments = ""; 
foreach ($message->media as $media) { 
    $attachment = $twilio_mediaURL . $media->uri; 
    $attachments .= "<br><br><a href='" . $attachment . "' target='_blank'><img src='" . $attachment . "' target='_blank'></a>"; 
} 

Я не уверен, что показано выше метод больше не является приемлемым, или он работал только по счастливой случайности. Например, возможно, статус всегда возвращается своевременно и не ждет каких-либо задержек при передаче изображений с моего сервера на Twilio, и поэтому при тяжелых нагрузках URL-адреса не назначаются до тех пор, пока статус уже не будет доставлен ,

  1. Должен ли вышеуказанный метод работать? Если нет ...
  2. Есть ли параметры, предоставленные в состоянии обратного вызова, которые предоставили бы эту информацию? Если нет ...
  3. Каков наилучший способ получить эту информацию после обратного вызова?
  4. Если URL-адрес может быть надежно восстановлен после обратного вызова, есть ли способ в первоначальном создании сообщения передать параметр, который будет возвращен, чтобы сервер знал, что для этого сообщения указан MediaUrl? (Очевидно, что сервер мог использовать SID для извлечения параметров сообщения из своей локальной базы данных, но это было бы не так эффективно.)

ответ

0

Быстрый обзор и обновление элементов в исходном вопросе ...

  • Хотя метод, указанный в моем вопросе, следует документации Twilio, результаты нереализуемы. В моем тестировании сервер Twilio предоставил необходимые ссылки в 60% случаев. Обратите внимание, что все протестированные изображения были всего 5 КБ, поэтому, по-видимому, это не относится к размеру файла.
  • Как показано в исходном вопросе, я задался вопросом, будут ли ссылки доступны в обратном вызове статуса. Я не верю, что они есть.
  • Также, как показано в исходном вопросе, я задавался вопросом, было ли что-либо в обратном вызове статуса, указывающем на отправку вложений. Я понял, что могу настроить собственный URL-адрес обратного вызова, и затем просмотреть эти параметры, когда был выполнен обратный вызов.

Для полноты, вот весь процесс от отправки до получения немедленного обновления, чтобы получать обновления обратного вызова, запрашивающие дополнительную информацию с сервером Twilio по:

// Append to the callback URL if attachments. 
if (isset($_REQUEST["MediaUrl"])) { 
    $callback .= "&Attachments=true"; 
} 

// Prep info to send. 
$params = array (
    "To" => $to, 
    "From" => $from, 
    "Body" => $body, 
    "StatusCallback" => $callback 
); 

// If the upload has an attachment array, include it. 
if (isset($_REQUEST["MediaUrl"])) { 
    $params["MediaUrl"] = $_REQUEST["MediaUrl"]; 
} 

// Send to Twilio. 
$client = new Services_Twilio($twilio_sid, $twilio_token); 
$message = $client->account->messages->create($params); 

// Note the initial/partial SID and status. 
$sid = $message->sid; 
$status = $message->status; 

// If there was an attachment, fetch the Twilio links. 
// This is the portion that fails 40% of the time in my use. 
if (isset($_REQUEST["MediaUrl"])) { 
    foreach ($message->media as $media) { 
     $attachment = $twilio_mediaURL . $media->uri; 
     $body .= "<br><a href='" . $attachment . "' target='_blank'><img src='" . $attachment . "' target='_blank'></a>"; 
    } 
} 

При изменении статуса сообщения, Twilio-х сервер связывается мой сервер на основе URL обратного вызова ...

// Immediately respond to Twilio 
header("content-type: text/xml"); 
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Response></Response>"; 

// Read the arguments. 
// Cleanse the data since we're not yet sure the data really is coming from Twilio. 
$sid = preg_replace("/\W|_/", "", $_REQUEST["MessageSid"]); 
$to = preg_replace("/[^0-9+]/", "", $_REQUEST["To"]); 
$status = preg_replace("/\W|_/", "", $_REQUEST["MessageStatus"]); 

if (isset($_REQUEST["Attachments"])) { 
    require_once $twilio_source; 

    $client = new Services_Twilio($twilio_sid, $twilio_token); 
    $body = $client->account->messages->get($sid)->body; 
    foreach ($client->account->messages->get($sid)->media as $media) { 
     $attachment = $twilio_mediaURL . $media->uri; 
     $body .= "<br><a href='" . $attachment . "' target='_blank'><img src='" . $attachment . "' target='_blank'></a>"; 
    } 

    updateMessage($sid, $to, $status, $body); 
} 
else { 
    updateMessage($sid, $to, $status, null); 
} 

Для тех, кто пытается это, я не говорю, что это лучший способ; но в отсутствие ответа от Twilio или нахождение информации в их документации, это лучшее, что я мог бы придумать.

Смежные вопросы