module MixinBot::API::Message

developers.mixin.one/api/beta-mixin-message/websocket-messages/

Public Instance Methods

acknowledge_message_receipt(message_id) click to toggle source

ACKNOWLEDGE_MESSAGE_RECEIPT ack server received message {

"id": "UUID",
"action": "ACKNOWLEDGE_MESSAGE_RECEIPT",
"params": {
  "message_id": "UUID // message_id is you received message's message_id",
  "status": "READ"
}

}

# File lib/mixin_bot/api/message.rb, line 20
def acknowledge_message_receipt(message_id)
  params = {
    message_id: message_id,
    status: 'READ'
  }
  write_ws_message(action: 'ACKNOWLEDGE_MESSAGE_RECEIPT', params: params)
end
app_button_group(options) click to toggle source

{

"id": "UUID",
"action": "CREATE_MESSAGE",
"params": {
  "conversation_id": "UUID",
  "category": "APP_BUTTON_GROUP",
  "status": "SENT",
  "message_id": "UUID",
  "data": "Base64 encoded data"
}

} data format: [

{
  "label": "Mixin Website",
  "color": "#ABABAB",
  "action": "https://mixin.one"
},
...

]

# File lib/mixin_bot/api/message.rb, line 191
def app_button_group(options)
  options.merge!(category: 'APP_BUTTON_GROUP')
  base_message_params(options)
end
app_card(options) click to toggle source

{

"id": "UUID",
"action": "CREATE_MESSAGE",
"params": {
  "conversation_id": "UUID",
  "category": "APP_CARD",
  "status": "SENT",
  "message_id": "UUID",
  "data": "Base64 encoded data"
}

} data format: {

"icon_url": "https://mixin.one/assets/98b586edb270556d1972112bd7985e9e.png",
"title": "Mixin",
"description": "A free and lightning fast peer-to-peer transactional network for digital assets.",
"action": "https://mixin.one"

}

# File lib/mixin_bot/api/message.rb, line 166
def app_card(options)
  options.merge!(category: 'APP_CARD')
  base_message_params(options)
end
base_message_params(options) click to toggle source

base format of message params

# File lib/mixin_bot/api/message.rb, line 235
def base_message_params(options)
  data = options[:data].is_a?(String) ? options[:data] : options[:data].to_json
  {
    conversation_id: options[:conversation_id],
    recipient_id: options[:recipient_id],
    representative_id: options[:representative_id],
    category: options[:category],
    status: 'SENT',
    quote_message_id: options[:quote_message_id],
    message_id: options[:message_id] || SecureRandom.uuid,
    data: Base64.encode64(data)
  }
end
list_pending_message() click to toggle source
# File lib/mixin_bot/api/message.rb, line 7
def list_pending_message
  write_ws_message(action: 'LIST_PENDING_MESSAGES', params: {})
end
plain_contact(options) click to toggle source

{

"id": "UUID",
"action": "CREATE_MESSAGE",
"params": {
  "conversation_id": "UUID",
  "category": "PLAIN_CONTACT"
  "status": "SENT",
  "message_id": "UUID",
  "data":  "Base64 encoded data"
}

} data format: { “user_id”: “UUID”}

# File lib/mixin_bot/api/message.rb, line 143
def plain_contact(options)
  options.merge!(category: 'PLAIN_CONTACT')
  base_message_params(options)
end
plain_data(options) click to toggle source

{

"id":  "UUID",
"action":  "CREATE_MESSAGE",
"params": {
  "conversation_id": "UUID",
  "category": "PLAIN_DATA",
  "status": "SENT",
  "message_id": "UUID",
  "data": "Base64 encoded data",
}

} data format: {

"attachment_id": "Read From POST /attachments",
"mime_type": "",
"size": 1024,
"name": "Share"

}

# File lib/mixin_bot/api/message.rb, line 104
def plain_data(options)
  options.merge!(category: 'PLAIN_DATA')
  base_message_params(options)
end
plain_image(options) click to toggle source

{

"id": "UUID",
"action": "CREATE_MESSAGE",
"params": {
  "conversation_id": "UUID"
  "category": "PLAIN_IMAGE"
  "status": "SENT",
  "message_id": "UUID",
  "data": "Base64 encoded data"
}

} data format: {

"attachment_id":
"Read From POST /attachments",
"mime_type": "",
"width": 1024,
"height": 1024,
"size": 1024,
"thumbnail": "base64 encoded"

}

# File lib/mixin_bot/api/message.rb, line 81
def plain_image(options)
  options.merge!(category: 'PLAIN_IMAGE')
  base_message_params(options)
end
plain_post(options) click to toggle source

{

"id": "UUID // generated by client",
"action":  "CREATE_MESSAGE",
"params": {
  "conversation_id": "UUID",
  "category": "PLAIN_POST",
  "status": "SENT",
  "message_id": "UUID // generated by client",
  "data": "Base64 encoded data content is markdown" ,
}

}

# File lib/mixin_bot/api/message.rb, line 55
def plain_post(options)
  options.merge!(category: 'PLAIN_POST')
  base_message_params(options)
