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_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_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