 
   dispatch EDIT_MESSAGE_BEGIN, { messageId, body, payload }
 
-  socialapi.message.edit {id: messageId, body, payload}, (err, message) ->
-    if err
-      dispatch EDIT_MESSAGE_FAIL, { err, messageId }
-      return
-
-    realtimeActionCreators.bindMessageEvents message
-    dispatch EDIT_MESSAGE_SUCCESS, { message, messageId }
+  fetchEmbedPayload { body, payload }, (embedPayload) ->
+    payload = _.assign {}, payload, embedPayload
+
+    socialapi.message.edit {id: messageId, body, payload}, (err, message) ->
+      if err
+        dispatch EDIT_MESSAGE_FAIL, { err, messageId }
+        return
+
+      realtimeActionCreators.bindMessageEvents message
+      dispatch EDIT_MESSAGE_SUCCESS, { message, messageId }
 
 
 ###*

    channelId, clientRequestId, body
  }

  embedlyUrl = embedlyHelpers.extractUrl body
  if embedlyUrl
    embedlyPromise = fetchEmbedData embedlyUrl
  else
    embedlyPromise = Promise.resolve()

  embedlyPromise.nodeify (err, result) ->

    if err
      kd.log 'Embed.ly error!', err
    else if result
      data    = result.first
      payload = embedlyHelpers.createMessagePayload data

    socialapi.message.post { channelId, clientRequestId, body, payload }, (err, message) ->
      if err

  dispatch UNSET_MESSAGE_EDIT_MODE, { messageId }


fetchEmbedPayload = (messageData, callback = kd.noop) ->

  url = embedlyHelpers.extractUrl messageData.body
  return callback()  unless url
  return callback()  if messageData.payload?.link_url is url

  options = {
    maxWidth  : 530
