Best Practices

  1. Key everything on conversationId - it is stable and every route accepts it
  2. Poll with fromDate, not offSet - the activity feed reorders as messages arrive
  3. Check success per attachment - the message sends even when one file is rejected
  4. Store fileName, not name - downloads use the stored name
  5. Treat a reply as a read receipt - there is no separate mark-as-read call