end
plain_sticker(options) click to toggle source

{

"id":  "UUID",
"action":  "CREATE_MESSAGE",
"params": {
  "conversation_id": "UUID",
  "category": "PLAIN_STICKER",
  "status": "SENT",
  "message_id":  "UUID",
  "data": "Base64 encoded data"
}

} data format: {

"name": "hello",
"album_id": "UUID"

}

# File lib/mixin_bot/api/message.rb, line 125
def plain_sticker(options)
  options.merge!(category: 'PLAIN_STICKER')
  base_message_params(options)
end
plain_text(options) click to toggle source

{

"id": "UUID // generated by client",
"action":  "CREATE_MESSAGE",
"params": {
  "conversation_id": "UUID",
  "category": "PLAIN_TEXT",
  "status": "SENT",
  "message_id": "UUID // generated by client",
  "data": "Base64 encoded data" ,
}

}

# File lib/mixin_bot/api/message.rb, line 39
def plain_text(options)
  options.merge!(category: 'PLAIN_TEXT')
  base_message_params(options)
end
plain_video(options) click to toggle source

{

"id": "UUID",
"action": "CREATE_MESSAGE",
"params": {
  "conversation_id": "UUID",
  "category": "PLAIN_VIDEO",
  "status": "SENT",
  "message_id": "UUID",
  "data": "Base64 encoded data"
}

} data format: {

"attachment_id": "Read From POST /attachments",
"mime_type": "",
"width": 1024,
"height": 1024,
"size": 1024,
"duration": 1024,
"thumbnail": "base64 encoded"

}

# File lib/mixin_bot/api/message.rb, line 217
def plain_video(options)
  options.merge!(category: 'PLAIN_VIDEO')
  base_message_params(options)
end
read_ws_message(data) click to toggle source

read the gzipped message form websocket

# File lib/mixin_bot/api/message.rb, line 250
def read_ws_message(data)
  io = StringIO.new(data.pack('c*'), 'rb')
  gzip = Zlib::GzipReader.new io
  msg = gzip.read
  gzip.close

  msg
end
recall_message(message_id, options) click to toggle source
# File lib/mixin_bot/api/message.rb, line 295
def recall_message(message_id, options)
  send_message [recall_message_params(message_id, options)]
end
recall_message_params(message_id, options) click to toggle source
# File lib/mixin_bot/api/message.rb, line 222
def recall_message_params(message_id, options)
  raise 'recipient_id is required!' if options[:recipient_id].nil?

  options.merge!(
    category: 'MESSAGE_RECALL',
    data: {
      message_id: message_id
    }
  )
  base_message_params(options)
end
send_app_button_group_message(options) click to toggle source
# File lib/mixin_bot/api/message.rb, line 291
def send_app_button_group_message(options)
  send_message app_button_group(options)
end
send_app_card_message(options) click to toggle source
# File lib/mixin_bot/api/message.rb, line 287
def send_app_card_message(options)
  send_message app_card(options)
end
send_contact_message(options) click to toggle source
# File lib/mixin_bot/api/message.rb, line 283
def send_contact_message(options)
  send_message plain_contact(options)
end
send_message(payload) click to toggle source

http post request

# File lib/mixin_bot/api/message.rb, line 322
def send_message(payload)
  path = '/messages'
  access_token ||= access_token('POST', path, payload.to_json)
  authorization = format('Bearer %<access_token>s', access_token: access_token)
  client.post(path, headers: { 'Authorization': authorization }, json: payload)
end
send_plain_messages(messages) click to toggle source

{

"id": "UUID",
"action": "CREATE_PLAIN_MESSAGES",
"params": {
  "messages": [
    {
      "conversation_id": "UUID",
      "recipient_id": "UUID",
      "message_id": "UUID",
      "representative_id": "UUID (optional, only supported in peer to peer conversation)",
      "quote_message_id": "UUID (optional, only supported text, e.g. PLAIN_TEXT)",
      "category": "Only support plain category e.g.: PLAIN_TEXT, PLAIN_STICKER etc",
      "data": "Correspond to category."
    },
    ...
  ]
}

}

# File lib/mixin_bot/api/message.rb, line 317
def send_plain_messages(messages)
  send_message messages
end
send_post_message(options) click to toggle source
# File lib/mixin_bot/api/message.rb, line 279
def send_post_message(options)
  send_message plain_post(options)
end
send_text_message(options) click to toggle source

use HTTP to send message

# File lib/mixin_bot/api/message.rb, line 275
def send_text_message(options)
  send_message plain_text(options)
end
write_ws_message(params:, action: 'CREATE_MESSAGE') click to toggle source

gzip the message for websocket

# File lib/mixin_bot/api/message.rb, line 260
def write_ws_message(params:, action: 'CREATE_MESSAGE')
  msg = {
    id: SecureRandom.uuid,
    action: action,
    params: params
  }.to_json

  io = StringIO.new 'wb'
  gzip = Zlib::GzipWriter.new io
  gzip.write msg
  gzip.close
  io.string.unpack('c*')
end