1.2.1 • Published 7 years ago

forever-chat-format v1.2.1

Weekly downloads
1
License
ISC
Repository
-
Last release
7 years ago

Forever Chat Format

Why

Because in the world where our communication is siloed into Google Hangouts, Facebook, iMessage, WhatsApp, etc etc it's getting hard to hold onto conversations for archival purposes. First thing we need is a universal format that we can export those proprietary chats into that's easy to understand, and that can be relied upon.

Basic Format

Output should be an array of hashes, and each object in the array is a JSON object defined as follows:

Chat Object Definition

NameTypeDescription
shastringsha1 of sender, receiver, date, text, service
senderstringThe handle of the person sending the message
receiverstringThe handle of the person receiving the message
is_from_mebooleantrue if you sent the message
send_errorbooleantrue if the message didn't send
dateISO-8601 datetimedate message was sent/received by sender
servicestringService message was sent using. All lowercase, dasherized. 'imessage', 'google-hangouts', 'facebook-messenger', 'sms'
date_readISO-8601 datetime(optional) date message was sent/read by receiver
date_deliveredISO-8601 datetime(optional) date message was delivered by receiver
participantsarray(see definition below) An array of strings of handles involved in the conversations. Used for grouping. For a two person conversation, this has two entries in it. Sender and receiver are always here.
message_textstringtext representation of the message
message_segmentsarray(see definition below) ordered segments of content as it appears in the message
attachmentsarray(see definition below) array of attachments
associated_shastringsha of message this message is in response to. Generally used for reactions
_debugobject(optional) debug information to help trace back to the source of the data

Message Segment Definition

NameTypePossible ValuesDescription
typestringtext, link, filebase segment type
file_typestringnull, or a mime_typeonly valid when type == file
pathstringurl or file path
textstringthe rendered name of the link, or the text content for the text, or optionally
Text Segment
{"type": "text", "text": "Why hello there"}
Link Segment
{"type": "link", "text": "Whoa, unreal", "path": "http://latlmes.com/technology/why-we-need-a-new-chat-format-1"}
File Segment
{"type": "file", "file_type": "image/png", "path": "/path/to/image.png"}
Reaction Segment
{"type": "reaction", "reaction_type": "laughed"}
Attachments

Array of attachments in the order they were received. Each attachment has the following properties. This information should also be made available in message_segments.

NameType
pathstring
typestring
Usage

The included tests check whether some json is valid forever chat format.

var foreverJson    = importer("test.json"); // done by an exporter

var {validate, runTests} = require('forever-chat-format-tests');

runTests(foreverJson); // runs mocha tests on data

The last step of your exporter should be to pass your exported data to the prepare function. It will check that the data conforms to the forever-chat-format spec and then return a hash with two keys: messages, and validations. Messages is all the data your exporter returned, and validations are what you see below:

"validations": {
  "version":           1.2 // forever chat version
  "checkedCount":      100 // number of records checked
  "errorCount":        0   // number of records with errors
  "recordsWithErrors":
  "ruleResults": { /* each rule keyed by name with errorCount and "erroredRecords" */
    "unique-sha": {
      "description":    "Each record should have a unique sha",
      "errorCount":     0,
      "erroredRecords": []
    }

    ...
  }
}
Testing
var foreverJson   = importer("test.json"); // done by an exporter
var {validate, runTests} = require('forever-chat-format-tests');
runTests(foreverJson);
1.2.1

7 years ago

1.2.0

7 years ago

1.1.0

7 years ago

1.0.0

7 years ago

0.0.3

7 years ago

0.0.2

8 years ago

0.0.1

8 years ago